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

Project1

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

[已经解决] 有没技能装备的脚本?

[复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
26 小时
注册时间
2011-1-27
帖子
11
跳转到指定楼层
1
发表于 2011-2-18 18:19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
50
在线时间
136 小时
注册时间
2010-7-29
帖子
137
2
发表于 2011-2-18 18:48:02 | 只看该作者
论坛搜索“CP”我记得有个不是CP,是把你学的技能装4个装到身上。
LZ你好像就是要这个吧。。。地址等我找到后编辑下。。。。。。

\\\液///
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
336 小时
注册时间
2010-8-26
帖子
428
3
发表于 2011-2-18 20:08:41 | 只看该作者
本帖最后由 巧克力猫咪 于 2011-2-18 20:13 编辑

是KGC的技能CP制脚本有些地方我改过了,按需要自己改回来
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 技能CP制 - KGC_SkillCPSystem ◆ VX ◆
  3. #_/    ◇ 更新日期 : 2010/10/30 ◇
  4. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  5. #==============================================================================
  6. # ★ 设定项目 - Customize ★
  7. #==============================================================================

  8. module KGC
  9. module SkillCPSystem
  10.   # ◆ 可登陆最大技能数
  11.   MAX_SKILLS = 5
  12.   # ◆ CP 的名字
  13.   VOCAB_CP   = "CP"
  14.   # ◆ CP 的名字 (简称)
  15.   VOCAB_CP_A = "C"
  16.   # ◆ CP 数值是否在角色状态中显示
  17.   SHOW_STATUS_CP = false

  18.   # ◆ 消费 CP 的设定
  19.   #  消费的 CP (未指定消费CP时所消费的CP值)
  20.   DEFAULT_CP_COST = 1
  21.   # ◆ CP 的上限(不包括装备提供的 CP )
  22.   CP_MAX = 10
  23.   # ◆ CP 的下限
  24.   CP_MIN = 10
  25.   # ◆ 补正后的 CP 上限
  26.   #  本来的 CP 加上装备提供的 CP 上限
  27.   REVISED_CP_MAX = 20
  28.   # ◆ 补正后的 CP 下限
  29.   REVISED_CP_MIN = 0
  30.   # ◆ CP 最大值的计算公式
  31.   #   level代表角色当前等级
  32.   #   结果会自动取整数
  33.   CP_CALC_EXP = "level * 0 + 0"
  34.   # ◆ 每个角色最大 CP 计算公式
  35.   PERSONAL_CP_CALC_EXP = []
  36.   #   PERSONAL_CP_CALC_EXP[角色 ID] = "公式"
  37.   #   公式格式和最大值计算公式一样
  38.   #   <举例>
  39.   # PERSONAL_CP_CALC_EXP[1] = "level * 0.8 + 2.0"

  40.   DISABLE_IN_BATTLETEST  = true
  41.   # ◆ 使不可以使用的技能也可以装备
  42.   SHOW_UNUSABLE_SKILL    = true
  43.   # ◆ 消费 CP 为0 的技能不需要设置就可以使用
  44.   USABLE_COST_ZERO_SKILL = true
  45.   # ◆ パッシブスキル没效果,不设置(这个我不知道是什么..不用管它就好)
  46.   #  ≪パッシブスキル≫ 导入时才有效
  47.   PASSIVE_NEED_TO_SET    = true
  48.   # ◆ 新学习到的技能自动装备
  49.   AUTO_SET_NEW_SKILL     = false

  50.   # ◆ CP 最小值时的颜色
  51.   #  数值和  : \C[n] 设置的颜色相同
  52.   GAUGE_START_COLOR = 13
  53.   # ◆ CP 最大值时的颜色
  54.   GAUGE_END_COLOR   = 5

  55.   # ◆ 在菜单中添加技能设定的选项
  56.   #  默认添加在菜单栏最下面
  57.   USE_MENU_SET_SKILL_COMMAND = true
  58.   # ◆ 菜单中'技能设定'的名称
  59.   VOCAB_MENU_SET_SKILL       = "技能设定"

  60.   # ◆ 未设定技能时显示的名称
  61.   BLANK_TEXT   = "-  EMPTY  -"
  62.   # ◆ 技能解除时候显示的名称
  63.   RELEASE_TEXT = "( 设定解除 )"
  64. end
  65. end

  66. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  67. $imported = {} if $imported == nil
  68. $imported["SkillCPSystem"] = true

  69. module KGC::SkillCPSystem
  70.   module Regexp
  71.     module BaseItem
  72.       # 最大 CP
  73.       MAXCP_PLUS = /<(?:MAX|最大)CP\s*([\-\+]?\d+)>/
  74.       # 登陆技能数量
  75.       BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|登録スキル数)\s*([\-\+]?\d+)>/i
  76.     end

  77.     module Skill
  78.       # 消費 CP
  79.       CP_COST = /<CP\s*(\d+)>/i
  80.     end
  81.   end
  82. end

  83. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  84. #==============================================================================
  85. # □ KGC::Commands
  86. #==============================================================================

  87. module KGC
  88. module Commands
  89.   module_function
  90.   #--------------------------------------------------------------------------
  91.   # ○ MaxCP 補正値の取得
  92.   #     actor_id    : アクター ID
  93.   #     variable_id : 取得した値を代入する変数の ID
  94.   #--------------------------------------------------------------------------
  95.   def get_actor_own_cp(actor_id, variable_id = 0)
  96.     value = $game_actors[actor_id].maxcp_plus
  97.     $game_variables[variable_id] = value if variable_id > 0
  98.     return value
  99.   end
  100.   alias get_own_cp get_actor_own_cp
  101.   #--------------------------------------------------------------------------
  102.   # ○ MaxCP 補正値の変更
  103.   #     actor_id : アクター ID
  104.   #     value    : MaxCP 補正値
  105.   #--------------------------------------------------------------------------
  106.   def set_actor_own_cp(actor_id, value)
  107.     $game_actors[actor_id].maxcp_plus = value
  108.   end
  109.   alias set_own_cp set_actor_own_cp
  110.   #--------------------------------------------------------------------------
  111.   # ○ アクターの MaxCP 補正値の増加
  112.   #     actor_id : アクター ID
  113.   #     value    : 増加量
  114.   #--------------------------------------------------------------------------
  115.   def gain_actor_cp(actor_id, value)
  116.     $game_actors[actor_id].maxcp_plus += value
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ○ 登録スキル最大数の取得
  120.   #     actor_id : アクター ID
  121.   #     variable_id : 取得した値を代入する変数の ID
  122.   #--------------------------------------------------------------------------
  123.   def get_battle_skill_max(actor_id, variable_id = 0)
  124.     value = $game_actors[actor_id].battle_skill_max
  125.     $game_variables[variable_id] = value if variable_id > 0
  126.     return value
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ○ 登録スキル最大数の変更
  130.   #     actor_id : アクター ID
  131.   #     value    : 登録可能数
  132.   #--------------------------------------------------------------------------
  133.   def set_battle_skill_max(actor_id, value = -1)
  134.     $game_actors[actor_id].battle_skill_max = value
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ○ スキルが登録されているか
  138.   #     actor_id : アクター ID
  139.   #     skill_id : 確認するスキル ID
  140.   #--------------------------------------------------------------------------
  141.   def battle_skill_set?(actor_id, skill_id)
  142.     return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ○ スキルの登録
  146.   #     actor_id : アクター ID
  147.   #     index    : 登録箇所
  148.   #     skill_id : 登録するスキル ID (nil で解除)
  149.   #--------------------------------------------------------------------------
  150.   def set_battle_skill(actor_id, index, skill_id = nil)
  151.     actor = $game_actors[actor_id]
  152.     if skill_id.is_a?(Integer)
  153.       # 登録
  154.       skill = $data_skills[skill_id]
  155.       return unless actor.battle_skill_settable?(index, skill)  # セット不可

  156.       actor.set_battle_skill(index, skill)
  157.       actor.restore_battle_skill
  158.     else
  159.       # 解除
  160.       actor.remove_battle_skill(index)
  161.     end
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ○ スキルの追加登録
  165.   #     actor_id : アクター ID
  166.   #     skill_id : 登録するスキル ID
  167.   #--------------------------------------------------------------------------
  168.   def add_battle_skill(actor_id, skill_id)
  169.     actor = $game_actors[actor_id]
  170.     skill = $data_skills[skill_id]
  171.     return if actor == nil || skill == nil

  172.     actor.add_battle_skill(skill)
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ○ スキルの全解除
  176.   #     actor_id : アクター ID
  177.   #--------------------------------------------------------------------------
  178.   def clear_battle_skill(actor_id)
  179.     $game_actors[actor_id].clear_battle_skill
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ○ スキル設定画面の呼び出し
  183.   #     actor_index : アクターインデックス
  184.   #--------------------------------------------------------------------------
  185.   def call_set_battle_skill(actor_index = 0)
  186.     return if $game_temp.in_battle
  187.     $game_temp.next_scene = :set_battle_skill
  188.     $game_temp.next_scene_actor_index = actor_index
  189.   end
  190. end
  191. end

  192. class Game_Interpreter
  193.   include KGC::Commands
  194. end

  195. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  196. #==============================================================================
  197. # ■ Vocab
  198. #==============================================================================

  199. module Vocab
  200.   # CP
  201.   def self.cp
  202.     return KGC::SkillCPSystem::VOCAB_CP
  203.   end

  204.   # CP (略)
  205.   def self.cp_a
  206.     return KGC::SkillCPSystem::VOCAB_CP_A
  207.   end

  208.   # スキル設定
  209.   def self.set_battle_skill
  210.     return KGC::SkillCPSystem::VOCAB_MENU_SET_SKILL
  211.   end
  212. end

  213. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  214. #==============================================================================
  215. # ■ RPG::BaseItem
  216. #==============================================================================

  217. class RPG::BaseItem
  218.   #--------------------------------------------------------------------------
  219.   # ○ スキルCP制のキャッシュを生成
  220.   #--------------------------------------------------------------------------
  221.   def create_skill_cp_system_cache
  222.     @__maxcp_plus = 0
  223.     @__battle_skill_max_plus = 0

  224.     self.note.each_line { |line|
  225.       case line
  226.       when KGC::SkillCPSystem::Regexp::BaseItem::MAXCP_PLUS
  227.         # 最大 CP
  228.         @__maxcp_plus += $1.to_i
  229.       when KGC::SkillCPSystem::Regexp::BaseItem::BATTLE_SKILL_MAX
  230.         # 登録スキル数
  231.         @__battle_skill_max_plus += $1.to_i
  232.       end
  233.     }
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ○ 最大 CP 補正
  237.   #--------------------------------------------------------------------------
  238.   def maxcp_plus
  239.     create_skill_cp_system_cache if @__maxcp_plus == nil
  240.     return @__maxcp_plus
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ○ 登録スキル数補正
  244.   #--------------------------------------------------------------------------
  245.   def battle_skill_max_plus
  246.     create_skill_cp_system_cache if @__battle_skill_max_plus == nil
  247.     return @__battle_skill_max_plus
  248.   end
  249. end

  250. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  251. #==============================================================================
  252. # ■ RPG::Skill
  253. #==============================================================================

  254. class RPG::Skill < RPG::UsableItem
  255.   #--------------------------------------------------------------------------
  256.   # ○ スキルCP制のキャッシュを生成
  257.   #--------------------------------------------------------------------------
  258.   def create_skill_cp_system_cache
  259.     @__cp_cost = KGC::SkillCPSystem::DEFAULT_CP_COST

  260.     self.note.each_line { |line|
  261.       case line
  262.       when KGC::SkillCPSystem::Regexp::Skill::CP_COST
  263.         # 消費 CP
  264.         @__cp_cost = $1.to_i
  265.       end
  266.     }
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ○ 消費 CP
  270.   #--------------------------------------------------------------------------
  271.   def cp_cost
  272.     create_skill_cp_system_cache if @__cp_cost == nil
  273.     return @__cp_cost
  274.   end
  275. end

  276. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  277. #==============================================================================
  278. # ■ Game_Battler
  279. #==============================================================================

  280. class Game_Battler
  281.   #--------------------------------------------------------------------------
  282.   # ○ 戦闘用スキルセット済み判定
  283.   #     skill : スキル
  284.   #--------------------------------------------------------------------------
  285.   def battle_skill_set?(skill)
  286.     return true
  287.   end
  288. end

  289. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  290. #==============================================================================
  291. # ■ Game_Actor
  292. #==============================================================================

  293. class Game_Actor < Game_Battler
  294.   #--------------------------------------------------------------------------
  295.   # ● 公開インスタンス変数
  296.   #--------------------------------------------------------------------------
  297.   attr_writer   :maxcp_plus               # MaxCP 補正値
  298.   #--------------------------------------------------------------------------
  299.   # ○ MaxCP 取得
  300.   #--------------------------------------------------------------------------
  301.   def maxcp
  302.     calc_exp = KGC::SkillCPSystem::PERSONAL_CP_CALC_EXP[self.id]
  303.     if calc_exp == nil
  304.       calc_exp = KGC::SkillCPSystem::CP_CALC_EXP
  305.     end
  306.     n = Integer(eval(calc_exp))
  307.     n = [[n, cp_limit].min, KGC::SkillCPSystem::CP_MIN].max
  308.     n += maxcp_plus + maxcp_plus_equip
  309.     return [[n, revised_cp_limit].min, KGC::SkillCPSystem::REVISED_CP_MIN].max
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ○ CP 取得
  313.   #--------------------------------------------------------------------------
  314.   def cp
  315.     return [maxcp - consumed_cp, 0].max
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ○ CP 消費量取得
  319.   #--------------------------------------------------------------------------
  320.   def consumed_cp
  321.     n = 0
  322.     battle_skills.compact.each { |skill| n += skill.cp_cost }
  323.     return n
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # ○ CP 上限取得
  327.   #--------------------------------------------------------------------------
  328.   def cp_limit
  329.     return KGC::SkillCPSystem::CP_MAX
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ○ 補正後の CP 上限取得
  333.   #--------------------------------------------------------------------------
  334.   def revised_cp_limit
  335.     return KGC::SkillCPSystem::REVISED_CP_MAX
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ○ MaxCP 補正値取得
  339.   #--------------------------------------------------------------------------
  340.   def maxcp_plus
  341.     if @maxcp_plus == nil
  342.       if @own_cp != nil
  343.         @maxcp_plus = @own_cp
  344.         @own_cp = nil
  345.       else
  346.         @maxcp_plus = 0
  347.       end
  348.     end
  349.     return @maxcp_plus
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ○ 装備品による MaxCP 補正値取得
  353.   #--------------------------------------------------------------------------
  354.   def maxcp_plus_equip
  355.     n = 0
  356.     equips.compact.each { |item| n += item.maxcp_plus }
  357.     return n
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● スキル取得
  361.   #--------------------------------------------------------------------------
  362.   alias skills_KGC_SkillCPSystem skills
  363.   def skills
  364.     return (skill_cp_restrict? ? restricted_skills : skills_KGC_SkillCPSystem)
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ○ スキルを制限するか
  368.   #--------------------------------------------------------------------------
  369.   def skill_cp_restrict?
  370.     if $game_temp.in_battle
  371.       # 戦闘テストでないか、戦闘テストでも制限する場合
  372.       return true unless $BTEST && KGC::SkillCPSystem::DISABLE_IN_BATTLETEST
  373.     end

  374.     return false
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ○ スキルを制限
  378.   #--------------------------------------------------------------------------
  379.   def restricted_skills
  380.     result = all_skills
  381.     result.each_with_index { |skill, i|
  382.       # 消費 CP > 0 のスキルを除外
  383.       if !KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0
  384.         result[i] = nil
  385.       end
  386.       # パッシブスキルを除外
  387.       if $imported["PassiveSkill"] && KGC::SkillCPSystem::PASSIVE_NEED_TO_SET
  388.         if skill.passive &&
  389.             (!KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0)
  390.           result[i] = nil
  391.         end
  392.       end
  393.     }
  394.     result.compact!
  395.     # 戦闘スキルを追加
  396.     result |= battle_skills
  397.     result.sort! { |a, b| a.id <=> b.id }
  398.     return result
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ○ 全スキル取得
  402.   #--------------------------------------------------------------------------
  403.   def all_skills
  404.     # 一時的に非戦闘中にする
  405.     last_in_battle = $game_temp.in_battle
  406.     $game_temp.in_battle = false

  407.     result = skills_KGC_SkillCPSystem
  408.     if $imported["EquipLearnSkill"]
  409.       result |= (equipment_skills | full_ap_skills)
  410.       result.sort! { |a, b| a.id <=> b.id }
  411.     end

  412.     # 戦闘中フラグを戻す
  413.     $game_temp.in_battle = last_in_battle

  414.     return result
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ○ 登録スキル最大数取得
  418.   #--------------------------------------------------------------------------
  419.   def battle_skill_max
  420.     @battle_skill_max = -1 if @battle_skill_max == nil
  421.     n = (@battle_skill_max < 0 ?
  422.       KGC::SkillCPSystem::MAX_SKILLS : @battle_skill_max)
  423.     n += equipment_battle_skill_max_plus
  424.     return [n, 0].max
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # ○ 装備品による登録スキル数補正
  428.   #--------------------------------------------------------------------------
  429.   def equipment_battle_skill_max_plus
  430.     n = 0
  431.     equips.compact.each { |item| n += item.battle_skill_max_plus }
  432.     return n
  433.   end
  434.   #--------------------------------------------------------------------------
  435.   # ○ 登録スキル最大数設定
  436.   #--------------------------------------------------------------------------
  437.   def battle_skill_max=(value)
  438.     @battle_skill_max = value
  439.     if @battle_skills == nil
  440.       @battle_skills = []
  441.     else
  442.       @battle_skills = @battle_skills[0...value]
  443.     end
  444.     restore_passive_rev if $imported["PassiveSkill"]
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ○ 戦闘用スキル ID 取得
  448.   #--------------------------------------------------------------------------
  449.   def battle_skill_ids
  450.     @battle_skills = [] if @battle_skills == nil
  451.     return @battle_skills
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ○ 戦闘用スキル取得
  455.   #--------------------------------------------------------------------------
  456.   def battle_skills
  457.     result = []
  458.     battle_skill_ids.each { |i|
  459.       next if i == nil           # 無効なスキルは無視
  460.       result << $data_skills[i]
  461.     }
  462.     return result
  463.   end
  464.   #--------------------------------------------------------------------------
  465.   # ○ 戦闘用スキル登録
  466.   #     index : 位置
  467.   #     skill : スキル (nil で解除)
  468.   #--------------------------------------------------------------------------
  469.   def set_battle_skill(index, skill)
  470.     if skill == nil
  471.       @battle_skills[index] = nil
  472.     else
  473.       return unless skill.is_a?(RPG::Skill)  # スキル以外
  474.       return if cp < skill.cp_cost           # CP 不足
  475.       return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0

  476.       @battle_skills[index] = skill.id
  477.     end
  478.     restore_passive_rev if $imported["PassiveSkill"]
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # ○ 戦闘用スキル追加登録
  482.   #     skill : スキル
  483.   #--------------------------------------------------------------------------
  484.   def add_battle_skill(skill)
  485.     return unless skill.is_a?(RPG::Skill)  # スキル以外
  486.     skills = battle_skill_ids
  487.     return if skills.include?(skill.id)    # 登録済み
  488.     return if cp < skill.cp_cost           # CP 不足
  489.     return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0

  490.     battle_skill_max.times { |i|
  491.       # 空きがあれば登録
  492.       if skills[i] == nil
  493.         set_battle_skill(i, skill)
  494.         break
  495.       end
  496.     }
  497.     restore_battle_skill
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ○ 戦闘用スキル解除
  501.   #     index : 位置
  502.   #--------------------------------------------------------------------------
  503.   def remove_battle_skill(index)
  504.     @battle_skills[index] = nil
  505.     restore_passive_rev if $imported["PassiveSkill"]
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ○ 戦闘用スキル全解除
  509.   #--------------------------------------------------------------------------
  510.   def clear_battle_skill
  511.     @battle_skills = []
  512.     restore_passive_rev if $imported["PassiveSkill"]
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ○ 戦闘用スキルセット可否判定
  516.   #     index : 位置
  517.   #     skill : スキル
  518.   #--------------------------------------------------------------------------
  519.   def battle_skill_settable?(index, skill)
  520.     return false if battle_skill_max <= index  # 範囲外
  521.     return true  if skill == nil               # nil は解除なので OK

  522.     return false if battle_skill_ids.include?(skill.id)  # セット済み

  523.     skill_id = battle_skill_ids[index]
  524.     curr_skill = (skill_id != nil ? $data_skills[skill_id] : nil)
  525.     offset = (curr_skill != nil ? curr_skill.cp_cost : 0)
  526.     return false if self.cp < (skill.cp_cost - offset)  # CP 不足

  527.     return true
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ○ 戦闘用スキルを修復
  531.   #--------------------------------------------------------------------------
  532.   def restore_battle_skill
  533.     result = battle_skill_ids.clone
  534.     usable_skills = all_skills

  535.     result.each_with_index { |n, i|
  536.       next if n == nil
  537.       # 未修得の場合は解除
  538.       if (usable_skills.find { |s| s.id == n }) == nil
  539.         result[i] = nil
  540.       end
  541.     }
  542.     @battle_skills = result[0...battle_skill_max]
  543.     # CP 不足のスキルを下から順に外す
  544.     (battle_skill_max - 1).downto(0) { |i|
  545.       @battle_skills[i] = nil if maxcp - consumed_cp < 0
  546.     }
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # ● 装備の変更 (オブジェクトで指定)
  550.   #     equip_type : 装備部位 (0..4)
  551.   #     item       : 武器 or 防具 (nil なら装備解除)
  552.   #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  553.   #--------------------------------------------------------------------------
  554.   alias change_equip_KGC_SkillCPSystem change_equip
  555.   def change_equip(equip_type, item, test = false)
  556.     change_equip_KGC_SkillCPSystem(equip_type, item, test)

  557.     unless test
  558.       restore_battle_skill
  559.       restore_passive_rev if $imported["PassiveSkill"]
  560.     end
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ● 装備の破棄
  564.   #     item : 破棄する武器 or 防具
  565.   #    武器/防具の増減で「装備品も含める」のとき使用する。
  566.   #--------------------------------------------------------------------------
  567.   alias discard_equip_KGC_SkillCPSystem discard_equip
  568.   def discard_equip(item)
  569.     discard_equip_KGC_SkillCPSystem(item)

  570.     restore_battle_skill
  571.     restore_passive_rev if $imported["PassiveSkill"]
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ● 経験値の変更
  575.   #     exp  : 新しい経験値
  576.   #     show : レベルアップ表示フラグ
  577.   #--------------------------------------------------------------------------
  578.   alias change_exp_KGC_SkillCPSystem change_exp
  579.   def change_exp(exp, show)
  580.     # 習得したスキルを表示するため、戦闘中フラグを一時的に解除
  581.     last_in_battle = $game_temp.in_battle
  582.     $game_temp.in_battle = false

  583.     change_exp_KGC_SkillCPSystem(exp, show)

  584.     $game_temp.in_battle = last_in_battle
  585.   end

  586.   if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
  587.   #--------------------------------------------------------------------------
  588.   # ● スキルを覚える
  589.   #     skill_id : スキル ID
  590.   #--------------------------------------------------------------------------
  591.   alias learn_skill_KGC_SkillCPSystem learn_skill
  592.   def learn_skill(skill_id)
  593.     learn_skill_KGC_SkillCPSystem(skill_id)

  594.     add_battle_skill($data_skills[skill_id])
  595.   end
  596.   end  # <- if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL

  597.   #--------------------------------------------------------------------------
  598.   # ● スキルを忘れる
  599.   #     skill_id : スキル ID
  600.   #--------------------------------------------------------------------------
  601.   alias forget_skill_KGC_SkillCPSystem forget_skill
  602.   def forget_skill(skill_id)
  603.     # 忘れるスキルを戦闘用スキルから削除
  604.     battle_skill_ids.each_with_index { |s, i|
  605.       remove_battle_skill(i) if s == skill_id
  606.     }

  607.     forget_skill_KGC_SkillCPSystem(skill_id)
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ○ 戦闘用スキルセット済み判定
  611.   #     skill : スキル
  612.   #--------------------------------------------------------------------------
  613.   def battle_skill_set?(skill)
  614.     return false unless skill.is_a?(RPG::Skill)  # スキル以外

  615.     return battle_skill_ids.include?(skill.id)
  616.   end
  617. end

  618. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  619. #==============================================================================
  620. # ■ Window_Base
  621. #==============================================================================

  622. class Window_Base < Window
  623.   #--------------------------------------------------------------------------
  624.   # ○ CP の文字色を取得
  625.   #     actor : アクター
  626.   #--------------------------------------------------------------------------
  627.   def cp_color(actor)
  628.     return knockout_color if actor.maxcp > 0 && actor.cp == 0
  629.     return normal_color
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ○ CP ゲージの色 1 の取得
  633.   #--------------------------------------------------------------------------
  634.   def cp_gauge_color1
  635.     color = KGC::SkillCPSystem::GAUGE_START_COLOR
  636.     return (color.is_a?(Integer) ? text_color(color) : color)
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ○ CP ゲージの色 2 の取得
  640.   #--------------------------------------------------------------------------
  641.   def cp_gauge_color2
  642.     color = KGC::SkillCPSystem::GAUGE_END_COLOR
  643.     return (color.is_a?(Integer) ? text_color(color) : color)
  644.   end
  645.   #--------------------------------------------------------------------------
  646.   # ○ CP の描画
  647.   #     actor : アクター
  648.   #     x     : 描画先 X 座標
  649.   #     y     : 描画先 Y 座標
  650.   #     width : 幅
  651.   #--------------------------------------------------------------------------
  652.   def draw_actor_cp(actor, x, y, width = 120)
  653.     draw_actor_cp_gauge(actor, x, y, width)
  654.     self.contents.font.color = system_color
  655.     self.contents.draw_text(x, y, 30, WLH, Vocab::cp_a)
  656.     self.contents.font.color = cp_color(actor)
  657.     xr = x + width
  658.     if width < 120
  659.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.cp, 2)
  660.     else
  661.       self.contents.draw_text(xr - 90, y, 40, WLH, actor.cp, 2)
  662.       self.contents.font.color = normal_color
  663.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  664.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxcp, 2)
  665.     end
  666.     self.contents.font.color = normal_color
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ○ CP ゲージの描画
  670.   #     actor : アクター
  671.   #     x     : 描画先 X 座標
  672.   #     y     : 描画先 Y 座標
  673.   #     width : 幅
  674.   #--------------------------------------------------------------------------
  675.   def draw_actor_cp_gauge(actor, x, y, width = 120)
  676.     gw = width * actor.cp / [actor.maxcp, 1].max
  677.     gc1 = cp_gauge_color1
  678.     gc2 = cp_gauge_color2
  679.     self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  680.     self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  681.   end
  682. end

  683. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  684. #==============================================================================
  685. # ■ Window_Command
  686. #==============================================================================

  687. class Window_Command < Window_Selectable
  688.   unless method_defined?(:add_command)
  689.   #--------------------------------------------------------------------------
  690.   # ○ コマンドを追加
  691.   #    追加した位置を返す
  692.   #--------------------------------------------------------------------------
  693.   def add_command(command)
  694.     @commands << command
  695.     @item_max = @commands.size
  696.     item_index = @item_max - 1
  697.     refresh_command
  698.     draw_item(item_index)
  699.     return item_index
  700.   end
  701.   #--------------------------------------------------------------------------
  702.   # ○ コマンドをリフレッシュ
  703.   #--------------------------------------------------------------------------
  704.   def refresh_command
  705.     buf = self.contents.clone
  706.     self.height = [self.height, row_max * WLH + 32].max
  707.     create_contents
  708.     self.contents.blt(0, 0, buf, buf.rect)
  709.     buf.dispose
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ○ コマンドを挿入
  713.   #--------------------------------------------------------------------------
  714.   def insert_command(index, command)
  715.     @commands.insert(index, command)
  716.     @item_max = @commands.size
  717.     refresh_command
  718.     refresh
  719.   end
  720.   #--------------------------------------------------------------------------
  721.   # ○ コマンドを削除
  722.   #--------------------------------------------------------------------------
  723.   def remove_command(command)
  724.     @commands.delete(command)
  725.     @item_max = @commands.size
  726.     refresh
  727.   end
  728.   end
  729. end

  730. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  731. #==============================================================================
  732. # ■ Window_Status
  733. #==============================================================================

  734. if KGC::SkillCPSystem::SHOW_STATUS_CP
  735. class Window_Status < Window_Base
  736.   #--------------------------------------------------------------------------
  737.   # ● 基本情報の描画
  738.   #     x : 描画先 X 座標
  739.   #     y : 描画先 Y 座標
  740.   #--------------------------------------------------------------------------
  741.   alias draw_basic_info_KGC_SkillCPSystem draw_basic_info
  742.   def draw_basic_info(x, y)
  743.     draw_basic_info_KGC_SkillCPSystem(x, y)

  744.     draw_actor_cp(@actor, x, y + WLH * 4)
  745.   end
  746. end
  747. end

  748. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  749. #==============================================================================
  750. # □ Window_BattleSkillStatus
  751. #------------------------------------------------------------------------------
  752. #   戦闘スキル設定画面で、設定者のステータスを表示するウィンドウです。
  753. #==============================================================================

  754. class Window_BattleSkillStatus < Window_Base
  755.   #--------------------------------------------------------------------------
  756.   # ● オブジェクト初期化
  757.   #     x     : ウィンドウの X 座標
  758.   #     y     : ウィンドウの Y 座標
  759.   #     actor : アクター
  760.   #--------------------------------------------------------------------------
  761.   def initialize(x, y, actor)
  762.     super(x, y, Graphics.width, WLH + 32)
  763.     @actor = actor
  764.     refresh
  765.   end
  766.   #--------------------------------------------------------------------------
  767.   # ● リフレッシュ
  768.   #--------------------------------------------------------------------------
  769.   def refresh
  770.     self.contents.clear
  771.     draw_actor_name(@actor, 4, 0)
  772.     draw_actor_level(@actor, 140, 0)
  773.     draw_actor_cp(@actor, 240, 0)
  774.   end
  775. end

  776. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  777. #==============================================================================
  778. # □ Window_BattleSkillSlot
  779. #------------------------------------------------------------------------------
  780. #   戦闘スキル選択画面で、設定したスキルの一覧を表示するウィンドウです。
  781. #==============================================================================

  782. class Window_BattleSkillSlot < Window_Selectable
  783.   #--------------------------------------------------------------------------
  784.   # ● オブジェクト初期化
  785.   #     x      : ウィンドウの X 座標
  786.   #     y      : ウィンドウの Y 座標
  787.   #     width  : ウィンドウの幅
  788.   #     height : ウィンドウの高さ
  789.   #     actor  : アクター
  790.   #--------------------------------------------------------------------------
  791.   def initialize(x, y, width, height, actor)
  792.     super(x, y, width, height)
  793.     @actor = actor
  794.     self.index = 0
  795.     self.active = false
  796.     refresh
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # ○ スキルの取得
  800.   #--------------------------------------------------------------------------
  801.   def skill
  802.     return @data[self.index]
  803.   end
  804.   #--------------------------------------------------------------------------
  805.   # ● リフレッシュ
  806.   #--------------------------------------------------------------------------
  807.   def refresh
  808.     @data = []
  809.     skill_ids = @actor.battle_skill_ids
  810.     @actor.battle_skill_max.times { |i|
  811.       if skill_ids[i] != nil
  812.         @data << $data_skills[skill_ids[i]]
  813.       else
  814.         @data << nil
  815.       end
  816.     }
  817.     @item_max = @data.size
  818.     create_contents
  819.     @item_max.times { |i| draw_item(i) }
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # ○ 項目の描画
  823.   #     index : 項目番号
  824.   #--------------------------------------------------------------------------
  825.   def draw_item(index)
  826.     rect = item_rect(index)
  827.     self.contents.clear_rect(rect)
  828.     skill = @data[index]
  829.     if skill != nil
  830.       rect.width -= 4
  831.       draw_item_name(skill, rect.x, rect.y)
  832.       self.contents.draw_text(rect, skill.cp_cost, 2)
  833.     else
  834.       self.contents.draw_text(rect, KGC::SkillCPSystem::BLANK_TEXT, 1)
  835.     end
  836.   end
  837.   #--------------------------------------------------------------------------
  838.   # ● カーソルを 1 ページ後ろに移動
  839.   #--------------------------------------------------------------------------
  840.   def cursor_pagedown
  841.     return if Input.repeat?(Input::R)
  842.     super
  843.   end
  844.   #--------------------------------------------------------------------------
  845.   # ● カーソルを 1 ページ前に移動
  846.   #--------------------------------------------------------------------------
  847.   def cursor_pageup
  848.     return if Input.repeat?(Input::L)
  849.     super
  850.   end
  851.   #--------------------------------------------------------------------------
  852.   # ● フレーム更新
  853.   #--------------------------------------------------------------------------
  854.   def update
  855.     super
  856.     return unless self.active

  857.     if Input.repeat?(Input::RIGHT)
  858.       Sound.play_cursor
  859.       cursor_pagedown
  860.     elsif Input.repeat?(Input::LEFT)
  861.       Sound.play_cursor
  862.       cursor_pageup
  863.     end
  864.   end
  865.   #--------------------------------------------------------------------------
  866.   # ● ヘルプテキスト更新
  867.   #--------------------------------------------------------------------------
  868.   def update_help
  869.     @help_window.set_text(skill == nil ? "" : skill.description)
  870.   end
  871. end

  872. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  873. #==============================================================================
  874. # □ Window_BattleSkillList
  875. #------------------------------------------------------------------------------
  876. #   戦闘スキル選択画面で、設定できるスキルの一覧を表示するウィンドウです。
  877. #==============================================================================

  878. class Window_BattleSkillList < Window_Selectable
  879.   #--------------------------------------------------------------------------
  880.   # ● 公開インスタンス変数
  881.   #--------------------------------------------------------------------------
  882.   attr_accessor :slot_index               # スロット番号
  883.   #--------------------------------------------------------------------------
  884.   # ● オブジェクト初期化
  885.   #     x      : ウィンドウの X 座標
  886.   #     y      : ウィンドウの Y 座標
  887.   #     width  : ウィンドウの幅
  888.   #     height : ウィンドウの高さ
  889.   #     actor  : アクター
  890.   #--------------------------------------------------------------------------
  891.   def initialize(x, y, width, height, actor)
  892.     super(x, y, width, height)
  893.     @actor = actor
  894.     @slot_index = 0
  895.     self.index = 0
  896.     self.active = false
  897.     refresh
  898.   end
  899.   #--------------------------------------------------------------------------
  900.   # ○ スキルの取得
  901.   #--------------------------------------------------------------------------
  902.   def skill
  903.     return @data[self.index]
  904.   end
  905.   #--------------------------------------------------------------------------
  906.   # ● リフレッシュ
  907.   #--------------------------------------------------------------------------
  908.   def refresh
  909.     @data = [nil]
  910.     # 選択可能なスキルのみを取得
  911.     @actor.all_skills.each { |skill|
  912.       @data.push(skill) if selectable?(skill)
  913.     }

  914.     @item_max = @data.size
  915.     create_contents
  916.     @item_max.times { |i| draw_item(i) }
  917.   end
  918.   #--------------------------------------------------------------------------
  919.   # ○ スキル選択可否判定
  920.   #     skill : スキル
  921.   #--------------------------------------------------------------------------
  922.   def selectable?(skill)
  923.     return false if skill == nil

  924.     # 消費 CP 0 なら常に使用可能な場合
  925.     if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
  926.       return false
  927.     end
  928.     # 戦闘時に使用可能ならOK
  929.     return true if skill.battle_ok?
  930.     # 使用不可でもセット可能な場合
  931.     if KGC::SkillCPSystem::SHOW_UNUSABLE_SKILL && skill.occasion == 3
  932.       return true
  933.     end

  934.     return false
  935.   end
  936.   #--------------------------------------------------------------------------
  937.   # ○ 項目の描画
  938.   #     index : 項目番号
  939.   #--------------------------------------------------------------------------
  940.   def draw_item(index)
  941.     rect = item_rect(index)
  942.     self.contents.clear_rect(rect)
  943.     skill = @data[index]
  944.     if skill != nil
  945.       rect.width -= 4
  946.       enabled = @actor.battle_skill_settable?(@slot_index, skill)
  947.       draw_item_name(skill, rect.x, rect.y, enabled)
  948.       self.contents.draw_text(rect, skill.cp_cost, 2)
  949.     else
  950.       self.contents.draw_text(rect, KGC::SkillCPSystem::RELEASE_TEXT, 1)
  951.     end
  952.   end
  953.   #--------------------------------------------------------------------------
  954.   # ● フレーム更新
  955.   #--------------------------------------------------------------------------
  956.   def update
  957.     super
  958.     return unless self.active

  959.     if Input.repeat?(Input::RIGHT)
  960.       cursor_pagedown
  961.     elsif Input.repeat?(Input::LEFT)
  962.       cursor_pageup
  963.     end
  964.   end
  965.   #--------------------------------------------------------------------------
  966.   # ● ヘルプテキスト更新
  967.   #--------------------------------------------------------------------------
  968.   def update_help
  969.     @help_window.set_text(skill == nil ? "" : skill.description)
  970.   end
  971. end

  972. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  973. #==============================================================================
  974. # ■ Scene_Map
  975. #==============================================================================

  976. class Scene_Map < Scene_Base
  977.   #--------------------------------------------------------------------------
  978.   # ● 画面切り替えの実行
  979.   #--------------------------------------------------------------------------
  980.   alias update_scene_change_KGC_SkillCPSystem update_scene_change
  981.   def update_scene_change
  982.     return if $game_player.moving?    # プレイヤーの移動中?

  983.     if $game_temp.next_scene == :set_battle_skill
  984.       call_set_battle_skill
  985.       return
  986.     end

  987.     update_scene_change_KGC_SkillCPSystem
  988.   end
  989.   #--------------------------------------------------------------------------
  990.   # ○ スキル設定画面への切り替え
  991.   #--------------------------------------------------------------------------
  992.   def call_set_battle_skill
  993.     $game_temp.next_scene = nil
  994.     $scene = Scene_SetBattleSkill.new(
  995.       $game_temp.next_scene_actor_index,
  996.       0,
  997.       Scene_SetBattleSkill::HOST_MAP)
  998.   end
  999. end

  1000. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1001. #==============================================================================
  1002. # ■ Scene_Menu
  1003. #==============================================================================

  1004. class Scene_Menu < Scene_Base
  1005.   if KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND
  1006.   #--------------------------------------------------------------------------
  1007.   # ● コマンドウィンドウの作成
  1008.   #--------------------------------------------------------------------------
  1009.   alias create_command_window_KGC_SkillCPSystem create_command_window
  1010.   def create_command_window
  1011.     create_command_window_KGC_SkillCPSystem

  1012.     return if $imported["CustomMenuCommand"]

  1013.     @__command_set_battle_skill_index =
  1014.       @command_window.add_command(Vocab.set_battle_skill)
  1015.     if @command_window.oy > 0
  1016.       @command_window.oy -= Window_Base::WLH
  1017.     end
  1018.     @command_window.index = @menu_index
  1019.   end
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● コマンド選択の更新
  1023.   #--------------------------------------------------------------------------
  1024.   alias update_command_selection_KGC_SkillCPSystem update_command_selection
  1025.   def update_command_selection
  1026.     call_set_battle_skill_flag = false
  1027.     if Input.trigger?(Input::C)
  1028.       case @command_window.index
  1029.       when @__command_set_battle_skill_index  # スキル設定
  1030.         call_set_battle_skill_flag = true
  1031.       end
  1032.     end

  1033.     # スキル設定画面に移行
  1034.     if call_set_battle_skill_flag
  1035.       if $game_party.members.size == 0
  1036.         Sound.play_buzzer
  1037.         return
  1038.       end
  1039.       Sound.play_decision
  1040.       start_actor_selection
  1041.       return
  1042.     end

  1043.     update_command_selection_KGC_SkillCPSystem
  1044.   end
  1045.   #--------------------------------------------------------------------------
  1046.   # ● アクター選択の更新
  1047.   #--------------------------------------------------------------------------
  1048.   alias update_actor_selection_KGC_SkillCPSystem update_actor_selection
  1049.   def update_actor_selection
  1050.     if Input.trigger?(Input::C)
  1051.       $game_party.last_actor_index = @status_window.index
  1052.       Sound.play_decision
  1053.       case @command_window.index
  1054.       when @__command_set_battle_skill_index  # スキル設定
  1055.         $scene = Scene_SetBattleSkill.new(
  1056.           @status_window.index,
  1057.           @__command_set_battle_skill_index,
  1058.           Scene_SetBattleSkill::HOST_MENU)
  1059.         return
  1060.       end
  1061.     end

  1062.     update_actor_selection_KGC_SkillCPSystem
  1063.   end
  1064. end

  1065. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1066. #==============================================================================
  1067. # □ Scene_SetBattleSkill
  1068. #------------------------------------------------------------------------------
  1069. #   戦闘スキル設定画面の処理を行うクラスです。
  1070. #==============================================================================

  1071. class Scene_SetBattleSkill < Scene_Base
  1072.   #--------------------------------------------------------------------------
  1073.   # ○ 定数
  1074.   #--------------------------------------------------------------------------
  1075.   HOST_MENU   = 0  # 呼び出し元 : メニュー
  1076.   HOST_MAP    = 1  # 呼び出し元 : マップ
  1077.   #--------------------------------------------------------------------------
  1078.   # ● オブジェクト初期化
  1079.   #     actor_index : アクターインデックス
  1080.   #     menu_index  : コマンドのカーソル初期位置
  1081.   #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  1082.   #--------------------------------------------------------------------------
  1083.   def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
  1084.     @actor_index = actor_index
  1085.     @menu_index = menu_index
  1086.     @host_scene = host_scene
  1087.   end
  1088.   #--------------------------------------------------------------------------
  1089.   # ● 開始処理
  1090.   #--------------------------------------------------------------------------
  1091.   def start
  1092.     super
  1093.     create_menu_background

  1094.     @actor = $game_party.members[@actor_index]
  1095.     create_windows
  1096.   end
  1097.   #--------------------------------------------------------------------------
  1098.   # ○ ウィンドウ作成
  1099.   #--------------------------------------------------------------------------
  1100.   def create_windows
  1101.     @help_window = Window_Help.new
  1102.     if $imported["HelpExtension"]
  1103.       @help_window.row_max = KGC::HelpExtension::ROW_MAX
  1104.     end

  1105.     dy = @help_window.height
  1106.     @status_window = Window_BattleSkillStatus.new(0, dy, @actor)

  1107.     dy += @status_window.height
  1108.     @slot_window = Window_BattleSkillSlot.new(
  1109.       0,
  1110.       dy,
  1111.       Graphics.width / 2,
  1112.       Graphics.height - dy,
  1113.       @actor)
  1114.     @slot_window.help_window = @help_window
  1115.     @slot_window.active = true

  1116.     @list_window = Window_BattleSkillList.new(
  1117.       Graphics.width - @slot_window.width,
  1118.       dy,
  1119.       Graphics.width - @slot_window.width,
  1120.       Graphics.height - dy,
  1121.       @actor)
  1122.     @list_window.help_window = @help_window
  1123.   end
  1124.   #--------------------------------------------------------------------------
  1125.   # ● 終了処理
  1126.   #--------------------------------------------------------------------------
  1127.   def terminate
  1128.     super
  1129.     dispose_menu_background
  1130.     @help_window.dispose
  1131.     @status_window.dispose
  1132.     @slot_window.dispose
  1133.     @list_window.dispose
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # ○ 元の画面へ戻る
  1137.   #--------------------------------------------------------------------------
  1138.   def return_scene
  1139.     case @host_scene
  1140.     when HOST_MENU
  1141.       $scene = Scene_Menu.new(@menu_index)
  1142.     when HOST_MAP
  1143.       $scene = Scene_Map.new
  1144.     end
  1145.   end
  1146.   #--------------------------------------------------------------------------
  1147.   # ● フレーム更新
  1148.   #--------------------------------------------------------------------------
  1149.   def update
  1150.     super
  1151.     update_menu_background
  1152.     update_window
  1153.     if @slot_window.active
  1154.       update_slot
  1155.     elsif @list_window.active
  1156.       update_list
  1157.     end
  1158.   end
  1159.   #--------------------------------------------------------------------------
  1160.   # ○ ウィンドウ更新
  1161.   #--------------------------------------------------------------------------
  1162.   def update_window
  1163.     @help_window.update
  1164.     @status_window.update
  1165.     @slot_window.update
  1166.     @list_window.update
  1167.   end
  1168.   #--------------------------------------------------------------------------
  1169.   # ○ ウィンドウ再描画
  1170.   #--------------------------------------------------------------------------
  1171.   def refresh_window
  1172.     @status_window.refresh
  1173.     @slot_window.refresh
  1174.     @list_window.refresh
  1175.   end
  1176.   #--------------------------------------------------------------------------
  1177.   # ○ 次のアクターの画面に切り替え
  1178.   #--------------------------------------------------------------------------
  1179.   def next_actor
  1180.     @actor_index += 1
  1181.     @actor_index %= $game_party.members.size
  1182.     $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  1183.   end
  1184.   #--------------------------------------------------------------------------
  1185.   # ○ 前のアクターの画面に切り替え
  1186.   #--------------------------------------------------------------------------
  1187.   def prev_actor
  1188.     @actor_index += $game_party.members.size - 1
  1189.     @actor_index %= $game_party.members.size
  1190.     $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  1191.   end
  1192.   #--------------------------------------------------------------------------
  1193.   # ○ フレーム更新 (スロットウィンドウがアクティブの場合)
  1194.   #--------------------------------------------------------------------------
  1195.   def update_slot
  1196.     # 選択項目が変化した場合
  1197.     if @last_slot_index != @slot_window.index
  1198.       @list_window.slot_index = @slot_window.index
  1199.       @list_window.refresh
  1200.       @last_slot_index = @slot_window.index
  1201.     end

  1202.     if Input.trigger?(Input::A)
  1203.       Sound.play_decision
  1204.       # 選択しているスキルを外す
  1205.       @actor.remove_battle_skill(@slot_window.index)
  1206.       refresh_window
  1207.     elsif Input.trigger?(Input::B)
  1208.       Sound.play_cancel
  1209.       return_scene
  1210.     elsif Input.trigger?(Input::C)
  1211.       Sound.play_decision
  1212.       # リストウィンドウに切り替え
  1213.       @slot_window.active = false
  1214.       @list_window.active = true
  1215.     elsif Input.trigger?(Input::R)
  1216.       Sound.play_cursor
  1217.       next_actor
  1218.     elsif Input.trigger?(Input::L)
  1219.       Sound.play_cursor
  1220.       prev_actor
  1221.     end
  1222.   end
  1223.   #--------------------------------------------------------------------------
  1224.   # ○ フレーム更新 (リストウィンドウがアクティブの場合)
  1225.   #--------------------------------------------------------------------------
  1226.   def update_list
  1227.     if Input.trigger?(Input::B)
  1228.       Sound.play_cancel
  1229.       # スロットウィンドウに切り替え
  1230.       @slot_window.active = true
  1231.       @list_window.active = false
  1232.     elsif Input.trigger?(Input::C)
  1233.       skill = @list_window.skill
  1234.       # セットできない場合
  1235.       unless @actor.battle_skill_settable?(@slot_window.index, skill)
  1236.         Sound.play_buzzer
  1237.         return
  1238.       end
  1239.       Sound.play_decision
  1240.       set_skill(@slot_window.index, skill)
  1241.       # スロットウィンドウに切り替え
  1242.       @slot_window.active = true
  1243.       @list_window.active = false
  1244.     end
  1245.   end
  1246.   #--------------------------------------------------------------------------
  1247.   # ○ スキル設定
  1248.   #     index : 設定する場所
  1249.   #     skill : 設定するスキル
  1250.   #--------------------------------------------------------------------------
  1251.   def set_skill(index, skill)
  1252.     @actor.remove_battle_skill(index)
  1253.     if skill != nil
  1254.       @actor.set_battle_skill(index, skill)
  1255.     end
  1256.     refresh_window
  1257.   end
  1258. end

复制代码
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 技能CP制 - KGC_SkillCPSystem ◆ VX ◆
#_/    ◇ 更新日期 : 2010/10/30 ◇
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ 设定项目 - Customize ★
#==============================================================================

module KGC
module SkillCPSystem
  # ◆ 可登陆最大技能数
  MAX_SKILLS = 5
  # ◆ CP 的名字
  VOCAB_CP   = "CP"
  # ◆ CP 的名字 (简称)
  VOCAB_CP_A = "C"
  # ◆ CP 数值是否在角色状态中显示
  SHOW_STATUS_CP = false

  # ◆ 消费 CP 的设定
  #  消费的 CP (未指定消费CP时所消费的CP值)
  DEFAULT_CP_COST = 1
  # ◆ CP 的上限(不包括装备提供的 CP )
  CP_MAX = 10
  # ◆ CP 的下限
  CP_MIN = 10
  # ◆ 补正后的 CP 上限
  #  本来的 CP 加上装备提供的 CP 上限
  REVISED_CP_MAX = 20
  # ◆ 补正后的 CP 下限
  REVISED_CP_MIN = 0
  # ◆ CP 最大值的计算公式
  #   level代表角色当前等级
  #   结果会自动取整数
  CP_CALC_EXP = "level * 0 + 0"
  # ◆ 每个角色最大 CP 计算公式
  PERSONAL_CP_CALC_EXP = []
  #   PERSONAL_CP_CALC_EXP[角色 ID] = "公式"
  #   公式格式和最大值计算公式一样
  #   <举例>
  # PERSONAL_CP_CALC_EXP[1] = "level * 0.8 + 2.0"

  DISABLE_IN_BATTLETEST  = true
  # ◆ 使不可以使用的技能也可以装备
  SHOW_UNUSABLE_SKILL    = true
  # ◆ 消费 CP 为0 的技能不需要设置就可以使用
  USABLE_COST_ZERO_SKILL = true
  # ◆ パッシブスキル没效果,不设置(这个我不知道是什么..不用管它就好)
  #  ≪パッシブスキル≫ 导入时才有效
  PASSIVE_NEED_TO_SET    = true
  # ◆ 新学习到的技能自动装备
  AUTO_SET_NEW_SKILL     = false

  # ◆ CP 最小值时的颜色
  #  数值和  : \C[n] 设置的颜色相同
  GAUGE_START_COLOR = 13
  # ◆ CP 最大值时的颜色
  GAUGE_END_COLOR   = 5

  # ◆ 在菜单中添加技能设定的选项
  #  默认添加在菜单栏最下面
  USE_MENU_SET_SKILL_COMMAND = true
  # ◆ 菜单中'技能设定'的名称
  VOCAB_MENU_SET_SKILL       = "技能设定"

  # ◆ 未设定技能时显示的名称
  BLANK_TEXT   = "-  EMPTY  -"
  # ◆ 技能解除时候显示的名称
  RELEASE_TEXT = "( 设定解除 )"
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["SkillCPSystem"] = true

module KGC::SkillCPSystem
  module Regexp
    module BaseItem
      # 最大 CP
      MAXCP_PLUS = /<(?:MAX|最大)CP\s*([\-\+]?\d+)>/
      # 登陆技能数量
      BATTLE_SKILL_MAX = /<(?:BATTLE_SKILL_MAX|登録スキル数)\s*([\-\+]?\d+)>/i
    end

    module Skill
      # 消費 CP
      CP_COST = /<CP\s*(\d+)>/i
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ KGC::Commands
#==============================================================================

module KGC
module Commands
  module_function
  #--------------------------------------------------------------------------
  # ○ MaxCP 補正値の取得
  #     actor_id    : アクター ID
  #     variable_id : 取得した値を代入する変数の ID
  #--------------------------------------------------------------------------
  def get_actor_own_cp(actor_id, variable_id = 0)
    value = $game_actors[actor_id].maxcp_plus
    $game_variables[variable_id] = value if variable_id > 0
    return value
  end
  alias get_own_cp get_actor_own_cp
  #--------------------------------------------------------------------------
  # ○ MaxCP 補正値の変更
  #     actor_id : アクター ID
  #     value    : MaxCP 補正値
  #--------------------------------------------------------------------------
  def set_actor_own_cp(actor_id, value)
    $game_actors[actor_id].maxcp_plus = value
  end
  alias set_own_cp set_actor_own_cp
  #--------------------------------------------------------------------------
  # ○ アクターの MaxCP 補正値の増加
  #     actor_id : アクター ID
  #     value    : 増加量
  #--------------------------------------------------------------------------
  def gain_actor_cp(actor_id, value)
    $game_actors[actor_id].maxcp_plus += value
  end
  #--------------------------------------------------------------------------
  # ○ 登録スキル最大数の取得
  #     actor_id : アクター ID
  #     variable_id : 取得した値を代入する変数の ID
  #--------------------------------------------------------------------------
  def get_battle_skill_max(actor_id, variable_id = 0)
    value = $game_actors[actor_id].battle_skill_max
    $game_variables[variable_id] = value if variable_id > 0
    return value
  end
  #--------------------------------------------------------------------------
  # ○ 登録スキル最大数の変更
  #     actor_id : アクター ID
  #     value    : 登録可能数
  #--------------------------------------------------------------------------
  def set_battle_skill_max(actor_id, value = -1)
    $game_actors[actor_id].battle_skill_max = value
  end
  #--------------------------------------------------------------------------
  # ○ スキルが登録されているか
  #     actor_id : アクター ID
  #     skill_id : 確認するスキル ID
  #--------------------------------------------------------------------------
  def battle_skill_set?(actor_id, skill_id)
    return $game_actors[actor_id].battle_skill_ids.include?(skill_id)
  end
  #--------------------------------------------------------------------------
  # ○ スキルの登録
  #     actor_id : アクター ID
  #     index    : 登録箇所
  #     skill_id : 登録するスキル ID (nil で解除)
  #--------------------------------------------------------------------------
  def set_battle_skill(actor_id, index, skill_id = nil)
    actor = $game_actors[actor_id]
    if skill_id.is_a?(Integer)
      # 登録
      skill = $data_skills[skill_id]
      return unless actor.battle_skill_settable?(index, skill)  # セット不可

      actor.set_battle_skill(index, skill)
      actor.restore_battle_skill
    else
      # 解除
      actor.remove_battle_skill(index)
    end
  end
  #--------------------------------------------------------------------------
  # ○ スキルの追加登録
  #     actor_id : アクター ID
  #     skill_id : 登録するスキル ID
  #--------------------------------------------------------------------------
  def add_battle_skill(actor_id, skill_id)
    actor = $game_actors[actor_id]
    skill = $data_skills[skill_id]
    return if actor == nil || skill == nil

    actor.add_battle_skill(skill)
  end
  #--------------------------------------------------------------------------
  # ○ スキルの全解除
  #     actor_id : アクター ID
  #--------------------------------------------------------------------------
  def clear_battle_skill(actor_id)
    $game_actors[actor_id].clear_battle_skill
  end
  #--------------------------------------------------------------------------
  # ○ スキル設定画面の呼び出し
  #     actor_index : アクターインデックス
  #--------------------------------------------------------------------------
  def call_set_battle_skill(actor_index = 0)
    return if $game_temp.in_battle
    $game_temp.next_scene = :set_battle_skill
    $game_temp.next_scene_actor_index = actor_index
  end
end
end

class Game_Interpreter
  include KGC::Commands
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Vocab
#==============================================================================

module Vocab
  # CP
  def self.cp
    return KGC::SkillCPSystem::VOCAB_CP
  end

  # CP (略)
  def self.cp_a
    return KGC::SkillCPSystem::VOCAB_CP_A
  end

  # スキル設定
  def self.set_battle_skill
    return KGC::SkillCPSystem::VOCAB_MENU_SET_SKILL
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::BaseItem
#==============================================================================

class RPG::BaseItem
  #--------------------------------------------------------------------------
  # ○ スキルCP制のキャッシュを生成
  #--------------------------------------------------------------------------
  def create_skill_cp_system_cache
    @__maxcp_plus = 0
    @__battle_skill_max_plus = 0

    self.note.each_line { |line|
      case line
      when KGC::SkillCPSystem::Regexp::BaseItem::MAXCP_PLUS
        # 最大 CP
        @__maxcp_plus += $1.to_i
      when KGC::SkillCPSystem::Regexp::BaseItem::BATTLE_SKILL_MAX
        # 登録スキル数
        @__battle_skill_max_plus += $1.to_i
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 最大 CP 補正
  #--------------------------------------------------------------------------
  def maxcp_plus
    create_skill_cp_system_cache if @__maxcp_plus == nil
    return @__maxcp_plus
  end
  #--------------------------------------------------------------------------
  # ○ 登録スキル数補正
  #--------------------------------------------------------------------------
  def battle_skill_max_plus
    create_skill_cp_system_cache if @__battle_skill_max_plus == nil
    return @__battle_skill_max_plus
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::Skill
#==============================================================================

class RPG::Skill < RPG::UsableItem
  #--------------------------------------------------------------------------
  # ○ スキルCP制のキャッシュを生成
  #--------------------------------------------------------------------------
  def create_skill_cp_system_cache
    @__cp_cost = KGC::SkillCPSystem::DEFAULT_CP_COST

    self.note.each_line { |line|
      case line
      when KGC::SkillCPSystem::Regexp::Skill::CP_COST
        # 消費 CP
        @__cp_cost = $1.to_i
      end
    }
  end
  #--------------------------------------------------------------------------
  # ○ 消費 CP
  #--------------------------------------------------------------------------
  def cp_cost
    create_skill_cp_system_cache if @__cp_cost == nil
    return @__cp_cost
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキルセット済み判定
  #     skill : スキル
  #--------------------------------------------------------------------------
  def battle_skill_set?(skill)
    return true
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_writer   :maxcp_plus               # MaxCP 補正値
  #--------------------------------------------------------------------------
  # ○ MaxCP 取得
  #--------------------------------------------------------------------------
  def maxcp
    calc_exp = KGC::SkillCPSystem::PERSONAL_CP_CALC_EXP[self.id]
    if calc_exp == nil
      calc_exp = KGC::SkillCPSystem::CP_CALC_EXP
    end
    n = Integer(eval(calc_exp))
    n = [[n, cp_limit].min, KGC::SkillCPSystem::CP_MIN].max
    n += maxcp_plus + maxcp_plus_equip
    return [[n, revised_cp_limit].min, KGC::SkillCPSystem::REVISED_CP_MIN].max
  end
  #--------------------------------------------------------------------------
  # ○ CP 取得
  #--------------------------------------------------------------------------
  def cp
    return [maxcp - consumed_cp, 0].max
  end
  #--------------------------------------------------------------------------
  # ○ CP 消費量取得
  #--------------------------------------------------------------------------
  def consumed_cp
    n = 0
    battle_skills.compact.each { |skill| n += skill.cp_cost }
    return n
  end
  #--------------------------------------------------------------------------
  # ○ CP 上限取得
  #--------------------------------------------------------------------------
  def cp_limit
    return KGC::SkillCPSystem::CP_MAX
  end
  #--------------------------------------------------------------------------
  # ○ 補正後の CP 上限取得
  #--------------------------------------------------------------------------
  def revised_cp_limit
    return KGC::SkillCPSystem::REVISED_CP_MAX
  end
  #--------------------------------------------------------------------------
  # ○ MaxCP 補正値取得
  #--------------------------------------------------------------------------
  def maxcp_plus
    if @maxcp_plus == nil
      if @own_cp != nil
        @maxcp_plus = @own_cp
        @own_cp = nil
      else
        @maxcp_plus = 0
      end
    end
    return @maxcp_plus
  end
  #--------------------------------------------------------------------------
  # ○ 装備品による MaxCP 補正値取得
  #--------------------------------------------------------------------------
  def maxcp_plus_equip
    n = 0
    equips.compact.each { |item| n += item.maxcp_plus }
    return n
  end
  #--------------------------------------------------------------------------
  # ● スキル取得
  #--------------------------------------------------------------------------
  alias skills_KGC_SkillCPSystem skills
  def skills
    return (skill_cp_restrict? ? restricted_skills : skills_KGC_SkillCPSystem)
  end
  #--------------------------------------------------------------------------
  # ○ スキルを制限するか
  #--------------------------------------------------------------------------
  def skill_cp_restrict?
    if $game_temp.in_battle
      # 戦闘テストでないか、戦闘テストでも制限する場合
      return true unless $BTEST && KGC::SkillCPSystem::DISABLE_IN_BATTLETEST
    end

    return false
  end
  #--------------------------------------------------------------------------
  # ○ スキルを制限
  #--------------------------------------------------------------------------
  def restricted_skills
    result = all_skills
    result.each_with_index { |skill, i|
      # 消費 CP > 0 のスキルを除外
      if !KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0
        result = nil
      end
      # パッシブスキルを除外
      if $imported["PassiveSkill"] && KGC::SkillCPSystem::PASSIVE_NEED_TO_SET
        if skill.passive &&
            (!KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0)
          result = nil
        end
      end
    }
    result.compact!
    # 戦闘スキルを追加
    result |= battle_skills
    result.sort! { |a, b| a.id <=> b.id }
    return result
  end
  #--------------------------------------------------------------------------
  # ○ 全スキル取得
  #--------------------------------------------------------------------------
  def all_skills
    # 一時的に非戦闘中にする
    last_in_battle = $game_temp.in_battle
    $game_temp.in_battle = false

    result = skills_KGC_SkillCPSystem
    if $imported["EquipLearnSkill"]
      result |= (equipment_skills | full_ap_skills)
      result.sort! { |a, b| a.id <=> b.id }
    end

    # 戦闘中フラグを戻す
    $game_temp.in_battle = last_in_battle

    return result
  end
  #--------------------------------------------------------------------------
  # ○ 登録スキル最大数取得
  #--------------------------------------------------------------------------
  def battle_skill_max
    @battle_skill_max = -1 if @battle_skill_max == nil
    n = (@battle_skill_max < 0 ?
      KGC::SkillCPSystem::MAX_SKILLS : @battle_skill_max)
    n += equipment_battle_skill_max_plus
    return [n, 0].max
  end
  #--------------------------------------------------------------------------
  # ○ 装備品による登録スキル数補正
  #--------------------------------------------------------------------------
  def equipment_battle_skill_max_plus
    n = 0
    equips.compact.each { |item| n += item.battle_skill_max_plus }
    return n
  end
  #--------------------------------------------------------------------------
  # ○ 登録スキル最大数設定
  #--------------------------------------------------------------------------
  def battle_skill_max=(value)
    @battle_skill_max = value
    if @battle_skills == nil
      @battle_skills = []
    else
      @battle_skills = @battle_skills[0...value]
    end
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキル ID 取得
  #--------------------------------------------------------------------------
  def battle_skill_ids
    @battle_skills = [] if @battle_skills == nil
    return @battle_skills
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキル取得
  #--------------------------------------------------------------------------
  def battle_skills
    result = []
    battle_skill_ids.each { |i|
      next if i == nil           # 無効なスキルは無視
      result << $data_skills
    }
    return result
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキル登録
  #     index : 位置
  #     skill : スキル (nil で解除)
  #--------------------------------------------------------------------------
  def set_battle_skill(index, skill)
    if skill == nil
      @battle_skills[index] = nil
    else
      return unless skill.is_a?(RPG::Skill)  # スキル以外
      return if cp < skill.cp_cost           # CP 不足
      return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0

      @battle_skills[index] = skill.id
    end
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキル追加登録
  #     skill : スキル
  #--------------------------------------------------------------------------
  def add_battle_skill(skill)
    return unless skill.is_a?(RPG::Skill)  # スキル以外
    skills = battle_skill_ids
    return if skills.include?(skill.id)    # 登録済み
    return if cp < skill.cp_cost           # CP 不足
    return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0

    battle_skill_max.times { |i|
      # 空きがあれば登録
      if skills == nil
        set_battle_skill(i, skill)
        break
      end
    }
    restore_battle_skill
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキル解除
  #     index : 位置
  #--------------------------------------------------------------------------
  def remove_battle_skill(index)
    @battle_skills[index] = nil
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキル全解除
  #--------------------------------------------------------------------------
  def clear_battle_skill
    @battle_skills = []
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキルセット可否判定
  #     index : 位置
  #     skill : スキル
  #--------------------------------------------------------------------------
  def battle_skill_settable?(index, skill)
    return false if battle_skill_max <= index  # 範囲外
    return true  if skill == nil               # nil は解除なので OK

    return false if battle_skill_ids.include?(skill.id)  # セット済み

    skill_id = battle_skill_ids[index]
    curr_skill = (skill_id != nil ? $data_skills[skill_id] : nil)
    offset = (curr_skill != nil ? curr_skill.cp_cost : 0)
    return false if self.cp < (skill.cp_cost - offset)  # CP 不足

    return true
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキルを修復
  #--------------------------------------------------------------------------
  def restore_battle_skill
    result = battle_skill_ids.clone
    usable_skills = all_skills

    result.each_with_index { |n, i|
      next if n == nil
      # 未修得の場合は解除
      if (usable_skills.find { |s| s.id == n }) == nil
        result = nil
      end
    }
    @battle_skills = result[0...battle_skill_max]
    # CP 不足のスキルを下から順に外す
    (battle_skill_max - 1).downto(0) { |i|
      @battle_skills = nil if maxcp - consumed_cp < 0
    }
  end
  #--------------------------------------------------------------------------
  # ● 装備の変更 (オブジェクトで指定)
  #     equip_type : 装備部位 (0..4)
  #     item       : 武器 or 防具 (nil なら装備解除)
  #     test       : テストフラグ (戦闘テスト、または装備画面での一時装備)
  #--------------------------------------------------------------------------
  alias change_equip_KGC_SkillCPSystem change_equip
  def change_equip(equip_type, item, test = false)
    change_equip_KGC_SkillCPSystem(equip_type, item, test)

    unless test
      restore_battle_skill
      restore_passive_rev if $imported["PassiveSkill"]
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備の破棄
  #     item : 破棄する武器 or 防具
  #    武器/防具の増減で「装備品も含める」のとき使用する。
  #--------------------------------------------------------------------------
  alias discard_equip_KGC_SkillCPSystem discard_equip
  def discard_equip(item)
    discard_equip_KGC_SkillCPSystem(item)

    restore_battle_skill
    restore_passive_rev if $imported["PassiveSkill"]
  end
  #--------------------------------------------------------------------------
  # ● 経験値の変更
  #     exp  : 新しい経験値
  #     show : レベルアップ表示フラグ
  #--------------------------------------------------------------------------
  alias change_exp_KGC_SkillCPSystem change_exp
  def change_exp(exp, show)
    # 習得したスキルを表示するため、戦闘中フラグを一時的に解除
    last_in_battle = $game_temp.in_battle
    $game_temp.in_battle = false

    change_exp_KGC_SkillCPSystem(exp, show)

    $game_temp.in_battle = last_in_battle
  end

  if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
  #--------------------------------------------------------------------------
  # ● スキルを覚える
  #     skill_id : スキル ID
  #--------------------------------------------------------------------------
  alias learn_skill_KGC_SkillCPSystem learn_skill
  def learn_skill(skill_id)
    learn_skill_KGC_SkillCPSystem(skill_id)

    add_battle_skill($data_skills[skill_id])
  end
  end  # <- if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL

  #--------------------------------------------------------------------------
  # ● スキルを忘れる
  #     skill_id : スキル ID
  #--------------------------------------------------------------------------
  alias forget_skill_KGC_SkillCPSystem forget_skill
  def forget_skill(skill_id)
    # 忘れるスキルを戦闘用スキルから削除
    battle_skill_ids.each_with_index { |s, i|
      remove_battle_skill(i) if s == skill_id
    }

    forget_skill_KGC_SkillCPSystem(skill_id)
  end
  #--------------------------------------------------------------------------
  # ○ 戦闘用スキルセット済み判定
  #     skill : スキル
  #--------------------------------------------------------------------------
  def battle_skill_set?(skill)
    return false unless skill.is_a?(RPG::Skill)  # スキル以外

    return battle_skill_ids.include?(skill.id)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ○ CP の文字色を取得
  #     actor : アクター
  #--------------------------------------------------------------------------
  def cp_color(actor)
    return knockout_color if actor.maxcp > 0 && actor.cp == 0
    return normal_color
  end
  #--------------------------------------------------------------------------
  # ○ CP ゲージの色 1 の取得
  #--------------------------------------------------------------------------
  def cp_gauge_color1
    color = KGC::SkillCPSystem::GAUGE_START_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ○ CP ゲージの色 2 の取得
  #--------------------------------------------------------------------------
  def cp_gauge_color2
    color = KGC::SkillCPSystem::GAUGE_END_COLOR
    return (color.is_a?(Integer) ? text_color(color) : color)
  end
  #--------------------------------------------------------------------------
  # ○ CP の描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #     width : 幅
  #--------------------------------------------------------------------------
  def draw_actor_cp(actor, x, y, width = 120)
    draw_actor_cp_gauge(actor, x, y, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 30, WLH, Vocab::cp_a)
    self.contents.font.color = cp_color(actor)
    xr = x + width
    if width < 120
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.cp, 2)
    else
      self.contents.draw_text(xr - 90, y, 40, WLH, actor.cp, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
      self.contents.draw_text(xr - 40, y, 40, WLH, actor.maxcp, 2)
    end
    self.contents.font.color = normal_color
  end
  #--------------------------------------------------------------------------
  # ○ CP ゲージの描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #     width : 幅
  #--------------------------------------------------------------------------
  def draw_actor_cp_gauge(actor, x, y, width = 120)
    gw = width * actor.cp / [actor.maxcp, 1].max
    gc1 = cp_gauge_color1
    gc2 = cp_gauge_color2
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Command
#==============================================================================

class Window_Command < Window_Selectable
  unless method_defined?(:add_command)
  #--------------------------------------------------------------------------
  # ○ コマンドを追加
  #    追加した位置を返す
  #--------------------------------------------------------------------------
  def add_command(command)
    @commands << command
    @item_max = @commands.size
    item_index = @item_max - 1
    refresh_command
    draw_item(item_index)
    return item_index
  end
  #--------------------------------------------------------------------------
  # ○ コマンドをリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_command
    buf = self.contents.clone
    self.height = [self.height, row_max * WLH + 32].max
    create_contents
    self.contents.blt(0, 0, buf, buf.rect)
    buf.dispose
  end
  #--------------------------------------------------------------------------
  # ○ コマンドを挿入
  #--------------------------------------------------------------------------
  def insert_command(index, command)
    @commands.insert(index, command)
    @item_max = @commands.size
    refresh_command
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ コマンドを削除
  #--------------------------------------------------------------------------
  def remove_command(command)
    @commands.delete(command)
    @item_max = @commands.size
    refresh
  end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_Status
#==============================================================================

if KGC::SkillCPSystem::SHOW_STATUS_CP
class Window_Status < Window_Base
  #--------------------------------------------------------------------------
  # ● 基本情報の描画
  #     x : 描画先 X 座標
  #     y : 描画先 Y 座標
  #--------------------------------------------------------------------------
  alias draw_basic_info_KGC_SkillCPSystem draw_basic_info
  def draw_basic_info(x, y)
    draw_basic_info_KGC_SkillCPSystem(x, y)

    draw_actor_cp(@actor, x, y + WLH * 4)
  end
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_BattleSkillStatus
#------------------------------------------------------------------------------
#   戦闘スキル設定画面で、設定者のステータスを表示するウィンドウです。
#==============================================================================

class Window_BattleSkillStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x     : ウィンドウの X 座標
  #     y     : ウィンドウの Y 座標
  #     actor : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, actor)
    super(x, y, Graphics.width, WLH + 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    draw_actor_level(@actor, 140, 0)
    draw_actor_cp(@actor, 240, 0)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_BattleSkillSlot
#------------------------------------------------------------------------------
#   戦闘スキル選択画面で、設定したスキルの一覧を表示するウィンドウです。
#==============================================================================

class Window_BattleSkillSlot < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x      : ウィンドウの X 座標
  #     y      : ウィンドウの Y 座標
  #     width  : ウィンドウの幅
  #     height : ウィンドウの高さ
  #     actor  : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height, actor)
    super(x, y, width, height)
    @actor = actor
    self.index = 0
    self.active = false
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ スキルの取得
  #--------------------------------------------------------------------------
  def skill
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @data = []
    skill_ids = @actor.battle_skill_ids
    @actor.battle_skill_max.times { |i|
      if skill_ids != nil
        @data << $data_skills[skill_ids]
      else
        @data << nil
      end
    }
    @item_max = @data.size
    create_contents
    @item_max.times { |i| draw_item(i) }
  end
  #--------------------------------------------------------------------------
  # ○ 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      draw_item_name(skill, rect.x, rect.y)
      self.contents.draw_text(rect, skill.cp_cost, 2)
    else
      self.contents.draw_text(rect, KGC::SkillCPSystem::BLANK_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソルを 1 ページ後ろに移動
  #--------------------------------------------------------------------------
  def cursor_pagedown
    return if Input.repeat?(Input::R)
    super
  end
  #--------------------------------------------------------------------------
  # ● カーソルを 1 ページ前に移動
  #--------------------------------------------------------------------------
  def cursor_pageup
    return if Input.repeat?(Input::L)
    super
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active

    if Input.repeat?(Input::RIGHT)
      Sound.play_cursor
      cursor_pagedown
    elsif Input.repeat?(Input::LEFT)
      Sound.play_cursor
      cursor_pageup
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(skill == nil ? "" : skill.description)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Window_BattleSkillList
#------------------------------------------------------------------------------
#   戦闘スキル選択画面で、設定できるスキルの一覧を表示するウィンドウです。
#==============================================================================

class Window_BattleSkillList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :slot_index               # スロット番号
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     x      : ウィンドウの X 座標
  #     y      : ウィンドウの Y 座標
  #     width  : ウィンドウの幅
  #     height : ウィンドウの高さ
  #     actor  : アクター
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height, actor)
    super(x, y, width, height)
    @actor = actor
    @slot_index = 0
    self.index = 0
    self.active = false
    refresh
  end
  #--------------------------------------------------------------------------
  # ○ スキルの取得
  #--------------------------------------------------------------------------
  def skill
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @data = [nil]
    # 選択可能なスキルのみを取得
    @actor.all_skills.each { |skill|
      @data.push(skill) if selectable?(skill)
    }

    @item_max = @data.size
    create_contents
    @item_max.times { |i| draw_item(i) }
  end
  #--------------------------------------------------------------------------
  # ○ スキル選択可否判定
  #     skill : スキル
  #--------------------------------------------------------------------------
  def selectable?(skill)
    return false if skill == nil

    # 消費 CP 0 なら常に使用可能な場合
    if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
      return false
    end
    # 戦闘時に使用可能ならOK
    return true if skill.battle_ok?
    # 使用不可でもセット可能な場合
    if KGC::SkillCPSystem::SHOW_UNUSABLE_SKILL && skill.occasion == 3
      return true
    end

    return false
  end
  #--------------------------------------------------------------------------
  # ○ 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    if skill != nil
      rect.width -= 4
      enabled = @actor.battle_skill_settable?(@slot_index, skill)
      draw_item_name(skill, rect.x, rect.y, enabled)
      self.contents.draw_text(rect, skill.cp_cost, 2)
    else
      self.contents.draw_text(rect, KGC::SkillCPSystem::RELEASE_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    return unless self.active

    if Input.repeat?(Input::RIGHT)
      cursor_pagedown
    elsif Input.repeat?(Input::LEFT)
      cursor_pageup
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(skill == nil ? "" : skill.description)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Map
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 画面切り替えの実行
  #--------------------------------------------------------------------------
  alias update_scene_change_KGC_SkillCPSystem update_scene_change
  def update_scene_change
    return if $game_player.moving?    # プレイヤーの移動中?

    if $game_temp.next_scene == :set_battle_skill
      call_set_battle_skill
      return
    end

    update_scene_change_KGC_SkillCPSystem
  end
  #--------------------------------------------------------------------------
  # ○ スキル設定画面への切り替え
  #--------------------------------------------------------------------------
  def call_set_battle_skill
    $game_temp.next_scene = nil
    $scene = Scene_SetBattleSkill.new(
      $game_temp.next_scene_actor_index,
      0,
      Scene_SetBattleSkill::HOST_MAP)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Menu
#==============================================================================

class Scene_Menu < Scene_Base
  if KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND
  #--------------------------------------------------------------------------
  # ● コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias create_command_window_KGC_SkillCPSystem create_command_window
  def create_command_window
    create_command_window_KGC_SkillCPSystem

    return if $imported["CustomMenuCommand"]

    @__command_set_battle_skill_index =
      @command_window.add_command(Vocab.set_battle_skill)
    if @command_window.oy > 0
      @command_window.oy -= Window_Base::WLH
    end
    @command_window.index = @menu_index
  end
  end
  #--------------------------------------------------------------------------
  # ● コマンド選択の更新
  #--------------------------------------------------------------------------
  alias update_command_selection_KGC_SkillCPSystem update_command_selection
  def update_command_selection
    call_set_battle_skill_flag = false
    if Input.trigger?(Input::C)
      case @command_window.index
      when @__command_set_battle_skill_index  # スキル設定
        call_set_battle_skill_flag = true
      end
    end

    # スキル設定画面に移行
    if call_set_battle_skill_flag
      if $game_party.members.size == 0
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      start_actor_selection
      return
    end

    update_command_selection_KGC_SkillCPSystem
  end
  #--------------------------------------------------------------------------
  # ● アクター選択の更新
  #--------------------------------------------------------------------------
  alias update_actor_selection_KGC_SkillCPSystem update_actor_selection
  def update_actor_selection
    if Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when @__command_set_battle_skill_index  # スキル設定
        $scene = Scene_SetBattleSkill.new(
          @status_window.index,
          @__command_set_battle_skill_index,
          Scene_SetBattleSkill::HOST_MENU)
        return
      end
    end

    update_actor_selection_KGC_SkillCPSystem
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ Scene_SetBattleSkill
#------------------------------------------------------------------------------
#   戦闘スキル設定画面の処理を行うクラスです。
#==============================================================================

class Scene_SetBattleSkill < Scene_Base
  #--------------------------------------------------------------------------
  # ○ 定数
  #--------------------------------------------------------------------------
  HOST_MENU   = 0  # 呼び出し元 : メニュー
  HOST_MAP    = 1  # 呼び出し元 : マップ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     actor_index : アクターインデックス
  #     menu_index  : コマンドのカーソル初期位置
  #     host_scene  : 呼び出し元 (0..メニュー  1..マップ)
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, menu_index = 0, host_scene = HOST_MENU)
    @actor_index = actor_index
    @menu_index = menu_index
    @host_scene = host_scene
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background

    @actor = $game_party.members[@actor_index]
    create_windows
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ作成
  #--------------------------------------------------------------------------
  def create_windows
    @help_window = Window_Help.new
    if $imported["HelpExtension"]
      @help_window.row_max = KGC::HelpExtension::ROW_MAX
    end

    dy = @help_window.height
    @status_window = Window_BattleSkillStatus.new(0, dy, @actor)

    dy += @status_window.height
    @slot_window = Window_BattleSkillSlot.new(
      0,
      dy,
      Graphics.width / 2,
      Graphics.height - dy,
      @actor)
    @slot_window.help_window = @help_window
    @slot_window.active = true

    @list_window = Window_BattleSkillList.new(
      Graphics.width - @slot_window.width,
      dy,
      Graphics.width - @slot_window.width,
      Graphics.height - dy,
      @actor)
    @list_window.help_window = @help_window
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @help_window.dispose
    @status_window.dispose
    @slot_window.dispose
    @list_window.dispose
  end
  #--------------------------------------------------------------------------
  # ○ 元の画面へ戻る
  #--------------------------------------------------------------------------
  def return_scene
    case @host_scene
    when HOST_MENU
      $scene = Scene_Menu.new(@menu_index)
    when HOST_MAP
      $scene = Scene_Map.new
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    update_window
    if @slot_window.active
      update_slot
    elsif @list_window.active
      update_list
    end
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ更新
  #--------------------------------------------------------------------------
  def update_window
    @help_window.update
    @status_window.update
    @slot_window.update
    @list_window.update
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ再描画
  #--------------------------------------------------------------------------
  def refresh_window
    @status_window.refresh
    @slot_window.refresh
    @list_window.refresh
  end
  #--------------------------------------------------------------------------
  # ○ 次のアクターの画面に切り替え
  #--------------------------------------------------------------------------
  def next_actor
    @actor_index += 1
    @actor_index %= $game_party.members.size
    $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  end
  #--------------------------------------------------------------------------
  # ○ 前のアクターの画面に切り替え
  #--------------------------------------------------------------------------
  def prev_actor
    @actor_index += $game_party.members.size - 1
    @actor_index %= $game_party.members.size
    $scene = Scene_SetBattleSkill.new(@actor_index, @menu_index, @host_scene)
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (スロットウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_slot
    # 選択項目が変化した場合
    if @last_slot_index != @slot_window.index
      @list_window.slot_index = @slot_window.index
      @list_window.refresh
      @last_slot_index = @slot_window.index
    end

    if Input.trigger?(Input::A)
      Sound.play_decision
      # 選択しているスキルを外す
      @actor.remove_battle_skill(@slot_window.index)
      refresh_window
    elsif Input.trigger?(Input::B)
      Sound.play_cancel
      return_scene
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      # リストウィンドウに切り替え
      @slot_window.active = false
      @list_window.active = true
    elsif Input.trigger?(Input::R)
      Sound.play_cursor
      next_actor
    elsif Input.trigger?(Input::L)
      Sound.play_cursor
      prev_actor
    end
  end
  #--------------------------------------------------------------------------
  # ○ フレーム更新 (リストウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_list
    if Input.trigger?(Input::B)
      Sound.play_cancel
      # スロットウィンドウに切り替え
      @slot_window.active = true
      @list_window.active = false
    elsif Input.trigger?(Input::C)
      skill = @list_window.skill
      # セットできない場合
      unless @actor.battle_skill_settable?(@slot_window.index, skill)
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      set_skill(@slot_window.index, skill)
      # スロットウィンドウに切り替え
      @slot_window.active = true
      @list_window.active = false
    end
  end
  #--------------------------------------------------------------------------
  # ○ スキル設定
  #     index : 設定する場所
  #     skill : 設定するスキル
  #--------------------------------------------------------------------------
  def set_skill(index, skill)
    @actor.remove_battle_skill(index)
    if skill != nil
      @actor.set_battle_skill(index, skill)
    end
    refresh_window
  end
end

不是有意的,代码发不了
[
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
518 小时
注册时间
2010-6-16
帖子
1073
4
发表于 2011-2-18 20:16:28 | 只看该作者
KGC CP.rar (8.33 KB, 下载次数: 94)
字多隐蔽,放在附件里了~
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
146 小时
注册时间
2009-8-2
帖子
34
5
发表于 2013-5-10 08:10:24 | 只看该作者
undefinded UsableItem 283行

评分

参与人数 1星屑 -100 收起 理由
怪蜀黍 -100 挖古坟重罚

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 01:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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