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

Project1

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

[已经解决] 关于一个吸血反伤脚本出了点BUG

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2333
在线时间
275 小时
注册时间
2017-7-25
帖子
163
跳转到指定楼层
1
发表于 2017-9-15 00:25:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. #==============================================================================
  2. # ■ 伤害吸血与反弹  by 老鹰
  3. #------------------------------------------------------------------------------
  4. #   - 新增对所有造成的伤害的吸血、反弹的处理(先吸血、再反弹)
  5. #   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害反弹进行设置
  6. #    <HP Rebound: 伤害反弹比例(%)>
  7. #     - 伤害反弹比例(%) : 填入对最终伤害的反弹的比例,为百分数,%可省略
  8. #    <Resist HP Rebound: 抵抗反弹比例(%)>
  9. #     - 抵抗反弹比例(%) : 填入对最终伤害的抵抗反弹的比例,为百分数,%可省略
  10. #   - 角色、职业、武器、护甲、敌人、状态的备注栏中填入下式,即可对伤害吸血进行设置
  11. #    <HP Drain: 吸血比例(%) 吸血概率分子 吸血概率分母>
  12. #     - 吸血比例(%) : 填入最终伤害的吸血比例,为百分数,%可加可不加
  13. #     - 概率分子分母 : 吸血的概率为 分子/分母,可不填,默认为 1
  14. #    <Resist HP Drain: 抵抗吸血比例(%) 抵抗概率分子 抵抗概率分母>
  15. #     - 抵抗比例(%) : 被吸血时,比例要减去的值,默认为 0
  16. #     - 抵抗分子分母 : 抵抗的概率为 分子/分母,进行吸血处理时,要减去该概率,默认为 0
  17. #   - 举例:
  18. #    1 号角色备注内填入了 <HP Drain: 20%>
  19. #     - 1号角色造成的所有伤害,会吸取伤害的 20% (不超过目标的当前hp值)回复自己
  20. #    1 号敌人备注内填入了 <Resist HP Drain: 10%, 1,5>
  21. #    1 号角色备注内填入了 <HP Drain: 20%, 1,2>
  22. #     - 1号角色攻击1号敌人,有 1/2 - 1/5 的概率 吸取伤害的 20% - 10% 回复自己
  23. #
  24. #   - 实质:在真正实行伤害加减时,先进行吸血操作的处理;在计算完伤害后,进行反弹计算
  25. #==============================================================================

  26. class Game_ActionResult
  27.   #--------------------------------------------------------------------------
  28.   # ○ 生成反弹数值
  29.   #--------------------------------------------------------------------------
  30.   def execute_equips_hp_rebound(user)
  31.     return if @hp_damage <= 0
  32.     rate = (@battler.hp_rebound_rate - user.resist_hp_rebound_rate) / 100.0
  33.     return if rate <= 0
  34.     value = (@hp_damage * rate).to_i
  35.     user.result.hp_damage += value
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ○ 生成吸血数值
  39.   #--------------------------------------------------------------------------
  40.   def execute_equips_hp_drain(user)
  41.     return if @hp_damage <= 0
  42.     pro = user.hp_drain_pro - @battler.resist_hp_drain_pro
  43.     return if pro < 1 && (pro < 0 || rand > pro)
  44.     rate = (user.hp_drain_rate - @battler.resist_hp_drain_rate) / 100.0
  45.     return if rate <= 0
  46.     @hp_drain += (@hp_damage * rate).to_i
  47.     @hp_drain = [@battler.hp, @hp_drain.to_i].min
  48.   end
  49. end

  50. class Game_BattlerBase
  51.   #--------------------------------------------------------------------------
  52.   # ○ 获取用于计算吸血相关的数组
  53.   #--------------------------------------------------------------------------
  54.   def get_hp_drain_array
  55.     []
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ○ 重新获取吸血与反弹的相关参数
  59.   #--------------------------------------------------------------------------
  60.   def reget_hp_drain_params
  61.     # 数组依次存储 [吸血比例 吸血概率 抗吸血比例 抗吸血概率]
  62.     @hp_drain_params = [0, 0, 0, 0]
  63.     # [反弹比例 抗反弹比例]
  64.     @hp_rebound_params = [0, 0]
  65.     get_hp_drain_array.each do |a|
  66.       next if a == nil
  67.       if a.note =~ /<HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
  68.         @hp_drain_params[0] = $1.to_i
  69.         pro1 = $2 == "" ? 1 : $2.to_i
  70.         pro2 = $3 == "" ? 1 : $3.to_i
  71.         @hp_drain_params[1] = pro1 * 1.0 / pro2
  72.       end
  73.       if a.note =~ /<Resist HP Drain: *(-?\d+)%?[ ,]*(\d*)[ ,]*(\d*)>/
  74.         @hp_drain_params[2] = $1.to_i
  75.         pro1 = $2 == "" ? 1 : $2.to_i
  76.         pro2 = $3 == "" ? 1 : $3.to_i
  77.         @hp_drain_params[3] = pro1 * 1.0 / pro2
  78.       end
  79.       @hp_rebound_params[0] = $1.to_i if a.note =~ /<HP Rebound: *(-?\d+)%?>/
  80.       @hp_rebound_params[1] = $1.to_i if a.note =~ /<Resist HP Rebound: *(-?\d+)%?>/
  81.     end
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ○ 吸血比例与概率
  85.   #--------------------------------------------------------------------------
  86.   def hp_drain_rate
  87.     @hp_drain_params[0]
  88.   end
  89.   def hp_drain_pro
  90.     @hp_drain_params[1]
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ○ 抗吸血比例与概率
  94.   #--------------------------------------------------------------------------
  95.   def resist_hp_drain_rate
  96.     @hp_drain_params[2]
  97.   end
  98.   def resist_hp_drain_pro
  99.     @hp_drain_params[3]
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ○ 伤害反弹比例
  103.   #--------------------------------------------------------------------------
  104.   def hp_rebound_rate
  105.     @hp_rebound_params[0]
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ○ 抗反弹比例
  109.   #--------------------------------------------------------------------------
  110.   def resist_hp_rebound_rate
  111.     @hp_rebound_params[1]
  112.   end
  113. end

  114. class Game_Battler < Game_BattlerBase
  115.   #--------------------------------------------------------------------------
  116.   # ● 计算伤害
  117.   #--------------------------------------------------------------------------
  118.   alias eagle_equips_hp_rebound_make_damage_value make_damage_value
  119.   def make_damage_value(user, item)
  120.     user.reget_hp_drain_params
  121.     reget_hp_drain_params
  122.     eagle_equips_hp_rebound_make_damage_value(user, item)
  123.     @result.execute_equips_hp_rebound(user)
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 执行伤害
  127.   #--------------------------------------------------------------------------
  128.   alias eagle_equips_hp_drain_execute_damage execute_damage
  129.   def execute_damage(user)
  130.     @result.execute_equips_hp_drain(user)
  131.     eagle_equips_hp_drain_execute_damage(user)
  132.     user.hp -= user.result.hp_damage
  133.   end
  134. end

  135. class Game_Actor < Game_Battler
  136.   #--------------------------------------------------------------------------
  137.   # ○ 获取用于计算吸血相关的数组
  138.   #--------------------------------------------------------------------------
  139.   def get_hp_drain_array
  140.     [actor, self.class] + equips + states
  141.   end
  142. end

  143. class Game_Enemy < Game_Battler
  144.   #--------------------------------------------------------------------------
  145.   # ○ 获取用于计算吸血相关的数组
  146.   #--------------------------------------------------------------------------
  147.   def get_hp_drain_array
  148.     [enemy] + states
  149.   end
  150. end
复制代码





{:2_272:}就是这个,实际测试中发现只要加入该脚本,哪怕数据库没有进行任何备注,都自带一个【攻击了某个敌人后,那个敌人再攻击回来时会受到等同于之前角色打它时的伤害】的现象(因为战斗中要看到血量变化必须要一个显示血条的脚本所以测试的时候还有一个血条脚本,但换了两个不同的血条脚本都出现一样的问题,应该不是冲突造成的),求大佬帮忙看看是哪句出了问题,感激不尽!

Lv6.析梦学徒

老鹰

梦石
40
星屑
34725
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2017-9-15 10:06:54 | 只看该作者
贴到脚本后面,因为默认战斗系统的一回合是所有角色行动完,导致本回合中受到攻击的战斗者的伤害记录没清除,那么它行动时还会执行自己的伤害记录……
我之前用的是仿轨迹的AT条,一回合就一个人,并没有这种情况
现在用的是YEA-Battle Core,直接就在它里面改了……
  1. class Scene_Battle
  2.   #--------------------------------------------------------------------------
  3.   # ● 战斗行动结束时的处理
  4.   #--------------------------------------------------------------------------
  5.   alias eagle_hp_drain_process_action_end process_action_end
  6.   def process_action_end
  7.     all_battle_members.each { |m| m.result.clear_damage_values }
  8.     eagle_hp_drain_process_action_end
  9.   end
  10. end
复制代码

点评

多……多谢大佬,完美解决 顺便……怎么设置不了评分的  发表于 2017-9-15 12:39

评分

参与人数 1星屑 +10 收起 理由
风华尽绽 + 10 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 18:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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