设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4404|回复: 20
打印 上一主题 下一主题

[已经解决] 有个很喜欢的VX脚本,想找VA的版本

[复制链接]

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
跳转到指定楼层
发表于 2014-8-14 15:35:34 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 白玉楼的台阶 于 2014-8-14 16:47 编辑

这个脚本的大致作用是主角有一类特殊技能,可以在菜单里面像选择装备一样挑选使用,不同的技能消耗不同的CP值,总和不能超过一定数量
http://www.tu265.com/di-bc7cc1115b64c2f457cce8110285a2ea.png
http://www.tu265.com/di-ae1e4c83c66d00517295e27b982a1b7b.png
这是游戏中实际使用的效果
http://www.tu265.com/di-6a1d34d769f0a640a4a5c860348f0ff6.png
这是数据库里面对应技能的设定

下面是完整的脚本

RUBY 代码复制
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ スキルCP制 - KGC_SkillCPSystem ◆ VX ◆
  3. #_/    ◇ Last update : 2009/09/13 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  戦闘中に使用可能なスキルを限定する機能を追加します。
  6. #_/============================================================================
  7. #_/ 【装備】≪スキル習得装備≫ より下に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  9.  
  10. #==============================================================================
  11. # ★ カスタマイズ項目 - Customize ★
  12. #==============================================================================
  13.  
  14. module KGC
  15. module SkillCPSystem
  16.   # ◆ 登録スキル最大数
  17.   MAX_SKILLS = 3
  18.   # ◆ CP の名称
  19.   VOCAB_CP   = "CP"
  20.   # ◆ CP の名称 (略)
  21.   VOCAB_CP_A = "C"
  22.   # ◆ ステータス画面に CP を表示する
  23.   SHOW_STATUS_CP = true
  24.  
  25.   # ◆ 消費 CP 既定値
  26.   #  消費 CP 未指定のスキルで使用。
  27.   DEFAULT_CP_COST = 1
  28.   # ◆ CP 上限
  29.   #  (固有 CP などを除いた) 素の状態での CP 上限。
  30.   CP_MAX = 20
  31.   # ◆ CP 下限
  32.   CP_MIN = 1
  33.   # ◆ 補正後の CP 上限
  34.   #  固有 CP や装備品による変動を含めた上限。
  35.   REVISED_CP_MAX = 20
  36.   # ◆ 補正後の CP 下限
  37.   REVISED_CP_MIN = 0
  38.   # ◆ 最大 CP 算出式
  39.   #   level..現在のレベル
  40.   #  自動的に整数変換するので、結果が小数になってもOK。
  41.   CP_CALC_EXP = "level * 0.5 + 1.0"
  42.   # ◆ アクター毎の最大 CP 算出式
  43.   PERSONAL_CP_CALC_EXP = []
  44.   #  ここから下に、アクターごとの最大 CP を
  45.   #   PERSONAL_CP_CALC_EXP[アクター ID] = "計算式"
  46.   #  という書式で指定。
  47.   #  計算式は CP_CALC_EXP と同様の書式。
  48.   #  指定しなかったアクターは CP_CALC_EXP を使用。
  49.   #   <例> ラルフだけ優遇
  50.   # PERSONAL_CP_CALC_EXP[1] = "level * 0.8 + 2.0"
  51.  
  52.   # ◆ 戦闘テスト時は無効化
  53.   #  true  : 戦闘テスト時は全スキルを使用可能。
  54.   #  false : 戦闘テスト時は (セットしない限り) 使用不可。
  55.   DISABLE_IN_BATTLETEST  = false
  56.   # ◆ 使用不可スキルもセット可能
  57.   SHOW_UNUSABLE_SKILL    = true
  58.   # ◆ 消費 CP 0 のスキルはセットしなくても使用可能
  59.   USABLE_COST_ZERO_SKILL = true
  60.   # ◆ パッシブスキルはセットしないと効果なし
  61.   #  ≪パッシブスキル≫ 導入時のみ有効。
  62.   PASSIVE_NEED_TO_SET    = true
  63.   # ◆ 新規習得スキルを自動的にセット
  64.   #  true  : 習得したスキルを空きスロットにセット。
  65.   #           ※ ≪スキル習得装備≫ で習得したスキルは無効。
  66.   #  false : 習得しただけではセットされない (手動でセット)。
  67.   AUTO_SET_NEW_SKILL     = false
  68.   # ◆ 消費 CP 0 の場合も消費 CP を表示する
  69.   #  true  : 消費 CP 0 でも表示
  70.   #  false : 消費 CP 1 以上の場合のみ表示
  71.   SHOW_ZERO_COST         = false
  72.  
  73.   # ◆ CP ゲージの色
  74.   #  数値  : \C[n] と同じ色。
  75.   #  Color : 指定した色。 ( Color.new(255, 128, 128) など )
  76.   GAUGE_START_COLOR = 13  # 開始色
  77.   GAUGE_END_COLOR   =  5  # 終了色
  78.  
  79.   # ◆ CP ゲージに汎用ゲージを使用する
  80.   #  ≪汎用ゲージ描画≫ 導入時のみ有効。
  81.   ENABLE_GENERIC_GAUGE = true
  82.   # ◆ CP ゲージ設定
  83.   #  画像は "Graphics/System" から読み込む。
  84.   GAUGE_IMAGE  = "GaugeCP"  # 画像
  85.   GAUGE_OFFSET = [-23, -2]  # 位置補正 [x, y]
  86.   GAUGE_LENGTH = -4         # 長さ補正
  87.   GAUGE_SLOPE  = 30         # 傾き (-89 ~ 89)
  88.  
  89.   # ◆ メニュー画面に「スキル設定」コマンドを追加する
  90.   #  追加する場所は、メニューコマンドの最下部です。
  91.   #  他の部分に追加したければ、≪カスタムメニューコマンド≫ をご利用ください。
  92.   USE_MENU_SET_SKILL_COMMAND = true
  93.   # ◆ メニュー画面の「スキル設定」コマンドの名称
  94.   VOCAB_MENU_SET_SKILL       = "设定技能"
  95.  
  96.   # ◆ 未設定項目の表示文字列
  97.   BLANK_TEXT   = "-  EMPTY  -"
  98.   # ◆ 設定解除の表示文字列
  99.   RELEASE_TEXT = "( 設定解除 )"
  100. end
  101. end
  102.  
  103. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  104.  
  105. $imported = {} if $imported == nil
  106. $imported["SkillCPSystem"] = true
  107.  
  108. module KGC::SkillCPSystem
  109.   module Regexp
  110.     module BaseItem
  111.       # 最大 CP
  112.       MAXCP_PLUS = /<(?:MAX|最大)CP\s*([\-\+]?\d+)>/
  113.       # 登録スキル数
  114.       BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|登録スキル数)\s*([\-\+]?\d+)>/i
  115.     end
  116.  
  117.     module Skill
  118.       # 消費 CP
  119.       CP_COST = /<CP\s*(\d+)>/i
  120.       # 同時セット不可
  121.       EXCLUDE = /<(?:EXCLUDE|同時セット不可)\s*(\d+(?:\s*,\s*\d+)*)>/
  122.     end
  123.   end
  124. end
  125.  
  126. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  127.  
  128. #==============================================================================
  129. # □ KGC::Commands
  130. #==============================================================================
  131.  
  132. module KGC
  133. module Commands
  134.   module_function
  135.   #--------------------------------------------------------------------------
  136.   # ○ MaxCP 補正値の取得
  137.   #     actor_id    : アクター ID
  138.   #     variable_id : 取得した値を代入する変数の ID
  139.   #--------------------------------------------------------------------------
  140.   def get_actor_own_cp(actor_id, variable_id = 0)
  141.     value = $game_actors[actor_id].maxcp_plus
  142.     $game_variables[variable_id] = value if variable_id > 0
  143.     return value
  144.   end
  145.   alias get_own_cp get_actor_own_cp
  146.   #--------------------------------------------------------------------------
  147.   # ○ MaxCP 補正値の変更
  148.   #     actor_id : アクター ID
  149.   #     value    : MaxCP 補正値
  150.   #--------------------------------------------------------------------------
  151.   def set_actor_own_cp(actor_id, value)
  152.     $game_actors[actor_id].maxcp_plus = value
  153.   end
  154.   alias set_own_cp set_actor_own_cp
  155.   #--------------------------------------------------------------------------
  156.   # ○ アクターの MaxCP 補正値の増加
  157.   #     actor_id : アクター ID
  158.   #     value    : 増加量
  159.   #--------------------------------------------------------------------------
  160.   def gain_actor_cp(actor_id, value)
  161.     $game_actors[actor_id].maxcp_plus += value
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ○ 登録スキル最大数の取得
  165.   #     actor_id : アクター ID
  166.   #     variable_id : 取得した値を代入する変数の ID
  167.   #--------------------------------------------------------------------------
  168.   def get_battle_skill_max(actor_id, variable_id = 0)
  169.     value = $game_actors[actor_id].battle_skill_max
  170.     $game_variables[variable_id] = value if variable_id > 0
  171.     return value
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ○ 登録スキル最大数の変更
  175.   #     actor_id : アクター ID
  176.   #     value    : 登録可能数
  177.   #--------------------------------------------------------------------------
  178.   def set_battle_skill_max(actor_id, value = -1)
  179.     $game_actors[actor_id].battle_skill_max = value
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ○ スキルが登録されているか
  183.   #     actor_id : アクター ID
  184.   #     skill_id : 確認するスキル ID
  185.   #--------------------------------------------------------------------------
  186.   def battle_skill_set?(actor_id, skill_id)
  187.     return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ○ スキルの登録
  191.   #     actor_id : アクター ID
  192.   #     index    : 登録箇所
  193.   #     skill_id : 登録するスキル ID (nil で解除)
  194.   #--------------------------------------------------------------------------
  195.   def set_battle_skill(actor_id, index, skill_id = nil)
  196.     actor = $game_actors[actor_id]
  197.     if skill_id.is_a?(Integer)
  198.       # 登録
  199.       skill = $data_skills[skill_id]
  200.       return unless actor.battle_skill_settable?(index, skill)  # セット不可
  201.  
  202.       actor.set_battle_skill(index, skill)
  203.       actor.restore_battle_skill
  204.     else
  205.       # 解除
  206.       actor.remove_battle_skill(index)
  207.     end
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ○ スキルの追加登録
  211.   #     actor_id : アクター ID
  212.   #     skill_id : 登録するスキル ID
  213.   #--------------------------------------------------------------------------
  214.   def add_battle_skill(actor_id, skill_id)
  215.     actor = $game_actors[actor_id]
  216.     skill = $data_skills[skill_id]
  217.     return if actor == nil || skill == nil
  218.  
  219.     actor.add_battle_skill(skill)
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ○ スキルの全解除
  223.   #     actor_id : アクター ID
  224.   #--------------------------------------------------------------------------
  225.   def clear_battle_skill(actor_id)
  226.     $game_actors[actor_id].clear_battle_skill
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ○ スキル設定画面の呼び出し
  230.   #     actor_index : アクターインデックス
  231.   #--------------------------------------------------------------------------
  232.   def call_set_battle_skill(actor_index = 0)
  233.     return if $game_temp.in_battle
  234.     $game_temp.next_scene = :set_battle_skill
  235.     $game_temp.next_scene_actor_index = actor_index
  236.   end
  237. end
  238. end
  239.  
  240. class Game_Interpreter
  241.   include KGC::Commands
  242. end
  243.  
  244. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  245.  
  246. #==============================================================================
  247. # ■ Vocab
  248. #==============================================================================
  249.  
  250. module Vocab
  251.   # CP
  252.   def self.cp
  253.     return KGC::SkillCPSystem::VOCAB_CP
  254.   end
  255.  
  256.   # CP (略)
  257.   def self.cp_a
  258.     return KGC::SkillCPSystem::VOCAB_CP_A
  259.   end
  260.  
  261.   # スキル設定
  262.   def self.set_battle_skill
  263.     return KGC::SkillCPSystem::VOCAB_MENU_SET_SKILL
  264.   end
  265. end
  266.  
  267. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  268.  
  269. #==============================================================================
  270. # ■ RPG::BaseItem
  271. #==============================================================================
  272.  
  273. class RPG::BaseItem
  274.   #--------------------------------------------------------------------------
  275.   # ○ スキルCP制のキャッシュを生成
  276.   #--------------------------------------------------------------------------
  277.   def create_skill_cp_system_cache
  278.     @__maxcp_plus = 0
  279.     @__battle_skill_max_plus = 0
  280.  
  281.     self.note.each_line { |line|
  282.       case line
  283.       when KGC::SkillCPSystem::Regexp::BaseItem::MAXCP_PLUS
  284.         # 最大 CP
  285.         @__maxcp_plus += $1.to_i
  286.       when KGC::SkillCPSystem::Regexp::BaseItem::BATTLE_SKILL_MAX
  287.         # 登録スキル数
  288.         @__battle_skill_max_plus += $1.to_i
  289.       end
  290.     }
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ○ 最大 CP 補正
  294.   #--------------------------------------------------------------------------
  295.   def maxcp_plus
  296.     create_skill_cp_system_cache if @__maxcp_plus == nil
  297.     return @__maxcp_plus
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ○ 登録スキル数補正
  301.   #--------------------------------------------------------------------------
  302.   def battle_skill_max_plus
  303.     create_skill_cp_system_cache if @__battle_skill_max_plus == nil
  304.     return @__battle_skill_max_plus
  305.   end
  306. end
  307.  
  308. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  309.  
  310. #==============================================================================
  311. # ■ RPG::Skill
  312. #==============================================================================
  313.  
  314. class RPG::Skill < RPG::UsableItem
  315.   #--------------------------------------------------------------------------
  316.   # ○ スキルCP制のキャッシュを生成
  317.   #--------------------------------------------------------------------------
  318.   def create_skill_cp_system_cache
  319.     @__cp_cost = KGC::SkillCPSystem::DEFAULT_CP_COST
  320.     @__excluded_skills = []
  321.  
  322.     self.note.each_line { |line|
  323.       case line
  324.       when KGC::SkillCPSystem::Regexp::Skill::CP_COST
  325.         # 消費 CP
  326.         @__cp_cost = $1.to_i
  327.       when KGC::SkillCPSystem::Regexp::Skill::EXCLUDE
  328.         # 同時セット不可
  329.         $1.scan(/\d+/).each { |num| @__excluded_skills << num.to_i }
  330.         @__excluded_skills.uniq!
  331.       end
  332.     }
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ○ 消費 CP
  336.   #--------------------------------------------------------------------------
  337.   def cp_cost
  338.     create_skill_cp_system_cache if @__cp_cost == nil
  339.     return @__cp_cost
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ○ 同時セット不可
  343.   #--------------------------------------------------------------------------
  344.   def excluded_skills
  345.     create_skill_cp_system_cache if @__excluded_skills == nil
  346.     return @__excluded_skills
  347.   end
  348. end
  349.  
  350. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  351.  
  352. #==============================================================================
  353. # ■ Game_Battler
  354. #==============================================================================
  355.  
  356. class Game_Battler
  357.   #--------------------------------------------------------------------------
  358.   # ○ 戦闘用スキルセット済み判定
  359.   #     skill : スキル
  360.   #--------------------------------------------------------------------------
  361.   def battle_skill_set?(skill)
  362.     return true
  363.   end
  364. end
  365.  
  366. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  367.  
  368. #==============================================================================
  369. # ■ Game_Actor
  370. #==============================================================================
  371.  
  372. class Game_Actor < Game_Battler
  373.   #--------------------------------------------------------------------------
  374.   # ● 公開インスタンス変数
  375.   #--------------------------------------------------------------------------
  376.   attr_writer   :maxcp_plus               # MaxCP 補正値
  377.   #--------------------------------------------------------------------------
  378.   # ○ MaxCP 取得
  379.   #--------------------------------------------------------------------------
  380.   def maxcp
  381.     calc_exp = KGC::SkillCPSystem::PERSONAL_CP_CALC_EXP[self.id]
  382.     if calc_exp == nil
  383.       calc_exp = KGC::SkillCPSystem::CP_CALC_EXP
  384.     end
  385.     n = Integer(eval(calc_exp))
  386.     n = [[n, cp_limit].min, KGC::SkillCPSystem::CP_MIN].max
  387.     n += maxcp_plus + maxcp_plus_equip
  388.     return [[n, revised_cp_limit].min, KGC::SkillCPSystem::REVISED_CP_MIN].max
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ○ CP 取得
  392.   #--------------------------------------------------------------------------
  393.   def cp
  394.     return [maxcp - consumed_cp, 0].max
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ○ CP 消費量取得
  398.   #--------------------------------------------------------------------------
  399.   def consumed_cp
  400.     n = 0
  401.     battle_skills.compact.each { |skill| n += skill.cp_cost }
  402.     return n
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ○ CP 上限取得
  406.   #--------------------------------------------------------------------------
  407.   def cp_limit
  408.     return KGC::SkillCPSystem::CP_MAX
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # ○ 補正後の CP 上限取得
  412.   #--------------------------------------------------------------------------
  413.   def revised_cp_limit
  414.     return KGC::SkillCPSystem::REVISED_CP_MAX
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ○ MaxCP 補正値取得
  418.   #--------------------------------------------------------------------------
  419.   def maxcp_plus
  420.     if @maxcp_plus == nil
  421.       if @own_cp != nil
  422.         @maxcp_plus = @own_cp
  423.         @own_cp = nil
  424.       else
  425.         @maxcp_plus = 0
  426.       end
  427.     end
  428.     return @maxcp_plus
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ○ 装備品による MaxCP 補正値取得
  432.   #--------------------------------------------------------------------------
  433.   def maxcp_plus_equip
  434.     n = 0
  435.     equips.compact.each { |item| n += item.maxcp_plus }
  436.     return n
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● スキル取得
  440.   #--------------------------------------------------------------------------
  441.   alias skills_KGC_SkillCPSystem skills
  442.   def skills
  443.     return (skill_cp_restrict? ? restricted_skills : skills_KGC_SkillCPSystem)
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ○ スキルを制限するか
  447.   #--------------------------------------------------------------------------
  448.   def skill_cp_restrict?
  449.     if $game_temp.in_battle
  450.       # 戦闘テストでないか、戦闘テストでも制限する場合
  451.       return true unless $BTEST && KGC::SkillCPSystem::DISABLE_IN_BATTLETEST
  452.     end
  453.  
  454.     return false
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ○ スキルを制限
  458.   #--------------------------------------------------------------------------
  459.   def restricted_skills
  460.     result = all_skills
  461.     result.each_with_index { |skill, i|
  462.       # 消費 CP > 0 のスキルを除外
  463.       if !KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0
  464.         result[i] = nil
  465.       end
  466.       # パッシブスキルを除外
  467.       if $imported["PassiveSkill"] && KGC::SkillCPSystem::PASSIVE_NEED_TO_SET
  468.         if skill.passive &&
  469.             (!KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0)
  470.           result[i] = nil
  471.         end
  472.       end
  473.     }
  474.     result.compact!
  475.     # 戦闘スキルを追加
  476.     result |= battle_skills
  477.     result.sort! { |a, b| a.id <=> b.id }
  478.     return result
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # ○ 全スキル取得
  482.   #--------------------------------------------------------------------------
  483.   def all_skills
  484.     # 一時的に非戦闘中にする
  485.     last_in_battle = $game_temp.in_battle
  486.     $game_temp.in_battle = false
  487.  
  488.     result = skills_KGC_SkillCPSystem
  489.     if $imported["EquipLearnSkill"]
  490.       result |= (equipment_skills | full_ap_skills)
  491.       result.sort! { |a, b| a.id <=> b.id }
  492.     end
  493.  
  494.     # 戦闘中フラグを戻す
  495.     $game_temp.in_battle = last_in_battle
  496.  
  497.     return result
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ○ 登録スキル最大数取得
  501.   #--------------------------------------------------------------------------
  502.   def battle_skill_max
  503.     @battle_skill_max = -1 if @battle_skill_max == nil
  504.     n = (@battle_skill_max < 0 ?
  505.       KGC::SkillCPSystem::MAX_SKILLS : @battle_skill_max)
  506.     n += equipment_battle_skill_max_plus
  507.     return [n, 0].max
  508.   end
  509.   #--------------------------------------------------------------------------
  510.   # ○ 装備品による登録スキル数補正
  511.   #--------------------------------------------------------------------------
  512.   def equipment_battle_skill_max_plus
  513.     n = 0
  514.     equips.compact.each { |item| n += item.battle_skill_max_plus }
  515.     return n
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ○ 登録スキル最大数設定
  519.   #--------------------------------------------------------------------------
  520.   def battle_skill_max=(value)
  521.     @battle_skill_max = value
  522.     if @battle_skills == nil
  523.       @battle_skills = []
  524.     else
  525.       @battle_skills = @battle_skills[0...value]
  526.     end
  527.     restore_passive_rev if $imported["PassiveSkill"]
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ○ 戦闘用スキル ID 取得
  531.   #--------------------------------------------------------------------------
  532.   def battle_skill_ids
  533.     @battle_skills = [] if @battle_skills == nil
  534.     return @battle_skills
  535.   end
  536.   #--------------------------------------------------------------------------
  537.   # ○ 戦闘用スキル取得
  538.   #--------------------------------------------------------------------------
  539.   def battle_skills
  540.     result = []
  541.     battle_skill_ids.each { |i|
  542.       next if i == nil           # 無効なスキルは無視
  543.       result << $data_skills[i]
  544.     }
  545.     return result
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # ○ 戦闘用スキル登録
  549.   #     index : 位置
  550.   #     skill : スキル (nil で解除)
  551.   #--------------------------------------------------------------------------
  552.   def set_battle_skill(index, skill)
  553.     if skill == nil
  554.       @battle_skills[index] = nil
  555.     else
  556.       return unless skill.is_a?(RPG::Skill)  # スキル以外
  557.       return if cp < skill.cp_cost           # CP 不足
  558.       return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  559.  
  560.       @battle_skills[index] = skill.id
  561.     end
  562.     restore_passive_rev if $imported["PassiveSkill"]
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ○ 戦闘用スキル追加登録
  566.   #     skill : スキル
  567.   #--------------------------------------------------------------------------
  568.   def add_battle_skill(skill)
  569.     return unless skill.is_a?(RPG::Skill)  # スキル以外
  570.     skills = battle_skill_ids
  571.     return if skills.include?(skill.id)    # 登録済み
  572.     return if cp < skill.cp_cost           # CP 不足
  573.     return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  574.  
  575.     battle_skill_max.times { |i|
  576.       # 空きがあれば登録
  577.       if skills[i] == nil
  578.         set_battle_skill(i, skill)
  579.         break
  580.       end
  581.     }
  582.     restore_battle_skill
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ○ 戦闘用スキル解除
  586.   #     index : 位置
  587.   #--------------------------------------------------------------------------
  588.   def remove_battle_skill(index)
  589.     @battle_skills[index] = nil
  590.     restore_passive_rev if $imported["PassiveSkill"]
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # ○ 戦闘用スキル全解除
  594.   #--------------------------------------------------------------------------
  595.   def clear_battle_skill
  596.     @battle_skills = []
  597.     restore_passive_rev if $imported["PassiveSkill"]
  598.   end
  599.   #--------------------------------------------------------------------------
  600.   # ○ 戦闘用スキルセット可否判定
  601.   #     index : 位置
  602.   #     skill : スキル
  603.   #--------------------------------------------------------------------------
  604.   def battle_skill_settable?(index, skill)
  605.     return false if battle_skill_max <= index  # 範囲外
  606.     return true  if skill == nil               # nil は解除なので OK
  607.  
  608.     return false if battle_skill_ids.include?(skill.id)  # セット済み
  609.  
  610.     curr_skill_id = battle_skill_ids[index]
  611.     curr_skill    = (curr_skill_id != nil ? $data_skills[curr_skill_id] : nil)
  612.  
  613.     # 同時セット不可
  614.     excluded  = excluded_battle_skill_ids
  615.     excluded -= curr_skill.excluded_skills if curr_skill != nil
  616.     return false if excluded.include?(skill.id)
  617.  
  618.     offset = (curr_skill != nil ? curr_skill.cp_cost : 0)
  619.     return false if self.cp < (skill.cp_cost - offset)  # CP 不足
  620.  
  621.     return true
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ○ Exclude スキル ID 取得
  625.   #--------------------------------------------------------------------------
  626.   def excluded_battle_skill_ids
  627.     result = []
  628.     battle_skills.each { |skill| result |= skill.excluded_skills }
  629.     return result
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ○ 戦闘用スキルを修復
  633.   #--------------------------------------------------------------------------
  634.   def restore_battle_skill
  635.     result = battle_skill_ids.clone
  636.     usable_skills = all_skills
  637.  
  638.     result.each_with_index { |n, i|
  639.       next if n == nil
  640.       # 未修得の場合は解除
  641.       if (usable_skills.find { |s| s.id == n }) == nil
  642.         result[i] = nil
  643.       end
  644.     }
  645.     @battle_skills = result[0...battle_skill_max]
  646.     # CP 不足のスキルを下から順に外す
  647.     (battle_skill_max - 1).downto(0) { |i|
  648.       @battle_skills[i] = nil if maxcp - consumed_cp < 0
  649.     }
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ● 装備の変更 (オブジェクトで指定)
  653.   #     equip_type : 装備部位 (0..4)
  654.   #     item       : 武器 or 防具 (nil なら装備解除)
  655.   #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  656.   #--------------------------------------------------------------------------
  657.   alias change_equip_KGC_SkillCPSystem change_equip
  658.   def change_equip(equip_type, item, test = false)
  659.     change_equip_KGC_SkillCPSystem(equip_type, item, test)
  660.  
  661.     unless test
  662.       restore_battle_skill
  663.       restore_passive_rev if $imported["PassiveSkill"]
  664.     end
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● 装備の破棄
  668.   #     item : 破棄する武器 or 防具
  669.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  670.   #--------------------------------------------------------------------------
  671.   alias discard_equip_KGC_SkillCPSystem discard_equip
  672.   def discard_equip(item)
  673.     discard_equip_KGC_SkillCPSystem(item)
  674.  
  675.     restore_battle_skill
  676.     restore_passive_rev if $imported["PassiveSkill"]
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● 経験値の変更
  680.   #     exp  : 新しい経験値
  681.   #     show : レベルアップ表示フラグ
  682.   #--------------------------------------------------------------------------
  683.   alias change_exp_KGC_SkillCPSystem change_exp
  684.   def change_exp(exp, show)
  685.     # 習得したスキルを表示するため、戦闘中フラグを一時的に解除
  686.     last_in_battle = $game_temp.in_battle
  687.     $game_temp.in_battle = false
  688.  
  689.     change_exp_KGC_SkillCPSystem(exp, show)
  690.  
  691.     $game_temp.in_battle = last_in_battle
  692.   end
  693.  
  694.   if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
  695.   #--------------------------------------------------------------------------
  696.   # ● スキルを覚える
  697.   #     skill_id : スキル ID
  698.   #--------------------------------------------------------------------------
  699.   alias learn_skill_KGC_SkillCPSystem learn_skill
  700.   def learn_skill(skill_id)
  701.     learn_skill_KGC_SkillCPSystem(skill_id)
  702.  
  703.     add_battle_skill($data_skills[skill_id])
  704.   end
  705.   end  # <- if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
  706.  
  707.   #--------------------------------------------------------------------------
  708.   # ● スキルを忘れる
  709.   #     skill_id : スキル ID
  710.   #--------------------------------------------------------------------------
  711.   alias forget_skill_KGC_SkillCPSystem forget_skill
  712.   def forget_skill(skill_id)
  713.     # 忘れるスキルを戦闘用スキルから削除
  714.     battle_skill_ids.each_with_index { |s, i|
  715.       remove_battle_skill(i) if s == skill_id
  716.     }
  717.  
  718.     forget_skill_KGC_SkillCPSystem(skill_id)
  719.   end
  720.   #--------------------------------------------------------------------------
  721.   # ○ 戦闘用スキルセット済み判定
  722.   #     skill : スキル
  723.   #--------------------------------------------------------------------------
  724.   def battle_skill_set?(skill)
  725.     return false unless skill.is_a?(RPG::Skill)  # スキル以外
  726.  
  727.     return battle_skill_ids.include?(skill.id)
  728.   end
  729. end
  730.  
  731. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  732.  
  733. #==============================================================================
  734. # ■ Window_Base
  735. #==============================================================================
  736.  
  737. class Window_Base < Window
  738.   #--------------------------------------------------------------------------
  739.   # ○ CP の文字色を取得
  740.   #     actor : アクター
  741.   #--------------------------------------------------------------------------
  742.   def cp_color(actor)
  743.     return knockout_color if actor.maxcp > 0 && actor.cp == 0
  744.     return normal_color
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ○ CP ゲージの色 1 の取得
  748.   #--------------------------------------------------------------------------
  749.   def cp_gauge_color1
  750.     color = KGC::SkillCPSystem::GAUGE_START_COLOR
  751.     return (color.is_a?(Integer) ? text_color(color) : color)
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ○ CP ゲージの色 2 の取得
  755.   #--------------------------------------------------------------------------
  756.   def cp_gauge_color2
  757.     color = KGC::SkillCPSystem::GAUGE_END_COLOR
  758.     return (color.is_a?(Integer) ? text_color(color) : color)
  759.   end
  760.   #--------------------------------------------------------------------------
  761.   # ○ CP の描画
  762.   #     actor : アクター
  763.   #     x     : 描画先 X 座標
  764.   #     y     : 描画先 Y 座標
  765.   #     width : 幅
  766.   #--------------------------------------------------------------------------
  767.   def draw_actor_cp(actor, x, y, width = 120)
  768.     draw_actor_cp_gauge(actor, x, y, width)
  769.     self.contents.font.color = system_color
  770.     self.contents.draw_text(x, y, 30, WLH, Vocab::cp_a)
  771.     self.contents.font.color = cp_color(actor)
  772.     xr = x + width
  773.     if width < 120
  774.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.cp, 2)
  775.     else
  776.       self.contents.draw_text(xr - 90, y, 40, WLH, actor.cp, 2)
  777.       self.contents.font.color = normal_color
  778.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  779.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxcp, 2)
  780.     end
  781.     self.contents.font.color = normal_color
  782.   end
  783.   #--------------------------------------------------------------------------
  784.   # ○ CP ゲージの描画
  785.   #     actor : アクター
  786.   #     x     : 描画先 X 座標
  787.   #     y     : 描画先 Y 座標
  788.   #     width : 幅
  789.   #--------------------------------------------------------------------------
  790.   def draw_actor_cp_gauge(actor, x, y, width = 120)
  791.     if KGC::SkillCPSystem::ENABLE_GENERIC_GAUGE && $imported["GenericGauge"]
  792.       # 汎用ゲージ
  793.       draw_gauge(KGC::SkillCPSystem::GAUGE_IMAGE,
  794.         x, y, width, actor.cp, [actor.maxcp, 1].max,
  795.         KGC::SkillCPSystem::GAUGE_OFFSET,
  796.         KGC::SkillCPSystem::GAUGE_LENGTH,
  797.         KGC::SkillCPSystem::GAUGE_SLOPE)
  798.     else
  799.       # デフォルトゲージ
  800.       gw = width * actor.cp / [actor.maxcp, 1].max
  801.       gc1 = cp_gauge_color1
  802.       gc2 = cp_gauge_color2
  803.       self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  804.       self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  805.     end
  806.   end
  807. end
  808.  
  809. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  810.  
  811. #==============================================================================
  812. # ■ Window_Command
  813. #==============================================================================
  814.  
  815. class Window_Command < Window_Selectable
  816.   unless method_defined?(:add_command)
  817.   #--------------------------------------------------------------------------
  818.   # ○ コマンドを追加
  819.   #    追加した位置を返す
  820.   #--------------------------------------------------------------------------
  821.   def add_command(command)
  822.     @commands << command
  823.     @item_max = @commands.size
  824.     item_index = @item_max - 1
  825.     refresh_command
  826.     draw_item(item_index)
  827.     return item_index
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ○ コマンドをリフレッシュ
  831.   #--------------------------------------------------------------------------
  832.   def refresh_command
  833.     buf = self.contents.clone
  834.     self.height = [self.height, row_max * WLH + 32].max
  835.     create_contents
  836.     self.contents.blt(0, 0, buf, buf.rect)
  837.     buf.dispose
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ○ コマンドを挿入
  841.   #--------------------------------------------------------------------------
  842.   def insert_command(index, command)
  843.     @commands.insert(index, command)
  844.     @item_max = @commands.size
  845.     refresh_command
  846.     refresh
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ○ コマンドを削除
  850.   #--------------------------------------------------------------------------
  851.   def remove_command(command)
  852.     @commands.delete(command)
  853.     @item_max = @commands.size
  854.     refresh
  855.   end
  856.   end
  857. end
  858.  
  859. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  860.  
  861. #==============================================================================
  862. # ■ Window_Status
  863. #==============================================================================
  864.  
  865. if KGC::SkillCPSystem::SHOW_STATUS_CP
  866. class Window_Status < Window_Base
  867.   #--------------------------------------------------------------------------
  868.   # ● 基本情報の描画
  869.   #     x : 描画先 X 座標
  870.   #     y : 描画先 Y 座標
  871.   #--------------------------------------------------------------------------
  872.   alias draw_basic_info_KGC_SkillCPSystem draw_basic_info
  873.   def draw_basic_info(x, y)
  874.     draw_basic_info_KGC_SkillCPSystem(x, y)
  875.  
  876.     draw_actor_cp(@actor, x, y + WLH * 4)
  877.   end
  878. end
  879. end
  880.  
  881. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  882.  
  883. #==============================================================================
  884. # □ Window_BattleSkillStatus
  885. #------------------------------------------------------------------------------
  886. #   戦闘スキル設定画面で、設定者のステータスを表示するウィンドウです。
  887. #==============================================================================
  888.  
  889. class Window_BattleSkillStatus < Window_Base
  890.   #--------------------------------------------------------------------------
  891.   # ● オブジェクト初期化
  892.   #     x     : ウィンドウの X 座標
  893.   #     y     : ウィンドウの Y 座標
  894.   #     actor : アクター
  895.   #--------------------------------------------------------------------------
  896.   def initialize(x, y, actor)
  897.     super(x, y, Graphics.width, WLH + 32)
  898.     @actor = actor
  899.     refresh
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # ● リフレッシュ
  903.   #--------------------------------------------------------------------------
  904.   def refresh
  905.     self.contents.clear
  906.     draw_actor_name(@actor, 4, 0)
  907.     draw_actor_level(@actor, 140, 0)
  908.     draw_actor_cp(@actor, 240, 0)
  909.   end
  910. end
  911.  
  912. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  913.  
  914. #==============================================================================
  915. # □ Window_BattleSkillSlot
  916. #------------------------------------------------------------------------------
  917. #   戦闘スキル選択画面で、設定したスキルの一覧を表示するウィンドウです。
  918. #==============================================================================
  919.  
  920. class Window_BattleSkillSlot < Window_Selectable
  921.   #--------------------------------------------------------------------------
  922.   # ● オブジェクト初期化
  923.   #     x      : ウィンドウの X 座標
  924.   #     y      : ウィンドウの Y 座標
  925.   #     width  : ウィンドウの幅
  926.   #     height : ウィンドウの高さ
  927.   #     actor  : アクター
  928.   #--------------------------------------------------------------------------
  929.   def initialize(x, y, width, height, actor)
  930.     super(x, y, width, height)
  931.     @actor = actor
  932.     self.index = 0
  933.     self.active = false
  934.     refresh
  935.   end
  936.   #--------------------------------------------------------------------------
  937.   # ○ スキルの取得
  938.   #--------------------------------------------------------------------------
  939.   def skill
  940.     return @data[self.index]
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ● リフレッシュ
  944.   #--------------------------------------------------------------------------
  945.   def refresh
  946.     @data = []
  947.     skill_ids = @actor.battle_skill_ids
  948.     @actor.battle_skill_max.times { |i|
  949.       if skill_ids[i] != nil
  950.         @data << $data_skills[skill_ids[i]]
  951.       else
  952.         @data << nil
  953.       end
  954.     }
  955.     @item_max = @data.size
  956.     create_contents
  957.     @item_max.times { |i| draw_item(i) }
  958.   end
  959.   #--------------------------------------------------------------------------
  960.   # ○ 消費 CP 描画判定
  961.   #--------------------------------------------------------------------------
  962.   def cp_cost_show?(skill)
  963.     return true if KGC::SkillCPSystem::SHOW_ZERO_COST
  964.  
  965.     return (skill.cp_cost > 0)
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # ○ 項目の描画
  969.   #     index : 項目番号
  970.   #--------------------------------------------------------------------------
  971.   def draw_item(index)
  972.     rect = item_rect(index)
  973.     self.contents.clear_rect(rect)
  974.     skill = @data[index]
  975.     if skill != nil
  976.       rect.width -= 4
  977.       draw_item_name(skill, rect.x, rect.y)
  978.       self.contents.draw_text(rect, skill.cp_cost, 2) if cp_cost_show?(skill)
  979.     else
  980.       self.contents.draw_text(rect, KGC::SkillCPSystem::BLANK_TEXT, 1)
  981.     end
  982.   end
  983.   #--------------------------------------------------------------------------
  984.   # ● カーソルを 1 ページ後ろに移動
  985.   #--------------------------------------------------------------------------
  986.   def cursor_pagedown
  987.     return if Input.repeat?(Input::R)
  988.     super
  989.   end
  990.   #--------------------------------------------------------------------------
  991.   # ● カーソルを 1 ページ前に移動
  992.   #--------------------------------------------------------------------------
  993.   def cursor_pageup
  994.     return if Input.repeat?(Input::L)
  995.     super
  996.   end
  997.   #--------------------------------------------------------------------------
  998.   # ● フレーム更新
  999.   #--------------------------------------------------------------------------
  1000.   def update
  1001.     super
  1002.     return unless self.active
  1003.  
  1004.     if Input.repeat?(Input::RIGHT)
  1005.       Sound.play_cursor
  1006.       cursor_pagedown
  1007.     elsif Input.repeat?(Input::LEFT)
  1008.       Sound.play_cursor
  1009.       cursor_pageup
  1010.     end
  1011.   end
  1012.   #--------------------------------------------------------------------------
  1013.   # ● ヘルプテキスト更新
  1014.   #--------------------------------------------------------------------------
  1015.   def update_help
  1016.     @help_window.set_text(skill == nil ? "" : skill.description)
  1017.   end
  1018. end
  1019.  
  1020. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1021.  
  1022. #==============================================================================
  1023. # □ Window_BattleSkillList
  1024. #------------------------------------------------------------------------------
  1025. #   戦闘スキル選択画面で、設定できるスキルの一覧を表示するウィンドウです。
  1026. #==============================================================================
  1027.  
  1028. class Window_BattleSkillList < Window_Selectable
  1029.   #--------------------------------------------------------------------------
  1030.   # ● 公開インスタンス変数
  1031.   #--------------------------------------------------------------------------
  1032.   attr_accessor :slot_index               # スロット番号
  1033.   #--------------------------------------------------------------------------
  1034.   # ● オブジェクト初期化
  1035.   #     x      : ウィンドウの X 座標
  1036.   #     y      : ウィンドウの Y 座標
  1037.   #     width  : ウィンドウの幅
  1038.   #     height : ウィンドウの高さ
  1039.   #     actor  : アクター
  1040.   #--------------------------------------------------------------------------
  1041.   def initialize(x, y, width, height, actor)
  1042.     super(x, y, width, height)
  1043.     @actor = actor
  1044.     @slot_index = 0
  1045.     self.index = 0
  1046.     self.active = false
  1047.     refresh
  1048.   end
  1049.   #--------------------------------------------------------------------------
  1050.   # ○ スキルの取得
  1051.   #--------------------------------------------------------------------------
  1052.   def skill
  1053.     return @data[self.index]
  1054.   end
  1055.   #--------------------------------------------------------------------------
  1056.   # ● リフレッシュ
  1057.   #--------------------------------------------------------------------------
  1058.   def refresh
  1059.     @data = [nil]
  1060.     # 選択可能なスキルのみを取得
  1061.     @actor.all_skills.each { |skill|
  1062.       @data.push(skill) if selectable?(skill)
  1063.     }
  1064.  
  1065.     @item_max = @data.size
  1066.     create_contents
  1067.     @item_max.times { |i| draw_item(i) }
  1068.   end
  1069.   #--------------------------------------------------------------------------
  1070.   # ○ スキル選択可否判定
  1071.   #     skill : スキル
  1072.   #--------------------------------------------------------------------------
  1073.   def selectable?(skill)
  1074.     return false if skill == nil
  1075.  
  1076.     # 消費 CP 0 なら常に使用可能な場合
  1077.     if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  1078.       return false
  1079.     end
  1080.     # 戦闘時に使用可能ならOK
  1081.     return true if skill.battle_ok?
  1082.     # 使用不可でもセット可能な場合
  1083.     if KGC::SkillCPSystem::SHOW_UNUSABLE_SKILL && skill.occasion == 3
  1084.       return true
  1085.     end
  1086.  
  1087.     return false
  1088.   end
  1089.   #--------------------------------------------------------------------------
  1090.   # ○ 消費 CP 描画判定
  1091.   #--------------------------------------------------------------------------
  1092.   def cp_cost_show?(skill)
  1093.     return true if KGC::SkillCPSystem::SHOW_ZERO_COST
  1094.  
  1095.     return (skill.cp_cost > 0)
  1096.   end
  1097.   #--------------------------------------------------------------------------
  1098.   # ○ 項目の描画
  1099.   #     index : 項目番号
  1100.   #--------------------------------------------------------------------------
  1101.   def draw_item(index)
  1102.     rect = item_rect(index)
  1103.     self.contents.clear_rect(rect)
  1104.     skill = @data[index]
  1105.     if skill != nil
  1106.       rect.width -= 4
  1107.       enabled = @actor.battle_skill_settable?(@slot_index, skill)
  1108.       draw_item_name(skill, rect.x, rect.y, enabled)
  1109.       self.contents.draw_text(rect, skill.cp_cost, 2) if cp_cost_show?(skill)
  1110.     else
  1111.       self.contents.draw_text(rect, KGC::SkillCPSystem::RELEASE_TEXT, 1)
  1112.     end
  1113.   end
  1114.   #--------------------------------------------------------------------------
  1115.   # ● フレーム更新
  1116.   #--------------------------------------------------------------------------
  1117.   def update
  1118.     super
  1119.     return unless self.active
  1120.  
  1121.     if Input.repeat?(Input::RIGHT)
  1122.       cursor_pagedown
  1123.     elsif Input.repeat?(Input::LEFT)
  1124.       cursor_pageup
  1125.     end
  1126.   end
  1127.   #--------------------------------------------------------------------------
  1128.   # ● ヘルプテキスト更新
  1129.   #--------------------------------------------------------------------------
  1130.   def update_help
  1131.     @help_window.set_text(skill == nil ? "" : skill.description)
  1132.   end
  1133. end
  1134.  
  1135. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1136.  
  1137. #==============================================================================
  1138. # ■ Scene_Map
  1139. #==============================================================================
  1140.  
  1141. class Scene_Map < Scene_Base
  1142.   #--------------------------------------------------------------------------
  1143.   # ● 画面切り替えの実行
  1144.   #--------------------------------------------------------------------------
  1145.   alias update_scene_change_KGC_SkillCPSystem update_scene_change
  1146.   def update_scene_change
  1147.     return if $game_player.moving?    # プレイヤーの移動中?
  1148.  
  1149.     if $game_temp.next_scene == :set_battle_skill
  1150.       call_set_battle_skill
  1151.       return
  1152.     end
  1153.  
  1154.     update_scene_change_KGC_SkillCPSystem
  1155.   end
  1156.   #--------------------------------------------------------------------------
  1157.   # ○ スキル設定画面への切り替え
  1158.   #--------------------------------------------------------------------------
  1159.   def call_set_battle_skill
  1160.     $game_temp.next_scene = nil
  1161.     $scene = Scene_SetBattleSkill.new(
  1162.       $game_temp.next_scene_actor_index,
  1163.       0,
  1164.       Scene_SetBattleSkill::HOST_MAP)
  1165.   end
  1166. end
  1167.  
  1168. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1169.  
  1170. #==============================================================================
  1171. # ■ Scene_Menu
  1172. #==============================================================================
  1173.  
  1174. class Scene_Menu < Scene_Base
  1175.   if KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND
  1176.   #--------------------------------------------------------------------------
  1177.   # ● コマンドウィンドウの作成
  1178.   #--------------------------------------------------------------------------
  1179.   alias create_command_window_KGC_SkillCPSystem create_command_window
  1180.   def create_command_window
  1181.     create_command_window_KGC_SkillCPSystem
  1182.  
  1183.     return if $imported["CustomMenuCommand"]
  1184.  
  1185.     @__command_set_battle_skill_index =
  1186.       @command_window.add_command(Vocab.set_battle_skill)
  1187.     if @command_window.oy > 0
  1188.       @command_window.oy -= Window_Base::WLH
  1189.     end
  1190.     @command_window.index = @menu_index
  1191.   end
  1192.   end
  1193.   #--------------------------------------------------------------------------
  1194.   # ● コマンド選択の更新
  1195.   #--------------------------------------------------------------------------
  1196.   alias update_command_selection_KGC_SkillCPSystem update_command_selection
  1197.   def update_command_selection
  1198.     call_set_battle_skill_flag = false
  1199.     if Input.trigger?(Input::C)
  1200.       case @command_window.index
  1201.       when @__command_set_battle_skill_index  # スキル設定
  1202.         call_set_battle_skill_flag = true
  1203.       end
  1204.     end
  1205.  
  1206.     # スキル設定画面に移行
  1207.     if call_set_battle_skill_flag
  1208.       if $game_party.members.size == 0
  1209.         Sound.play_buzzer
  1210.         return
  1211.       end
  1212.       Sound.play_decision
  1213.       start_actor_selection
  1214.       return
  1215.     end
  1216.  
  1217.     update_command_selection_KGC_SkillCPSystem
  1218.   end
  1219.   #--------------------------------------------------------------------------
  1220.   # ● アクター選択の更新
  1221.   #--------------------------------------------------------------------------
  1222.   alias update_actor_selection_KGC_SkillCPSystem update_actor_selection
  1223.   def update_actor_selection
  1224.     if Input.trigger?(Input::C)
  1225.       $game_party.last_actor_index = @status_window.index
  1226.       Sound.play_decision
  1227.       case @command_window.index
  1228.       when @__command_set_battle_skill_index  # スキル設定
  1229.         $scene = Scene_SetBattleSkill.new(
  1230.           @status_window.index,
  1231.           @__command_set_battle_skill_index,
  1232.           Scene_SetBattleSkill::HOST_MENU)
  1233.         return
  1234.       end
  1235.     end
  1236.  
  1237.     update_actor_selection_KGC_SkillCPSystem
  1238.   end
  1239. end
  1240.  
  1241. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  1242.  
  1243. #==============================================================================
  1244. # □ Scene_SetBattleSkill
  1245. #------------------------------------------------------------------------------
  1246. #   戦闘スキル設定画面の処理を行うクラスです。
  1247. #==============================================================================
  1248.  
  1249. class Scene_SetBattleSkill < Scene_Base
  1250.   #--------------------------------------------------------------------------
  1251.   # ○ 定数
  1252.   #--------------------------------------------------------------------------
  1253.   HOST_MENU   = 0  # 呼び出し元 : メニュー
  1254.   HOST_MAP    = 1  # 呼び出し元 : マップ
  1255.   #--------------------------------------------------------------------------
  1256.   # ● オブジェクト初期化
  1257.   #     actor_index : アクターインデックス
  1258.   #     menu_index  : コマンドのカーソル初期位置
  1259.   #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  1260.   #--------------------------------------------------------------------------
  1261.   def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
  1262.     @actor_index = actor_index
  1263.     @menu_index = menu_index
  1264.     @host_scene = host_scene
  1265.   end
  1266.   #--------------------------------------------------------------------------
  1267.   # ● 開始処理
  1268.   #--------------------------------------------------------------------------
  1269.   def start
  1270.     super
  1271.     create_menu_background
  1272.  
  1273.     @actor = $game_party.members[@actor_index]
  1274.     create_windows
  1275.   end
  1276.   #--------------------------------------------------------------------------
  1277.   # ○ ウィンドウ作成
  1278.   #--------------------------------------------------------------------------
  1279.   def create_windows
  1280.     @help_window = Window_Help.new
  1281.     if $imported["HelpExtension"]
  1282.       @help_window.row_max = KGC::HelpExtension::ROW_MAX
  1283.     end
  1284.  
  1285.     dy = @help_window.height
  1286.     @status_window = Window_BattleSkillStatus.new(0, dy, @actor)
  1287.  
  1288.     dy += @status_window.height
  1289.     @slot_window = Window_BattleSkillSlot.new(
  1290.       0,
  1291.       dy,
  1292.       Graphics.width / 2,
  1293.       Graphics.height - dy,
  1294.       @actor)
  1295.     @slot_window.active = true
  1296.     @slot_window.help_window = @help_window
  1297.  
  1298.     @list_window = Window_BattleSkillList.new(
  1299.       Graphics.width - @slot_window.width,
  1300.       dy,
  1301.       Graphics.width - @slot_window.width,
  1302.       Graphics.height - dy,
  1303.       @actor)
  1304.     @list_window.help_window = @help_window
  1305.   end
  1306.   #--------------------------------------------------------------------------
  1307.   # ● 終了処理
  1308.   #--------------------------------------------------------------------------
  1309.   def terminate
  1310.     super
  1311.     dispose_menu_background
  1312.     @help_window.dispose
  1313.     @status_window.dispose
  1314.     @slot_window.dispose
  1315.     @list_window.dispose
  1316.   end
  1317.   #--------------------------------------------------------------------------
  1318.   # ○ 元の画面へ戻る
  1319.   #--------------------------------------------------------------------------
  1320.   def return_scene
  1321.     case @host_scene
  1322.     when HOST_MENU
  1323.       $scene = Scene_Menu.new(@menu_index)
  1324.     when HOST_MAP
  1325.       $scene = Scene_Map.new
  1326.     end
  1327.   end
  1328.   #--------------------------------------------------------------------------
  1329.   # ● フレーム更新
  1330.   #--------------------------------------------------------------------------
  1331.   def update
  1332.     super
  1333.     update_menu_background
  1334.     update_window
  1335.     if @slot_window.active
  1336.       update_slot
  1337.     elsif @list_window.active
  1338.       update_list
  1339.     end
  1340.   end
  1341.   #--------------------------------------------------------------------------
  1342.   # ○ ウィンドウ更新
  1343.   #--------------------------------------------------------------------------
  1344.   def update_window
  1345.     @help_window.update
  1346.     @status_window.update
  1347.     @slot_window.update
  1348.     @list_window.update
  1349.   end
  1350.   #--------------------------------------------------------------------------
  1351.   # ○ ウィンドウ再描画
  1352.   #--------------------------------------------------------------------------
  1353.   def refresh_window
  1354.     @status_window.refresh
  1355.     @slot_window.refresh
  1356.     @list_window.refresh
  1357.   end
  1358.   #--------------------------------------------------------------------------
  1359.   # ○ 次のアクターの画面に切り替え
  1360.   #--------------------------------------------------------------------------
  1361.   def next_actor
  1362.     @actor_index += 1
  1363.     @actor_index %= $game_party.members.size
  1364.     $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  1365.   end
  1366.   #--------------------------------------------------------------------------
  1367.   # ○ 前のアクターの画面に切り替え
  1368.   #--------------------------------------------------------------------------
  1369.   def prev_actor
  1370.     @actor_index += $game_party.members.size - 1
  1371.     @actor_index %= $game_party.members.size
  1372.     $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  1373.   end
  1374.   #--------------------------------------------------------------------------
  1375.   # ○ フレーム更新 (スロットウィンドウがアクティブの場合)
  1376.   #--------------------------------------------------------------------------
  1377.   def update_slot
  1378.     # 選択項目が変化した場合
  1379.     if @last_slot_index != @slot_window.index
  1380.       @list_window.slot_index = @slot_window.index
  1381.       @list_window.refresh
  1382.       @last_slot_index = @slot_window.index
  1383.     end
  1384.  
  1385.     if Input.trigger?(Input::A)
  1386.       Sound.play_decision
  1387.       # 選択しているスキルを外す
  1388.       @actor.remove_battle_skill(@slot_window.index)
  1389.       refresh_window
  1390.     elsif Input.trigger?(Input::B)
  1391.       Sound.play_cancel
  1392.       return_scene
  1393.     elsif Input.trigger?(Input::C)
  1394.       Sound.play_decision
  1395.       # リストウィンドウに切り替え
  1396.       @slot_window.active = false
  1397.       @list_window.active = true
  1398.     elsif Input.trigger?(Input::R)
  1399.       Sound.play_cursor
  1400.       next_actor
  1401.     elsif Input.trigger?(Input::L)
  1402.       Sound.play_cursor
  1403.       prev_actor
  1404.     end
  1405.   end
  1406.   #--------------------------------------------------------------------------
  1407.   # ○ フレーム更新 (リストウィンドウがアクティブの場合)
  1408.   #--------------------------------------------------------------------------
  1409.   def update_list
  1410.     if Input.trigger?(Input::B)
  1411.       Sound.play_cancel
  1412.       # スロットウィンドウに切り替え
  1413.       @slot_window.active = true
  1414.       @list_window.active = false
  1415.     elsif Input.trigger?(Input::C)
  1416.       skill = @list_window.skill
  1417.       # セットできない場合
  1418.       unless @actor.battle_skill_settable?(@slot_window.index, skill)
  1419.         Sound.play_buzzer
  1420.         return
  1421.       end
  1422.       Sound.play_decision
  1423.       set_skill(@slot_window.index, skill)
  1424.       # スロットウィンドウに切り替え
  1425.       @slot_window.active = true
  1426.       @list_window.active = false
  1427.     end
  1428.   end
  1429.   #--------------------------------------------------------------------------
  1430.   # ○ スキル設定
  1431.   #     index : 設定する場所
  1432.   #     skill : 設定するスキル
  1433.   #--------------------------------------------------------------------------
  1434.   def set_skill(index, skill)
  1435.     @actor.remove_battle_skill(index)
  1436.     if skill != nil
  1437.       @actor.set_battle_skill(index, skill)
  1438.     end
  1439.     refresh_window
  1440.   end
  1441. end



Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
20
 楼主| 发表于 2014-8-18 09:11:20 | 只看该作者
tseyik 发表于 2014-8-18 08:48
你可試試改這個(我没用過)
ステート・強化・弱体付与/解除時 HP・MP回復特徴&パッシブスキル
http://artif ...

这个……不好意思,效果还是不一样
您发过来的那个技能CP制不知道您用过没有,我希望是用那个脚本,装备上的被动技能增加属性生效,未装备的无效,就这样的效果

……不过这个我收下了,可以用来做延迟伤害和延迟回复的技能
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22973
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
19
发表于 2014-8-18 08:48:31 | 只看该作者
本帖最后由 tseyik 于 2014-8-18 08:52 编辑

你可試試改這個(我没用過)
ステート・強化・弱体付与/解除時 HP・MP回復特徴&パッシブスキル
http://artificialprovidence.web. ... ADDREM_RECOVERY.txt

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
18
 楼主| 发表于 2014-8-18 01:28:25 | 只看该作者
tseyik 发表于 2014-8-14 17:30
Ace改版
http://mitsu-evo.6.ql.bz/RGSS3_16.html

        我干脆悬赏找人移植下吧……移植パッシブスキル就够了
但是充值的时候显示
[88222001]Subject长度不能大于32![20140818012725-183]


有没有淘宝网店啊

点评

直接悬赏RMB不就好了  发表于 2014-8-18 07:14
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22973
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
17
发表于 2014-8-17 13:48:11 | 只看该作者
本帖最后由 tseyik 于 2014-8-18 08:44 编辑

你試試向RGSS2的原作者反映巴,他也有寫rgss3的脚本,不過今年年初(1月)以後就没更新了
http://ytomy.sakura.ne.jp/tkool/ ... ap&tech=minimap
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
16
 楼主| 发表于 2014-8-16 23:02:12 | 只看该作者
白玉楼的台阶 发表于 2014-8-16 22:44
试用了一下,确实可以生效,和说明一样,不装备也有效……
就没有办法做到,装备上的被动技能有效,不装 ...

事实上VX的时候能做到的,就是因为能做到我才纠结……是我以前汉化的叫サキクエ的游戏,里面满足一定条件会获得称号(数据库内为技能),装备的称号要占用CP,最大三个
然后呢,最重要的部分是:只有装备上的称号,增加属性的效果才有效,没装备的不会生效
我觉得直接把游戏给你看一下比较好,但那个是糟糕向的……我不太熟悉66的细则,要不然私信给你?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
15
 楼主| 发表于 2014-8-16 22:56:11 | 只看该作者
tseyik 发表于 2014-8-16 22:12
RGG3被動技能
以下是HP+50%
設定方法

不是看见看不见的问题啦……说起来我也意识到自己的表达方式太繁琐
这个CP装备技能就是我想要的形式,但是我希望角色可以学习多个被动技能,然后只有用CP装备上的被动技能才生效,没装备的被动技能不生效,
而这个脚本也是习得技能就常驻效果,这样的话CP选单就是摆设了——装备不装备属性都不会变
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
14
 楼主| 发表于 2014-8-16 22:44:58 | 只看该作者
tseyik 发表于 2014-8-16 22:12
RGG3被動技能
以下是HP+50%
設定方法

试用了一下,确实可以生效,和说明一样,不装备也有效……
就没有办法做到,装备上的被动技能有效,不装备的无效么……

点评

你作成到普通技能不就行了麼(不設定成ID16)  发表于 2014-8-16 22:53
在CPスキル的72改成SHOW_UNUSABLE_SKILL = false則在スキル裝備中也看不到使用不可的スキル(即看到HP+50%)  发表于 2014-8-16 22:51
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22973
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
13
发表于 2014-8-16 22:12:52 | 只看该作者
本帖最后由 tseyik 于 2014-8-16 22:23 编辑
白玉楼的台阶 发表于 2014-8-16 21:07
@tseyik
基本上解决了,细节部分可以用事件补足
不过这个脚本好像是


RGG3被動技能
以下是HP+50%
設定方法
1.導入劇本
2.設定技能(スキル)

3:設定新特性(パッシブ)預設ID16,可脚本中指定

4.設定技能

不用裝備也有効果

RUBY 代码复制
  1. #------------------------------------------------------------------------------
  2. #  常に効果が発動するスキル
  3. #==============================================================================
  4. #
  5. #     ■パッシブスキル Ver 1.01    2013/2/18
  6. #
  7. #  使い方:( ここに追加 )以下、main以上のところにコピーする。
  8. #
  9. #    1.適当なクラスの特徴リストにスキルの発動効果を設定する。(例:最大HP*150%)
  10. #    2.パッシブスキルとなるスキルの属性を設定する。(初期は16番目。変更可)
  11. #    3.そのスキルの速度の数値を先ほどのクラスのIDに設定する。
  12. #     
  13. #        これで所持しているだけで効果が発動するパッシブスキルが作れます。
  14. #        詳しい解説はブログに掲載しています。
  15. #
  16. #・バグの報告や質問、要望がありましたらこちらへお願いします。
  17. #
  18. #    Gossum magazine     [url]http://gossum.blog.fc2.com/[/url]
  19. #
  20. #==============================================================================
  21.  
  22.   # この数値の属性IDがパッシブスキルとなります。
  23.   GOSS_PASSIVE_ID = 16
  24.  
  25.   # 戦闘中のウィンドウでもパッシブスキルを表示するならtrue
  26.   GOSS_PASSIVE_FLAG = false
  27.  
  28.   class Game_Actor < Game_Battler
  29.   #--------------------------------------------------------------------------
  30.   # ● 全ての特徴オブジェクトの配列取得
  31.   #--------------------------------------------------------------------------
  32.   alias goss_feature_objects feature_objects
  33.   def feature_objects
  34.     all = goss_feature_objects
  35.     return all if @avoid_nest == true
  36.     @avoid_nest = true
  37.     for skill in skills
  38.       if skill.damage.element_id == GOSS_PASSIVE_ID
  39.         all += [$data_classes[skill.speed]]
  40.       end
  41.     end
  42.     @avoid_nest = false
  43.     return all
  44.   end
  45. end
  46. #==============================================================================
  47. # ■ Window_BattleSkill
  48. #------------------------------------------------------------------------------
  49. #  バトル画面で、使用するスキルを選択するウィンドウです。
  50. #==============================================================================
  51.  
  52. class Window_BattleSkill < Window_SkillList
  53.   #--------------------------------------------------------------------------
  54.   # ● スキルをリストに含めるかどうか
  55.   #--------------------------------------------------------------------------
  56.   def include?(item)
  57.     if item.damage.element_id == GOSS_PASSIVE_ID
  58.       GOSS_PASSIVE_FLAG
  59.     else
  60.       super(item)
  61.     end
  62.   end
  63. end
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
12
 楼主| 发表于 2014-8-16 21:07:44 | 只看该作者
@tseyik
基本上解决了,细节部分可以用事件补足
不过这个脚本好像是
≪スキル習得装備≫
「スキルCP制」
≪パッシブスキル≫
三个一套,≪スキル習得装備≫还好,≪パッシブスキル≫没有的话也不能用论坛里的被动技能代替,能不能麻烦看一看有没有呢?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
836
在线时间
159 小时
注册时间
2012-6-3
帖子
124
11
 楼主| 发表于 2014-8-14 20:42:45 | 只看该作者
本帖最后由 白玉楼的台阶 于 2014-8-14 23:09 编辑
千夙 发表于 2014-8-14 17:33
这个可以设置两种技能类型貌似可以做到
你考虑过称号脚本吗?或者你说搞定了的那个脚本就是称号脚本。。

那个称号脚本,麻烦发个链接我看看……
我的表达能力可能有些差啊,我希望实现的是个什么效果呢……
比方说,现在主角有【治疗】【二连击】【火球】这三个普通的技能,它们正常的在菜单中显示,正常的使用,不用管
还有
【坚毅】(防御力+15 cost 2)
【新兵】(血量+20 cost 1)
【心眼】(命中率+15% 会心率+15% cost 3)
而主角的总cost是3
所以呢,他就要选择,装备【坚毅】和【新兵】,或者是只装备【心眼】
如果加入cost计算很困难,至少希望能够实现
有两个栏位,从【坚毅】【新兵】【心眼】三个技能中选两个装备
【坚毅】【新兵】【心眼】……这些东西在工程里面可以是技能,也可以是武器、防具,总之要装备上能影响能力值就行了(因为我之前要过一个习得某个技能相当于装备上某个武器的脚本)

点评

特技設定解除手制A鍵  发表于 2014-8-14 21:02
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-30 04:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表