Project1

标题: 【求助】如何制作伤血加蓝的技能? [打印本页]

作者: 冰舞蝶恋    时间: 2011-4-16 15:19
标题: 【求助】如何制作伤血加蓝的技能?
比如一个技能是恢复魔法的,可它消耗掉的是生命
dsu_plus_rewardpost_czw
作者: 最后一搏    时间: 2011-4-16 17:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 冰舞蝶恋    时间: 2011-4-16 17:55
回复 最后一搏 的帖子

好麻烦……请问有没有什么脚本之类的办法……
作者: killkill2298    时间: 2011-4-16 18:06
本帖最后由 killkill2298 于 2011-4-16 18:13 编辑

http://rpg.blue/forum.php?mod=viewthread&tid=126649
这个脚本有技能伤血的,拿回去研究下

我脚本也是初学,帮不了你
其实公共事件是最简单的
$game_player[使用者ID].hp -= hp_cost
$game_player[目标ID].mp -= mp_add
反正又不会给敌人加蓝
作者: 最后一搏    时间: 2011-4-16 18:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 冰舞蝶恋    时间: 2011-4-16 20:51
回复 killkill2298 的帖子

可是……你怎么判断是哪个角色用技能?
作者: killkill2298    时间: 2011-4-16 21:16
回复 冰舞蝶恋 的帖子

我也正在想这个问题
作者: dorx2010    时间: 2011-4-17 09:38
用状态区分,例: 主角用了技能一,,变更状态"消耗生命"
再引发公用事件"A" ↓↓↓↓↓
条件分歧(哪个主角状态有"消耗生命")
发动脚本$game_actors[1].hp -=1
*(当然如果有六个主角,,便要做六个分歧) :)
作者: 风缘    时间: 2011-4-17 15:07
在 Scene_Battle 加上
  1. attr_reader :active_battler
复制代码
设置技能公共事件
  1. me = $scene.active_battler
  2. me.hp -= 100
  3. me.mp += 100
复制代码
再设置技能调用此事件可。

伸手要好人卡!!!
作者: shinliwei    时间: 2011-4-18 06:48
有个技能消费改造脚本
  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
复制代码

作者: 后知后觉    时间: 2011-4-18 12:39
公共事件+状态法呗.
用个状态加几行脚本就搞定了.




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