Project1

标题: 关于技能消耗改造的 [打印本页]

作者: shinliwei    时间: 2008-8-24 07:07
标题: 关于技能消耗改造的
有个技能消费改造的脚本,使用技能时默认都是消耗MP,用了该脚本就可以设置消耗HP.
但是在游戏里 查看技能时 技能后面 只能显示消耗的MP数值,就是好多技能后面都显示是0
这个怎么可以改下,把 消耗 HP MP 和 无消耗的都能分出来呢? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: shinliwei    时间: 2008-8-24 07:13
比如 1号技能要消耗10HP,就把后面改成-10HP, 2号技能消耗10MP 就改个-10MP
3号技能无消耗 就 显示--   4号技能是个被动技能 就什么也不显示了
作者: 雪流星    时间: 2008-8-24 07:28
补充问题的时候请直接编辑帖子,不要连帖...
作者: drgdrg    时间: 2008-8-24 19:16
请给出你说的那个脚本。。。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: shinliwei    时间: 2008-8-25 02:00

  1. #==============================================================================
  2. #             本汉化脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  5. #_/  
  6. #
  7. #                ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
  8. #
  9. #
  10. #_/                   ◇ Last update : 2008/02/06 ◇
  11. #
  12. #原脚本来源:http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/techlist_vx.html
  13. #
  14. #
  15. #                            汉化:CHAR工作室
  16. #_/----------------------------------------------------------------------------
  17. #_/  
  18. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  19. #
  20. #功能介绍:
  21. #
  22. #HP消费:使用特定的技能时消耗HP
  23. #
  24. #MP比例消费:让特定按照一定比例来消耗MP,而非消耗固定值
  25. #
  26. #消费MP比例伤害:让特定技能的伤害数值变成跟该技能的MP消耗量相关联
  27. #               
  28. #
  29. #-----------------------------------------------------------------------------
  30. #
  31. #—————————————————使用方法——————————————————
  32. #
  33. #一、HP消费:  
  34. #
  35. #    在特定技能的备注中加入括弧和文字:<HP消费>
  36. #
  37. #    效果:使用该技能时将消费HP,而且会在技能消耗值前面表示出来
  38. #
  39. #
  40. #
  41. #
  42. #二、MP比例消费:
  43. #
  44. #    01、残存MP比例消费
  45. #
  46. #    在特定技能的备注中加入括弧和文字:<MP比例消费>
  47. #   
  48. #    效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
  49. #          将消耗当前残存的MP的10%。
  50. #
  51. #    02、最大MP比例消费
  52. #
  53. #    在特定技能的备注中加入括弧和文字:<MAXMP比例消费>
  54. #
  55. #    效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
  56. #          将消费该角色最大MP的10%。
  57. #
  58. #
  59. #
  60. #三、消费MP比例伤害
  61. #
  62. #    在特定技能的备注中加入括弧和文字:<消费MP比例伤害>
  63. #
  64. #    效果:很囧的效果,技能的基本伤害值变为该技能所消耗MP数值的一定比例。
  65. #         
  66. #          比如,该技能在数据库中的MP消费量是40,基本伤害是500
  67. #          那么该技能的实际基本伤害将是所消费MP的500% = 200
  68. #   
  69. #
  70. #==============================================================================
  71. # ★ 脚本设定项目 ★
  72. #==============================================================================

  73. module KGC
  74. module MPCostAlter
  75.   # ◆ HP 为0场合下的设定
  76.   #  true  : HP 消费到0的时候,仍然能够继续使用相应技能
  77.   #  false : HP 消费到0的时候,无法继续使用相应技能
  78.   PERMIT_ZERO_HP = false
  79.   # ◆ HP 消費制限解除
  80.   #  true  : HP 不足的时候仍然能够使用HP消耗的技能,但是使用后角色死亡
  81.   #  false : HP 不足的时候无法使用HP消耗的技能。(通常)
  82.   RELEASE_HP_LIMIT = false
  83. end
  84. end

  85. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  86. $imported = {} if $imported == nil
  87. $imported["MPCostAlter"] = true

  88. module KGC::MPCostAlter
  89.   # 正規表現
  90.   module Regexp
  91.     # スキル
  92.     module Skill
  93.       # HP 消費
  94.       CONSUME_HP = /<(?:CONSUME_HP|HP消费)>/i
  95.       # MP 割合消費
  96.       MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MP比例消费)>/i
  97.       # 消費 MP 比例伤害
  98.       MP_PROPORTIONAL_DAMAGE =
  99.         /<(?:MP_PROPORTIONAL_DAMAGE|消费MP比例伤害)>/i
  100.     end
  101.   end
  102. end

  103. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  104. #==============================================================================
  105. # ■ RPG::Skill
  106. #==============================================================================

  107. class RPG::Skill < RPG::UsableItem
  108.   #--------------------------------------------------------------------------
  109.   # ○ MP 消費改造のキャッシュを生成
  110.   #--------------------------------------------------------------------------
  111.   def create_mp_cost_alter_cache
  112.     @__consume_hp = false
  113.     @__mp_cost_rate = false
  114.     @__max_mp_cost_rate = false
  115.     @__mp_proportional_damage = false

  116.     self.note.split(/[\r\n]+/).each { |prop|
  117.       case prop
  118.       when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP
  119.         # HP 消費
  120.         @__consume_hp = true
  121.       when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE
  122.         # MP 割合消費
  123.         @__mp_cost_rate = true
  124.         @__max_mp_cost_rate = ($1 != nil)
  125.       when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE
  126.         # 消費 MP 比例ダメージ
  127.         @__mp_proportional_damage = true
  128.       end
  129.     }
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ○ HP 消費
  133.   #--------------------------------------------------------------------------
  134.   def consume_hp
  135.     create_mp_cost_alter_cache if @__consume_hp == nil
  136.     return @__consume_hp
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ○ 消費 MP 割合
  140.   #--------------------------------------------------------------------------
  141.   def mp_cost_rate
  142.     create_mp_cost_alter_cache if @__mp_cost_rate == nil
  143.     return (@__mp_cost_rate ? self.mp_cost : -1)
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ○ MaxMP 割合消費
  147.   #--------------------------------------------------------------------------
  148.   def max_mp_cost_rate
  149.     create_mp_cost_alter_cache if @__max_mp_cost_rate == nil
  150.     return @__max_mp_cost_rate
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ○ 消費 MP 比例ダメージ
  154.   #--------------------------------------------------------------------------
  155.   def mp_proportional_damage
  156.     create_mp_cost_alter_cache if @__mp_proportional_damage == nil
  157.     return @__mp_proportional_damage
  158.   end
  159. end

  160. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  161. #==============================================================================
  162. # ■ Game_Battler
  163. #==============================================================================

  164. class Game_Battler
  165.   #--------------------------------------------------------------------------
  166.   # ● 公開インスタンス変数
  167.   #--------------------------------------------------------------------------
  168.   attr_reader   :spend_cost               # 消費した HP/MP
  169.   #--------------------------------------------------------------------------
  170.   # ● オブジェクト初期化
  171.   #--------------------------------------------------------------------------
  172.   alias initialize_KGC_MPCostAlter initialize
  173.   def initialize
  174.     initialize_KGC_MPCostAlter

  175.     @spend_cost = 0
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● スキルの消費 MP 計算
  179.   #     skill : スキル
  180.   #--------------------------------------------------------------------------
  181.   alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost
  182.   def calc_mp_cost(skill)
  183.     return 0 if skill.consume_hp  # HP 消費

  184.     if skill.mp_cost_rate < 0                     # 割合消費でない
  185.       return calc_mp_cost_KGC_MPCostAlter(skill)
  186.     end

  187.     if skill.max_mp_cost_rate                    # MaxMP 割合消費
  188.       return calc_skill_cost_rate(skill, maxmp)
  189.     else                                         # MP 割合消費
  190.       return calc_skill_cost_rate(skill, mp)
  191.     end
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ○ スキルの割合消費量計算
  195.   #     skill : スキル
  196.   #     base  : 基準値
  197.   #--------------------------------------------------------------------------
  198.   def calc_skill_cost_rate(skill, base)
  199.     return base * skill.mp_cost_rate / 100
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ○ スキルの消費 HP 計算
  203.   #     skill : スキル
  204.   #--------------------------------------------------------------------------
  205.   def calc_hp_cost(skill)
  206.     return 0 unless skill.consume_hp  # HP 消費でない

  207.     if skill.mp_cost_rate < 0         # 割合消費でない
  208.       return skill.mp_cost
  209.     end

  210.     if skill.max_mp_cost_rate                    # MaxHP 割合消費
  211.       return calc_skill_cost_rate(skill, maxhp)
  212.     else                                         # HP 割合消費
  213.       return calc_skill_cost_rate(skill, hp)
  214.     end
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ○ 消費すべき HP/MP 量を保持
  218.   #     skill : スキル
  219.   #--------------------------------------------------------------------------
  220.   def set_spend_cost(skill)
  221.     @spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● スキルの使用可能判定
  225.   #     skill : スキル
  226.   #--------------------------------------------------------------------------
  227.   alias skill_can_use_KGC_MPCostAlter? skill_can_use?
  228.   def skill_can_use?(skill)
  229.     return false unless skill.is_a?(RPG::Skill)         # スキルでない
  230.     return false unless mp_cost_restrict_clear?(skill)  # MP 制限抵触
  231.     return false unless hp_cost_restrict_clear?(skill)  # HP 制限抵触

  232.     return skill_can_use_KGC_MPCostAlter?(skill)
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ○ MP 制限クリア判定
  236.   #     skill : スキル
  237.   #--------------------------------------------------------------------------
  238.   def mp_cost_restrict_clear?(skill)
  239.     return true if skill.consume_hp  # HP 消費

  240.     # 割合消費の場合は、消費量が 1 以上でないと使用不可
  241.     if skill.mp_cost_rate >= 0
  242.       return false if calc_mp_cost(skill) == 0
  243.     end

  244.     return calc_mp_cost(skill) <= mp
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ○ HP 制限クリア判定
  248.   #     skill : スキル
  249.   #--------------------------------------------------------------------------
  250.   def hp_cost_restrict_clear?(skill)
  251.     return true unless skill.consume_hp  # MP 消費

  252.     # 割合消費の場合は、消費量が 1 以上でないと使用不可
  253.     if skill.mp_cost_rate >= 0
  254.       return false if calc_hp_cost(skill) == 0
  255.     end

  256.     if KGC::MPCostAlter::RELEASE_HP_LIMIT
  257.       # 制限解除の場合は使用可能
  258.       return true
  259.     elsif KGC::MPCostAlter::PERMIT_ZERO_HP
  260.       # HP と同量まで消費可能
  261.       return calc_hp_cost(skill) <= hp
  262.     else
  263.       # 1 以上残る必要あり
  264.       return calc_hp_cost(skill) < hp
  265.     end
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● スキルまたはアイテムによるダメージ計算
  269.   #     user : スキルまたはアイテムの使用者
  270.   #     obj  : スキルまたはアイテム
  271.   #    結果は @hp_damage または @mp_damage に代入する。
  272.   #--------------------------------------------------------------------------
  273.   alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value
  274.   def make_obj_damage_value(user, obj)
  275.     # 消費 MP 比例ダメージでない場合
  276.     unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage
  277.       # 元の計算式を使用
  278.       make_obj_damage_value_KGC_MPCostAlter(user, obj)
  279.       return
  280.     end

  281.     damage = user.spend_cost * obj.base_damage / 100  # 基本ダメージ算出

  282.     damage *= elements_max_rate(obj.element_set)    # 属性修正
  283.     damage /= 100
  284.     damage = apply_variance(damage, obj.variance)   # 分散
  285.     damage = apply_guard(damage)                    # 防御修正
  286.     if obj.damage_to_mp  
  287.       @mp_damage = damage                           # MP にダメージ
  288.     else
  289.       @hp_damage = damage                           # HP にダメージ
  290.     end
  291.   end
  292. end

  293. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  294. #==============================================================================
  295. # ■ Window_Skill
  296. #==============================================================================

  297. class Window_Skill < Window_Selectable
  298.   #--------------------------------------------------------------------------
  299.   # ● 項目の描画
  300.   #     index : 項目番号
  301.   #--------------------------------------------------------------------------
  302.   def draw_item(index)
  303.     rect = item_rect(index)
  304.     self.contents.clear_rect(rect)
  305.     skill = @data[index]
  306.     if skill != nil
  307.       rect.width -= 4
  308.       enabled = @actor.skill_can_use?(skill)
  309.       draw_item_name(skill, rect.x, rect.y, enabled)

  310.       if skill.consume_hp
  311.         # HP 消費
  312.         text = sprintf("%s  %d", Vocab.hp_a, @actor.calc_hp_cost(skill))
  313.       else
  314.         # MP 消費
  315.         text = @actor.calc_mp_cost(skill).to_s
  316.       end
  317.       self.contents.draw_text(rect, text, 2)
  318.     end
  319.   end
  320. end

  321. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  322. #==============================================================================
  323. # ■ Scene_Skill
  324. #==============================================================================

  325. class Scene_Skill < Scene_Base
  326.   #--------------------------------------------------------------------------
  327.   # ● ターゲットの決定
  328.   #    効果なしの場合 (戦闘不能にポーションなど) ブザー SE を演奏。
  329.   #--------------------------------------------------------------------------
  330.   alias determine_target_KGC_MPCostAlter determine_target
  331.   def determine_target
  332.     @actor.set_spend_cost(@skill)  # 消費する HP/MP をセット

  333.     determine_target_KGC_MPCostAlter
  334.   end
  335.   #--------------------------------------------------------------------------
  336.   # ● スキルの使用 (味方対象以外の使用効果を適用)
  337.   #--------------------------------------------------------------------------
  338.   alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget
  339.   def use_skill_nontarget
  340.     @actor.hp -= @actor.calc_hp_cost(@skill)

  341.     use_skill_nontarget_KGC_MPCostAlter
  342.   end
  343. end

  344. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  345. #==============================================================================
  346. # ■ Scene_Battle
  347. #==============================================================================

  348. class Scene_Battle < Scene_Base
  349.   #--------------------------------------------------------------------------
  350.   # ● 戦闘行動の実行 : スキル
  351.   #--------------------------------------------------------------------------
  352.   alias execute_action_skill_KGC_MPCostAlter execute_action_skill
  353.   def execute_action_skill
  354.     skill = @active_battler.action.skill
  355.     @active_battler.set_spend_cost(skill)  # 消費する HP/MP をセット
  356.     if skill.consume_hp
  357.       hp_cost = [@active_battler.hp - 1,
  358.         @active_battler.spend_cost].min      # HP を 1 だけ残す
  359.       @active_battler.hp -= hp_cost
  360.     end

  361.     execute_action_skill_KGC_MPCostAlter

  362.     # 死亡するはずだった場合
  363.     if skill.consume_hp && hp_cost < @active_battler.spend_cost
  364.       @active_battler.hp = 0                 # HP を 0 にする
  365.       display_added_states(@active_battler)  # 死亡メッセージの表示
  366.     end
  367.   end
  368. end
复制代码


就是这个脚本
作者: shinliwei    时间: 2008-8-26 04:40
谁会改下?
作者: drgdrg    时间: 2008-8-26 04:44
  1. #==============================================================================
  2. #             本汉化脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  5. #_/  
  6. #
  7. #                ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
  8. #
  9. #
  10. #_/                   ◇ Last update : 2008/02/06 ◇
  11. #
  12. #原脚本来源:http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/techlist_vx.html
  13. #
  14. #
  15. #                            汉化:CHAR工作室
  16. #_/----------------------------------------------------------------------------
  17. #_/  
  18. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  19. #
  20. #功能介绍:
  21. #
  22. #HP消费:使用特定的技能时消耗HP
  23. #
  24. #MP比例消费:让特定按照一定比例来消耗MP,而非消耗固定值
  25. #
  26. #消费MP比例伤害:让特定技能的伤害数值变成跟该技能的MP消耗量相关联
  27. #               
  28. #
  29. #-----------------------------------------------------------------------------
  30. #
  31. #—————————————————使用方法——————————————————
  32. #
  33. #一、HP消费:  
  34. #
  35. #    在特定技能的备注中加入括弧和文字:<HP消费>
  36. #
  37. #    效果:使用该技能时将消费HP,而且会在技能消耗值前面表示出来
  38. #
  39. #
  40. #
  41. #
  42. #二、MP比例消费:
  43. #
  44. #    01、残存MP比例消费
  45. #
  46. #    在特定技能的备注中加入括弧和文字:<MP比例消费>
  47. #   
  48. #    效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
  49. #          将消耗当前残存的MP的10%。
  50. #
  51. #    02、最大MP比例消费
  52. #
  53. #    在特定技能的备注中加入括弧和文字:<MAXMP比例消费>
  54. #
  55. #    效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
  56. #          将消费该角色最大MP的10%。
  57. #
  58. #
  59. #
  60. #三、消费MP比例伤害
  61. #
  62. #    在特定技能的备注中加入括弧和文字:<消费MP比例伤害>
  63. #
  64. #    效果:很囧的效果,技能的基本伤害值变为该技能所消耗MP数值的一定比例。
  65. #         
  66. #          比如,该技能在数据库中的MP消费量是40,基本伤害是500
  67. #          那么该技能的实际基本伤害将是所消费MP的500% = 200
  68. #   
  69. #
  70. #==============================================================================
  71. # ★ 脚本设定项目 ★
  72. #==============================================================================

  73. module KGC
  74. module MPCostAlter
  75.   # ◆ HP 为0场合下的设定
  76.   #  true  : HP 消费到0的时候,仍然能够继续使用相应技能
  77.   #  false : HP 消费到0的时候,无法继续使用相应技能
  78.   PERMIT_ZERO_HP = false
  79.   # ◆ HP 消費制限解除
  80.   #  true  : HP 不足的时候仍然能够使用HP消耗的技能,但是使用后角色死亡
  81.   #  false : HP 不足的时候无法使用HP消耗的技能。(通常)
  82.   RELEASE_HP_LIMIT = false
  83. end
  84. end

  85. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  86. $imported = {} if $imported == nil
  87. $imported["MPCostAlter"] = true

  88. module KGC::MPCostAlter
  89.   # 正規表現
  90.   module Regexp
  91.     # スキル
  92.     module Skill
  93.       # HP 消費
  94.       CONSUME_HP = /<(?:CONSUME_HP|HP消费)>/i
  95.       # MP 割合消費
  96.       MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MP比例消费)>/i
  97.       # 消費 MP 比例伤害
  98.       MP_PROPORTIONAL_DAMAGE =
  99.         /<(?:MP_PROPORTIONAL_DAMAGE|消费MP比例伤害)>/i
  100.     end
  101.   end
  102. end

  103. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  104. #==============================================================================
  105. # ■ RPG::Skill
  106. #==============================================================================

  107. class RPG::Skill < RPG::UsableItem
  108.   #--------------------------------------------------------------------------
  109.   # ○ MP 消費改造のキャッシュを生成
  110.   #--------------------------------------------------------------------------
  111.   def create_mp_cost_alter_cache
  112.     @__consume_hp = false
  113.     @__mp_cost_rate = false
  114.     @__max_mp_cost_rate = false
  115.     @__mp_proportional_damage = false

  116.     self.note.split(/[\r\n]+/).each { |prop|
  117.       case prop
  118.       when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP
  119.         # HP 消費
  120.         @__consume_hp = true
  121.       when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE
  122.         # MP 割合消費
  123.         @__mp_cost_rate = true
  124.         @__max_mp_cost_rate = ($1 != nil)
  125.       when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE
  126.         # 消費 MP 比例ダメージ
  127.         @__mp_proportional_damage = true
  128.       end
  129.     }
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ○ HP 消費
  133.   #--------------------------------------------------------------------------
  134.   def consume_hp
  135.     create_mp_cost_alter_cache if @__consume_hp == nil
  136.     return @__consume_hp
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ○ 消費 MP 割合
  140.   #--------------------------------------------------------------------------
  141.   def mp_cost_rate
  142.     create_mp_cost_alter_cache if @__mp_cost_rate == nil
  143.     return (@__mp_cost_rate ? self.mp_cost : -1)
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ○ MaxMP 割合消費
  147.   #--------------------------------------------------------------------------
  148.   def max_mp_cost_rate
  149.     create_mp_cost_alter_cache if @__max_mp_cost_rate == nil
  150.     return @__max_mp_cost_rate
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ○ 消費 MP 比例ダメージ
  154.   #--------------------------------------------------------------------------
  155.   def mp_proportional_damage
  156.     create_mp_cost_alter_cache if @__mp_proportional_damage == nil
  157.     return @__mp_proportional_damage
  158.   end
  159. end

  160. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  161. #==============================================================================
  162. # ■ Game_Battler
  163. #==============================================================================

  164. class Game_Battler
  165.   #--------------------------------------------------------------------------
  166.   # ● 公開インスタンス変数
  167.   #--------------------------------------------------------------------------
  168.   attr_reader   :spend_cost               # 消費した HP/MP
  169.   #--------------------------------------------------------------------------
  170.   # ● オブジェクト初期化
  171.   #--------------------------------------------------------------------------
  172.   alias initialize_KGC_MPCostAlter initialize
  173.   def initialize
  174.     initialize_KGC_MPCostAlter

  175.     @spend_cost = 0
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● スキルの消費 MP 計算
  179.   #     skill : スキル
  180.   #--------------------------------------------------------------------------
  181.   alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost
  182.   def calc_mp_cost(skill)
  183.     return 0 if skill.consume_hp  # HP 消費

  184.     if skill.mp_cost_rate < 0                     # 割合消費でない
  185.       return calc_mp_cost_KGC_MPCostAlter(skill)
  186.     end

  187.     if skill.max_mp_cost_rate                    # MaxMP 割合消費
  188.       return calc_skill_cost_rate(skill, maxmp)
  189.     else                                         # MP 割合消費
  190.       return calc_skill_cost_rate(skill, mp)
  191.     end
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ○ スキルの割合消費量計算
  195.   #     skill : スキル
  196.   #     base  : 基準値
  197.   #--------------------------------------------------------------------------
  198.   def calc_skill_cost_rate(skill, base)
  199.     return base * skill.mp_cost_rate / 100
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ○ スキルの消費 HP 計算
  203.   #     skill : スキル
  204.   #--------------------------------------------------------------------------
  205.   def calc_hp_cost(skill)
  206.     return 0 unless skill.consume_hp  # HP 消費でない

  207.     if skill.mp_cost_rate < 0         # 割合消費でない
  208.       return skill.mp_cost
  209.     end

  210.     if skill.max_mp_cost_rate                    # MaxHP 割合消費
  211.       return calc_skill_cost_rate(skill, maxhp)
  212.     else                                         # HP 割合消費
  213.       return calc_skill_cost_rate(skill, hp)
  214.     end
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ○ 消費すべき HP/MP 量を保持
  218.   #     skill : スキル
  219.   #--------------------------------------------------------------------------
  220.   def set_spend_cost(skill)
  221.     @spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● スキルの使用可能判定
  225.   #     skill : スキル
  226.   #--------------------------------------------------------------------------
  227.   alias skill_can_use_KGC_MPCostAlter? skill_can_use?
  228.   def skill_can_use?(skill)
  229.     return false unless skill.is_a?(RPG::Skill)         # スキルでない
  230.     return false unless mp_cost_restrict_clear?(skill)  # MP 制限抵触
  231.     return false unless hp_cost_restrict_clear?(skill)  # HP 制限抵触

  232.     return skill_can_use_KGC_MPCostAlter?(skill)
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ○ MP 制限クリア判定
  236.   #     skill : スキル
  237.   #--------------------------------------------------------------------------
  238.   def mp_cost_restrict_clear?(skill)
  239.     return true if skill.consume_hp  # HP 消費

  240.     # 割合消費の場合は、消費量が 1 以上でないと使用不可
  241.     if skill.mp_cost_rate >= 0
  242.       return false if calc_mp_cost(skill) == 0
  243.     end

  244.     return calc_mp_cost(skill) <= mp
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ○ HP 制限クリア判定
  248.   #     skill : スキル
  249.   #--------------------------------------------------------------------------
  250.   def hp_cost_restrict_clear?(skill)
  251.     return true unless skill.consume_hp  # MP 消費

  252.     # 割合消費の場合は、消費量が 1 以上でないと使用不可
  253.     if skill.mp_cost_rate >= 0
  254.       return false if calc_hp_cost(skill) == 0
  255.     end

  256.     if KGC::MPCostAlter::RELEASE_HP_LIMIT
  257.       # 制限解除の場合は使用可能
  258.       return true
  259.     elsif KGC::MPCostAlter::PERMIT_ZERO_HP
  260.       # HP と同量まで消費可能
  261.       return calc_hp_cost(skill) <= hp
  262.     else
  263.       # 1 以上残る必要あり
  264.       return calc_hp_cost(skill) < hp
  265.     end
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● スキルまたはアイテムによるダメージ計算
  269.   #     user : スキルまたはアイテムの使用者
  270.   #     obj  : スキルまたはアイテム
  271.   #    結果は @hp_damage または @mp_damage に代入する。
  272.   #--------------------------------------------------------------------------
  273.   alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value
  274.   def make_obj_damage_value(user, obj)
  275.     # 消費 MP 比例ダメージでない場合
  276.     unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage
  277.       # 元の計算式を使用
  278.       make_obj_damage_value_KGC_MPCostAlter(user, obj)
  279.       return
  280.     end

  281.     damage = user.spend_cost * obj.base_damage / 100  # 基本ダメージ算出

  282.     damage *= elements_max_rate(obj.element_set)    # 属性修正
  283.     damage /= 100
  284.     damage = apply_variance(damage, obj.variance)   # 分散
  285.     damage = apply_guard(damage)                    # 防御修正
  286.     if obj.damage_to_mp  
  287.       @mp_damage = damage                           # MP にダメージ
  288.     else
  289.       @hp_damage = damage                           # HP にダメージ
  290.     end
  291.   end
  292. end

  293. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  294. #==============================================================================
  295. # ■ Window_Skill
  296. #==============================================================================

  297. class Window_Skill < Window_Selectable
  298.   #--------------------------------------------------------------------------
  299.   # ● 項目の描画
  300.   #     index : 項目番号
  301.   #--------------------------------------------------------------------------
  302.   def draw_item(index)
  303.     rect = item_rect(index)
  304.     self.contents.clear_rect(rect)
  305.     skill = @data[index]
  306.     if skill != nil
  307.       rect.width -= 4
  308.       enabled = @actor.skill_can_use?(skill)
  309.       draw_item_name(skill, rect.x, rect.y, enabled)

  310.       if skill.consume_hp
  311.         # HP 消費
  312.         text = "- " + @actor.calc_hp_cost(skill).to_s + " HP"
  313.       else
  314.         # MP 消費
  315.         if @actor.calc_mp_cost(skill) != 0
  316.           text =  "- " + @actor.calc_mp_cost(skill).to_s + " MP"
  317.         else
  318.           text = "--"
  319.         end
  320.       end
  321.       self.contents.draw_text(rect, text, 2)
  322.     end
  323.   end
  324. end

  325. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  326. #==============================================================================
  327. # ■ Scene_Skill
  328. #==============================================================================

  329. class Scene_Skill < Scene_Base
  330.   #--------------------------------------------------------------------------
  331.   # ● ターゲットの決定
  332.   #    効果なしの場合 (戦闘不能にポーションなど) ブザー SE を演奏。
  333.   #--------------------------------------------------------------------------
  334.   alias determine_target_KGC_MPCostAlter determine_target
  335.   def determine_target
  336.     @actor.set_spend_cost(@skill)  # 消費する HP/MP をセット

  337.     determine_target_KGC_MPCostAlter
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● スキルの使用 (味方対象以外の使用効果を適用)
  341.   #--------------------------------------------------------------------------
  342.   alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget
  343.   def use_skill_nontarget
  344.     @actor.hp -= @actor.calc_hp_cost(@skill)

  345.     use_skill_nontarget_KGC_MPCostAlter
  346.   end
  347. end

  348. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  349. #==============================================================================
  350. # ■ Scene_Battle
  351. #==============================================================================

  352. class Scene_Battle < Scene_Base
  353.   #--------------------------------------------------------------------------
  354.   # ● 戦闘行動の実行 : スキル
  355.   #--------------------------------------------------------------------------
  356.   alias execute_action_skill_KGC_MPCostAlter execute_action_skill
  357.   def execute_action_skill
  358.     skill = @active_battler.action.skill
  359.     @active_battler.set_spend_cost(skill)  # 消費する HP/MP をセット
  360.     if skill.consume_hp
  361.       hp_cost = [@active_battler.hp - 1,
  362.         @active_battler.spend_cost].min      # HP を 1 だけ残す
  363.       @active_battler.hp -= hp_cost
  364.     end

  365.     execute_action_skill_KGC_MPCostAlter

  366.     # 死亡するはずだった場合
  367.     if skill.consume_hp && hp_cost < @active_battler.spend_cost
  368.       @active_battler.hp = 0                 # HP を 0 にする
  369.       display_added_states(@active_battler)  # 死亡メッセージの表示
  370.     end
  371.   end
  372. end
复制代码


这样
- XX HP 、- XX MP 、--   都可以显示了应该,  

被动技能本身一定是灰色的就不用特别标识了吧。。。


作者: shinliwei    时间: 2008-8-27 03:26
被动技能也要把 0 给去掉
作者: shinliwei    时间: 2008-8-27 03:29
没有效果...  你测试了没?

作者: drgdrg    时间: 2008-8-27 04:41
没有效果是因为你还用了 《复杂技能分类脚本》,与之冲突了

好吧。。。。连技能分类脚本都给你改兼容下。。。。。


  1. module RPG
  2. class Skill
  3.    def description
  4.      description = @description.split(/@/)[0]
  5.      return description != nil ? description : ''
  6.    end
  7.    def desc
  8.      desc = @description.split(/@/)[1]
  9.      return desc != nil ? desc : "普通技能"
  10.    end
  11. end
  12. end

  13. class Liuliu_Window_SkillCommand < Window_Selectable
  14. attr_accessor :commands
  15.   def initialize(actor)
  16.   super(0, 0, 160, 216)
  17.   @commands = []
  18.    if $game_temp.in_battle
  19.      @actor = actor
  20.    else
  21.      @actor = $game_party.members[actor]
  22.    end
  23.   for skill in @actor.skills
  24.     push = true
  25.     for com in @commands
  26.       if com == skill.desc
  27.         push = false
  28.       end
  29.     end
  30.     if push == true
  31.       @commands.push(skill.desc)
  32.     end
  33.   end
  34.   if @commands == []
  35.     @commands.push("普通技能")
  36.   end      
  37.   @item_max = @commands.size
  38.   self.contents = Bitmap.new(width - 32, @item_max*32)
  39.   refresh
  40.   self.index = 0
  41. end

  42.   
  43. def refresh
  44.    self.contents.clear
  45.    for i in 0...@item_max
  46.      draw_item(i, normal_color)
  47.    end
  48. end

  49. def draw_item(index, color)
  50.    self.contents.font.color = color
  51.    y = index * WLH
  52.    self.contents.draw_text(4, y, 128, WLH, @commands[index])
  53. end

  54. def update_help
  55.    @help_window.set_text(@commands[self.index])
  56. end
  57. end


  58. class Liuliu_Window_SkillList < Window_Selectable

  59.   def initialize(actor)
  60.    super(160, 0, 384, 360)
  61.    @actor = actor
  62.    refresh
  63.    self.index = 0
  64.    if $game_temp.in_battle
  65.      self.y = 56
  66.      self.height = 232
  67.      self.back_opacity = 200
  68.    end
  69. end

  70. def skill
  71.    return @data[self.index]
  72. end

  73. def refresh
  74.    @data = []
  75. end

  76. def set_item(command)
  77.    refresh
  78.    for skill in @actor.skills
  79.      if skill != nil and skill.desc == command
  80.        @data.push(skill)
  81.      end
  82.    end
  83.    @item_max = @data.size
  84.    if @item_max > 0
  85.      self.contents = Bitmap.new(width - 32, row_max * 32)
  86.      self.contents.clear
  87.      for i in 0...@item_max
  88.        draw_item(i)
  89.      end
  90.    end
  91. end

  92.   def draw_item(index)
  93.     rect = item_rect(index)
  94.     self.contents.clear_rect(rect)
  95.     skill = @data[index]
  96.    
  97.     if skill != nil and  skill.occasion == 3    #被动技能
  98.       rect.width -= 4
  99.       enabled = @actor.skill_can_use?(skill)
  100.       draw_item_name(skill, rect.x, rect.y, enabled)
  101.     end
  102.    
  103.     if skill != nil and  skill.occasion != 3    #非被动技能
  104.       rect.width -= 4
  105.       enabled = @actor.skill_can_use?(skill)
  106.       draw_item_name(skill, rect.x, rect.y, enabled)

  107.       if skill.consume_hp
  108.         # HP 消費
  109.         text = "- " + @actor.calc_hp_cost(skill).to_s + " HP"
  110.       else
  111.         # MP 消費
  112.         if @actor.calc_mp_cost(skill) != 0
  113.           text =  "- " + @actor.calc_mp_cost(skill).to_s + " MP"
  114.         else
  115.           text = "--"
  116.         end
  117.       end
  118.       self.contents.draw_text(rect, text, 2)
  119.     end
  120.   end
  121.   

  122. def update_help
  123.    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  124. end
  125. end
  126. class Temp_Window_SkillStatus < Window_Base

  127. def initialize(actor)
  128.    super(0, 216, 160, 144)
  129.    self.contents = Bitmap.new(width - 32, height - 32)
  130.    @actor = actor
  131.    refresh
  132. end

  133. def refresh
  134.    self.contents.clear
  135.    draw_actor_name(@actor, 4, 0)
  136.    draw_actor_hp(@actor, 4, 32, 120)
  137.    draw_actor_mp(@actor, 4, 64, 120)
  138. end
  139. end

  140. class Temp_Window_Help < Window_Base
  141.   
  142.   def initialize
  143.     super(0, 360, 544, WLH + 32)
  144.   end

  145.   def set_text(text, align = 0)
  146.     if text != @text or align != @align
  147.       self.contents.clear
  148.       self.contents.font.color = normal_color
  149.       self.contents.draw_text(4, 0, self.width - 40, WLH , text, align)
  150.       @text = text
  151.       @align = align
  152.     end
  153.   end
  154. end

  155. class Temp_Window_MenuStatus < Window_Selectable

  156.   def initialize(x, y)
  157.     super(x, y, 288, 416)
  158.     refresh
  159.     self.active = false
  160.     self.index = -1
  161.   end

  162.   def refresh
  163.     self.contents.clear
  164.     @item_max = $game_party.members.size
  165.     for actor in $game_party.members
  166.       x = 8
  167.       y = actor.index * 96 + WLH / 2
  168.       draw_actor_name(actor, x, y)
  169.       draw_actor_class(actor, x + 120, y)
  170.       draw_actor_level(actor, x, y + WLH * 1)
  171.       draw_actor_state(actor, x, y + WLH * 2)
  172.       draw_actor_hp(actor, x + 120, y + WLH * 1)
  173.       draw_actor_mp(actor, x + 120, y + WLH * 2)
  174.     end
  175.   end

  176.   def update_cursor
  177.     if @index < 0               
  178.       self.cursor_rect.empty
  179.     elsif @index < @item_max  
  180.       self.cursor_rect.set(0, @index * 96, contents.width, 96)
  181.     elsif @index >= 100        
  182.       self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
  183.     else                       
  184.       self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
  185.     end
  186.   end
  187. end

  188. class Scene_Skill < Scene_Base

  189.   def initialize(actor_index = 0, equip_index = 0)
  190.     @actor_index = actor_index
  191.   end

  192.   def start
  193.     super
  194.     create_menu_background
  195.     @actor = $game_party.members[@actor_index]
  196.     @viewport = Viewport.new(0, 0, 544, 416)
  197.     @help_window = Temp_Window_Help.new
  198.     @status_window = Temp_Window_SkillStatus.new(@actor)
  199.     @itemcommand_window = Liuliu_Window_SkillCommand.new(@actor_index)
  200.     @command_index = @itemcommand_window.index
  201.     @skill_window = Liuliu_Window_SkillList.new($game_party.members[@actor_index])
  202.     @skill_window.help_window = @help_window
  203.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  204.     @target_window = Temp_Window_MenuStatus.new(96, 0)
  205.     @skill_window.active = false
  206.     hide_target_window
  207.   end

  208.   def terminate
  209.     super
  210.     dispose_menu_background
  211.     @help_window.dispose
  212.     @itemcommand_window.dispose
  213.     @status_window.dispose
  214.     @skill_window.dispose
  215.     @target_window.dispose
  216.   end

  217.   def return_scene
  218.     $scene = Scene_Menu.new(1)
  219.   end

  220.   def next_actor
  221.     @actor_index += 1
  222.     @actor_index %= $game_party.members.size
  223.     $scene = Scene_Skill.new(@actor_index)
  224.     @skill_window.active = false
  225.   end

  226.   def prev_actor
  227.     @actor_index += $game_party.members.size - 1
  228.     @actor_index %= $game_party.members.size
  229.     $scene = Scene_Skill.new(@actor_index)
  230.     @skill_window.active = false
  231.   end

  232.   def update
  233.     super
  234.     update_menu_background
  235.     @itemcommand_window.update
  236.     @help_window.update
  237.     @status_window.update
  238.     @skill_window.update
  239.     @target_window.update
  240.    if @command_index != @itemcommand_window.index
  241.      @command_index = @itemcommand_window.index
  242.      @skill_window.index = 0
  243.      @skill_window.set_item(@itemcommand_window.commands[@command_index])
  244.    end
  245.    if @itemcommand_window.active
  246.      update_itemcommand
  247.    elsif @skill_window.active
  248.      update_itemlist
  249.    elsif @target_window.active
  250.      update_target
  251.    end
  252.   end

  253. def update_itemcommand
  254.    if Input.trigger?(Input::B)
  255.      Sound.play_cancel
  256.      return_scene
  257.    elsif Input.trigger?(Input::C)
  258.      Sound.play_decision
  259.      @itemcommand_window.active = false
  260.      @skill_window.active = true
  261.      @skill_window.index = 0
  262.    elsif Input.trigger?(Input::R)
  263.       Sound.play_cursor
  264.       next_actor
  265.    elsif Input.trigger?(Input::L)
  266.       Sound.play_cursor
  267.       prev_actor
  268.    end
  269. end

  270.   def update_itemlist
  271.     if Input.trigger?(Input::B)
  272.       Sound.play_cancel
  273.       @itemcommand_window.active = true
  274.       @skill_window.active = false
  275.       @skill_window.index = 0
  276.     elsif Input.trigger?(Input::C)
  277.       @skill = @skill_window.skill
  278.       if @skill != nil
  279.         @actor.last_skill_id = @skill.id
  280.       end
  281.       if @actor.skill_can_use?(@skill)
  282.         Sound.play_decision
  283.         determine_skill
  284.       else
  285.         Sound.play_buzzer
  286.       end
  287.     end
  288.   end

  289.   def determine_skill
  290.     if @skill.for_friend?
  291.       show_target_window(@skill_window.index % 2 == 0)
  292.       if @skill.for_all?
  293.         @target_window.index = 99
  294.       elsif @skill.for_user?
  295.         @target_window.index = @actor_index + 100
  296.       else
  297.         if $game_party.last_target_index < @target_window.item_max
  298.           @target_window.index = $game_party.last_target_index
  299.         else
  300.           @target_window.index = 0
  301.         end
  302.       end
  303.     else
  304.       use_skill_nontarget
  305.     end
  306.   end

  307.   def update_target
  308.     if Input.trigger?(Input::B)
  309.       Sound.play_cancel
  310.       hide_target_window
  311.       @skill_window.active = true
  312.     elsif Input.trigger?(Input::C)
  313.       if not @actor.skill_can_use?(@skill)
  314.         Sound.play_buzzer
  315.       else
  316.         determine_target
  317.       end
  318.     end
  319.   end

  320.   def determine_target
  321.     used = false
  322.     if @skill.for_all?
  323.       for target in $game_party.members
  324.         target.skill_effect(@actor, @skill)
  325.         used = true unless target.skipped
  326.       end
  327.     elsif @skill.for_user?
  328.       target = $game_party.members[@target_window.index - 100]
  329.       target.skill_effect(@actor, @skill)
  330.       used = true unless target.skipped
  331.     else
  332.       $game_party.last_target_index = @target_window.index
  333.       target = $game_party.members[@target_window.index]
  334.       target.skill_effect(@actor, @skill)
  335.       used = true unless target.skipped
  336.     end
  337.     if used
  338.       use_skill_nontarget
  339.     else
  340.       Sound.play_buzzer
  341.     end
  342.   end

  343.   def show_target_window(right)
  344.     @skill_window.active = false
  345.     width_remain = 544 - @target_window.width
  346.     @target_window.x = right ? width_remain : 0
  347.     @target_window.visible = true
  348.     @target_window.active = true
  349.     if right
  350.       @viewport.rect.set(0, 0, width_remain, 416)
  351.       @viewport.ox = 0
  352.     else
  353.       @viewport.rect.set(@target_window.width, 0, width_remain, 416)
  354.       @viewport.ox = @target_window.width
  355.     end
  356.   end

  357.   def hide_target_window
  358.     @skill_window.refresh
  359.     @target_window.visible = false
  360.     @target_window.active = false
  361.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  362.     @viewport.rect.set(0, 0, 544, 416)
  363.     @viewport.ox = 0
  364.   end

  365.   def use_skill_nontarget
  366.     Sound.play_use_skill
  367.     @actor.mp -= @actor.calc_mp_cost(@skill)
  368.     @status_window.refresh
  369.     @skill_window.refresh
  370.     @target_window.refresh
  371.     if $game_party.all_dead?
  372.       $scene = Scene_Gameover.new
  373.     elsif @skill.common_event_id > 0
  374.       $game_temp.common_event_id = @skill.common_event_id
  375.       $scene = Scene_Map.new
  376.     end
  377.   end
  378. end
  379. class Scene_Battle < Scene_Base
  380.   def start_skill_selection
  381.     @help_window = Window_Help.new
  382.     @skill_window = Liuliu_Window_SkillList.new(@active_battler)
  383.     @skill_window.help_window = @help_window
  384.     @itemcommand_window = Liuliu_Window_SkillCommand.new(@active_battler)
  385.     @itemcommand_window.y = 56
  386.     @itemcommand_window.height = 232
  387.     @itemcommand_window.active = true
  388.     @itemcommand_window.back_opacity = 200
  389.     @itemcommand_window.help_window = @help_window
  390.     @command_index = @itemcommand_window.index
  391.     @skill_window.set_item(@itemcommand_window.commands[@command_index])
  392.     @actor_command_window.active = false
  393.     @skill_window.active = false
  394.   end

  395.   def end_skill_selection
  396.     if @skill_window != nil
  397.       @skill_window.dispose
  398.       @skill_window = nil
  399.       @help_window.dispose
  400.       @help_window = nil
  401.       @itemcommand_window.dispose
  402.       @itemcommand_window = nil
  403.     end
  404.     @actor_command_window.active = true
  405.   end

  406.   def update_skill_selection
  407.     @skill_window.visible = true
  408.     @itemcommand_window.visible = true
  409.     @itemcommand_window.update
  410.     if @command_index != @itemcommand_window.index
  411.       @command_index = @itemcommand_window.index
  412.       @skill_window.set_item(@itemcommand_window.commands[@command_index])
  413.       @skill_window.index = 0
  414.     end
  415.     @skill_window.update
  416.     @help_window.update
  417.     if Input.trigger?(Input::B)
  418.       Sound.play_cancel
  419.       if @skill_window.active == true then
  420.         @itemcommand_window.active = true
  421.         @skill_window.active = false
  422.       else
  423.         end_skill_selection
  424.       end
  425.     elsif Input.trigger?(Input::C)
  426.       if @skill_window.active == false
  427.         @skill_window.active = true
  428.         @itemcommand_window.active = false
  429.         Sound.play_decision
  430.         return
  431.       end
  432.       @skill = @skill_window.skill
  433.       if @skill != nil
  434.         @active_battler.last_skill_id = @skill.id
  435.       end
  436.       if @active_battler.skill_can_use?(@skill)
  437.         Sound.play_decision
  438.         determine_skill
  439.       else
  440.         Sound.play_buzzer
  441.       end
  442.     end
  443.   end

  444.   def determine_skill
  445.     @active_battler.action.set_skill(@skill.id)
  446.     @skill_window.active = false
  447.     if @skill.need_selection?
  448.       if @skill.for_opponent?
  449.         start_target_enemy_selection
  450.       else
  451.         start_target_actor_selection
  452.       end
  453.     else
  454.       end_skill_selection
  455.       next_actor
  456.     end
  457.   end
  458. end
复制代码



作者: shinliwei    时间: 2008-8-28 05:05
完妥了!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1