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

Project1

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

角色生命护盾

[复制链接]

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
跳转到指定楼层
1
发表于 2015-2-19 13:35:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
这个脚本用于给默认脚本基础上的敌我增加一个“生命护盾”,用于吸收来自“Item”造成的体力伤害。
在VA中Item指代物品和技能,所以是抵消物品和技能造成的体力伤害。

每个角色受到的伤害如果大于现有护盾,溢出的部分会打在体力上。

RUBY 代码复制
  1. #==============================================================================
  2. # +++ 角色生命护盾 +++
  3. #==============================================================================
  4. # 作者 By 三途亚梦
  5. #  -- 本脚本来自 [url]https://rpg.blue[/url] 使用或转载请保留以上信息。
  6. #==============================================================================
  7. # 本脚本的作用是给玩家人物、敌人添加一个新的能力值“生命护盾”,
  8. # 生命护盾会吸收该角色受到的来自技能造成的体力伤害。
  9. #==============================================================================
  10. #
  11. # ★再次强调,生命护盾仅仅吸收来自“技能”造成的体力伤害!
  12. #
  13. # ★人物的生命护盾是amuhsp,
  14. # 可以通过$game_actors[1].amuhsp之类的方式在事件中改变它的数值。
  15. #
  16. # ★HspClear = true 时,人物的生命护盾将在战斗结束时清零。
  17. # 如果不想清零请将 true改为false
  18. #
  19. # ★HspNoAddition = true 时,
  20. # 生命护盾的恢复将不享受恢复效果、物理及魔法伤害比率的加成,
  21. # 但是会对 make_damage_value 的方法做出改变,会降低本脚本的兼容性。
  22. #
  23. # 设定部分所有文字信息的描述方法修改时请保留“”引号。
  24. #
  25. # ★将技能设置成体力值恢复,并在技能备注栏备注“[护盾恢复]”,
  26. # 那么这个技能将变成增加目标角色的生命护盾值
  27. # ★备注的时候不需要写入“”引号
  28. #
  29. # 角色的生命护盾没有上限,下限为0
  30. #
  31. # 如果需要设置一个技能为角色体力值的10%,又不想令护盾无限的加下去
  32. # 技能公式请参照这个写法:
  33. # b.hp * 0.1 - b.amuhsp
  34. #
  35. #==============================================================================
  36. # ★ 设定部分 ★
  37. #==============================================================================
  38. module Amu
  39.   module Hsp
  40.  
  41.   HspClear = true  #是否在战斗结束时清除掉玩家剩余的生命护盾
  42.  
  43.   HspNoAddition = false #是否采用本脚本的计算伤害的方法
  44.  
  45.   HspName = "生命护盾"  #生命护盾的名字
  46.  
  47.   HspABonus = "%s的%s剩余%s点!"  #玩家人物的生命护盾损伤后显示剩余值的文字
  48.  
  49.   HspEBonus = "%s的%s还剩%s点!"  #敌人的生命护盾损伤后显示剩余值的文字
  50.  
  51.   HspADamage = "%s的%s受到%s点伤害!"  #玩家人物的生命护盾受到伤害的文字
  52.  
  53.   HspEDamage = "%s的%s受到%s点伤害!"  #敌人的生命护盾受到伤害的文字
  54.  
  55.   HspARecovery  = "%s获得了一个%s点的%s保护!" #玩家的生命护盾得到提高的文字
  56.  
  57.   HspERecovery  = "%s接受了一个%s点的%s保护!" #敌人的生命护盾得到提高的文字
  58.  
  59.   HspADestory  = "%s的%s受到%s点伤害而遭到击破!" #玩家的生命护盾被击破时的文字
  60.  
  61.   HspEDestroy  = "%s的%s受到%s点伤害而被击破了!" #敌人的生命护盾被击破时的文字
  62.  
  63.   def self.play_actor_amuhspdamage  # 玩家的生命护盾受到伤害的音效
  64.     Audio.se_play("Audio/SE/sword1.ogg", 100, 50)
  65.   end
  66.  
  67.   def self.play_enemy_amuhspdamage   # 敌人的生命护盾受到伤害的音效
  68.     Audio.se_play("Audio/SE/sword1.ogg", 100, 50)
  69.   end
  70.  
  71.   def self.play_amuhsp_destory   # 生命护盾被击破时的音效
  72.     Audio.se_play("Audio/SE/Crash.ogg", 60, 90)
  73.   end
  74.  
  75.   end
  76. end
  77. #==============================================================================
  78. # ■ Game_ActionResult
  79. #------------------------------------------------------------------------------
  80. #  战斗行动结果的管理类。本类在 Game_Battler 类的内部使用。
  81. #==============================================================================
  82. class Game_ActionResult
  83.   #--------------------------------------------------------------------------
  84.   # ● 定义实例变量
  85.   #--------------------------------------------------------------------------
  86.   attr_accessor :amuhsp_damage                # 生命护盾 伤害
  87.   #--------------------------------------------------------------------------
  88.   # ● 清除伤害值`
  89.   #--------------------------------------------------------------------------
  90.   alias amu_20141125_clear_damage_values clear_damage_values
  91.   def clear_damage_values
  92.     amu_20141125_clear_damage_values
  93.     @amuhsp_damage = 0
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 生成伤害
  97.   #--------------------------------------------------------------------------
  98.   alias amu_20141125_make_damage make_damage
  99.   def make_damage(value, item)
  100.     amu_20141125_make_damage(value, item)
  101.     @amuhsp_damage = value if item.damage.to_hp? && @battler.amuhsp > 0 && value > 0
  102.     @amuhsp_damage = value if item.damage.to_hp? && item.damage.recover? && item.note.include?("[护盾恢复]")
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 获取具有生命护盾时 HP 伤害的文字
  106.   #--------------------------------------------------------------------------
  107.   def hp_damage_text
  108.     if @hp_drain > 0
  109.       fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
  110.       sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
  111.     elsif @hp_damage > 0
  112.       fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
  113.       sprintf(fmt, @battler.name, @hp_damage)
  114.     elsif @hp_damage < 0
  115.       fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
  116.       sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
  117.     elsif @hp_damage = 0 && @battler.amuhsp > 0
  118.       fmt = @battler.actor? ? Amu::Hsp::HspABonus : Amu::Hsp::HspEBonus
  119.       sprintf(fmt, @battler.name, Amu::Hsp::HspName, @battler.amuhsp)
  120.     else
  121.       fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
  122.       sprintf(fmt, @battler.name)
  123.     end
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 获取 生命护盾 伤害的文字
  127.   #--------------------------------------------------------------------------
  128.   def amuhsp_damage_text
  129.     if @amuhsp_damage > 0 && @battler.amuhsp > 0
  130.       fmt = @battler.actor? ? Amu::Hsp::HspADamage : Amu::Hsp::HspEDamage
  131.       sprintf(fmt, @battler.name, Amu::Hsp::HspName, @amuhsp_damage)
  132.     elsif @amuhsp_damage > 0 && @battler.amuhsp == 0
  133.       fmt = @battler.actor? ? Amu::Hsp::HspADestory : Amu::Hsp::HspEDestroy
  134.       sprintf(fmt, @battler.name, Amu::Hsp::HspName, @amuhsp_damage)
  135.     elsif @amuhsp_damage < 0
  136.       fmt = @battler.actor? ? Amu::Hsp::HspARecovery : Amu::Hsp::HspERecovery
  137.       sprintf(fmt, @battler.name, -@amuhsp_damage, Amu::Hsp::HspName)
  138.     else
  139.       ""
  140.     end
  141.   end
  142. end
  143. #==============================================================================
  144. # ■ Game_BattlerBase
  145. #------------------------------------------------------------------------------
  146. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  147. #==============================================================================
  148. class Game_BattlerBase
  149.   attr_reader   :amuhsp                       # 生命护盾
  150.   #--------------------------------------------------------------------------
  151.   # ● 初始化对象
  152.   #--------------------------------------------------------------------------
  153.   alias amu_20141125_initialize initialize
  154.   def initialize
  155.     amu_20141125_initialize
  156.     @amuhsp = 0
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 更改 HSP
  160.   #--------------------------------------------------------------------------
  161.   def amuhsp=(amuhsp)
  162.     @amuhsp = amuhsp
  163.     refresh
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 刷新
  167.   #--------------------------------------------------------------------------
  168.   alias amu_20141125_refresh refresh
  169.   def refresh
  170.     amu_20141125_refresh
  171.     @amuhsp = [@amuhsp, 0].max
  172.   end
  173. end
  174. #==============================================================================
  175. # ■ Game_Battler
  176. #------------------------------------------------------------------------------
  177. #  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
  178. #==============================================================================
  179. class Game_Battler < Game_BattlerBase
  180.   #--------------------------------------------------------------------------
  181.   # ● 计算伤害
  182.   #--------------------------------------------------------------------------
  183.   alias amu_20141125_make_damage_value make_damage_value
  184.   def make_damage_value(user, item)
  185.     if Amu::Hsp::HspNoAddition
  186.       value = item.damage.eval(user, self, $game_variables)
  187.       value *= item_element_rate(user, item)
  188.       value *= pdr if item.physical? && !make_amuhsp?(item)
  189.       value *= mdr if item.magical? && !make_amuhsp?(item)
  190.       value *= rec if item.damage.recover? && !make_amuhsp?(item)
  191.       value = apply_critical(value) if @result.critical
  192.       value = apply_variance(value, item.damage.variance)
  193.       value = apply_guard(value)
  194.       if make_amuhsp?(item)
  195.         def actor_amuhsp?
  196.           return true
  197.         end
  198.       end
  199.       @result.make_damage(value.to_i, item)
  200.     end
  201.     else
  202.       amu_20141125_make_damage_value(user, item)
  203.       if make_amuhsp?(item)
  204.         def actor_amuhsp?
  205.           return true
  206.         end
  207.       end
  208.     end
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 处理伤害
  212.   #    调用前需要设置好
  213.   #    @result.hp_damage   @result.mp_damage
  214.   #    @result.hp_drain    @result.mp_drain
  215.   #--------------------------------------------------------------------------
  216.   def execute_damage(user)
  217.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  218.     if self.amuhsp > 0 && @result.hp_damage > 0
  219.       eamuhsp = self.amuhsp
  220.       self.amuhsp -= @result.hp_damage
  221.       self.amuhsp <= 0 ? @result.hp_damage -= eamuhsp : @result.hp_damage = 0
  222.     end
  223.     if actor_amuhsp?
  224.       self.amuhsp -= @result.hp_damage
  225.       @result.hp_damage = 0
  226.       def actor_amuhsp?
  227.         return false
  228.       end
  229.     else
  230.       self.hp -= @result.hp_damage
  231.     end
  232.     self.mp -= @result.mp_damage
  233.     user.hp += @result.hp_drain
  234.     user.mp += @result.mp_drain
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 判断技能是否用来增加生命护盾
  238.   #--------------------------------------------------------------------------
  239.   def make_amuhsp?(item)
  240.     return false unless item.is_a?(RPG::Skill)
  241.     return item.note.include?("[护盾恢复]")
  242.   end
  243.   def actor_amuhsp?
  244.     return false
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 清除 生命护盾
  248.   #--------------------------------------------------------------------------
  249.   def clear_amuhsp
  250.     self.amuhsp = 0
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 战斗结束处理
  254.   #--------------------------------------------------------------------------
  255.   alias amu_20141125_on_battle_end on_battle_end
  256.   def on_battle_end
  257.     amu_20141125_on_battle_end
  258.     clear_amuhsp if Amu::Hsp::HspClear == true
  259.   end
  260. end
  261.  
  262. class Game_Actor < Game_Battler
  263.   #--------------------------------------------------------------------------
  264.   # ● 设置具有生命护盾时玩家被击的效果
  265.   #--------------------------------------------------------------------------
  266.   def perform_hspdamage_effect
  267.     $game_troop.screen.start_shake(5, 5, 10)
  268.     @sprite_effect_type = :blink
  269.     Amu::Hsp.play_actor_amuhspdamage
  270.   end
  271. end
  272.  
  273. class Game_Enemy < Game_Battler
  274.   #--------------------------------------------------------------------------
  275.   # ● 设置具有生命护盾时敌人被击的效果
  276.   #--------------------------------------------------------------------------
  277.   def perform_hspdamage_effect
  278.     $game_troop.screen.start_shake(5, 5, 10)
  279.     @sprite_effect_type = :blink
  280.     Amu::Hsp.play_enemy_amuhspdamage
  281.   end
  282. end
  283.  
  284. class Window_BattleLog < Window_Selectable
  285.   #--------------------------------------------------------------------------
  286.   # ● 显示伤害
  287.   #--------------------------------------------------------------------------
  288.   def display_damage(target, item)
  289.     if target.result.missed
  290.       display_miss(target, item)
  291.     elsif target.result.evaded
  292.       display_evasion(target, item)
  293.     else
  294.       display_amuhsp_damage(target, item)
  295.       display_hp_damage(target, item)
  296.       display_mp_damage(target, item)
  297.       display_tp_damage(target, item)
  298.     end
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● 显示 生命护盾 伤害
  302.   #--------------------------------------------------------------------------
  303.   def display_amuhsp_damage(target, item)
  304.     return if target.dead? || target.result.amuhsp_damage == 0
  305.     if target.result.amuhsp_damage > 0 && target.amuhsp > 0 && target.result.hp_drain == 0
  306.       target.perform_hspdamage_effect
  307.     end
  308.     Amu::Hsp.play_amuhsp_destory if target.result.amuhsp_damage > 0 && target.amuhsp == 0
  309.     Sound.play_recovery if target.result.amuhsp_damage < 0
  310.     add_text(target.result.amuhsp_damage_text)
  311.     wait
  312.   end
  313. end
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-22 23:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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