Project1

标题: 请问如何制作根据自机角色物防魔防获取对应减伤? [打印本页]

作者: 神隐的主犯    时间: 7 天前
标题: 请问如何制作根据自机角色物防魔防获取对应减伤?
RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2.   def execute_damage(user)
  3.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  4.  
  5.  
  6.  
  7.  
  8.  
  9.     if self.state?(41) && rand > 0.75
  10.       @result.hp_damage = 0
  11.       self.add_state(12)   #12是一个空状态
  12.     end
  13.     #41状态有25%概率无敌,这个是八云紫的境界抵抗
  14.  
  15.  
  16.  
  17.     #新状态加这里
  18.  
  19.  
  20.     @result.hp_damage *= 0.5 if self.state?(96)
  21.     #↑这个是灵梦的减伤50%
  22.  
  23.     @result.hp_damage -= 25000 if self.state?(220)
  24.     #↑这个是敌人的澄澈
  25.  
  26.     @result.hp_damage -= 300 if self.state?(221)
  27.     #↑这个是我方的澄澈
  28.  
  29.     @result.hp_damage *= 0.25 if self.state?(48) && rand > 0.75   #48状态(多萝茜)有25%概率受到25%伤害
  30.  
  31.  
  32.     #伤害公式连击(没有112状态【自机固有】收到增伤连击)   
  33.     @result.hp_damage *= (1+$game_temp.combo_hit[0]*0.003) if self.state?(112) ==false
  34.     @result.hp_damage=@result.hp_damage.to_i#清除小数
  35.  
  36.  
  37.     @result.hp_damage *= 0.5 if self.state?(175)
  38.     #↑这个是简单难度的减伤
  39.  
  40.     @result.hp_damage *= 1.5 if self.state?(267)
  41.     #↑这个是暗之主的易伤
  42.  
  43.  
  44.     self.hp -= @result.hp_damage
  45.     self.mp -= @result.mp_damage
  46.     user.hp += @result.hp_drain
  47.     user.mp += @result.mp_drain
  48.   end
  49.  
  50.  
  51.  
  52.   #时停计算
  53.  
  54.   alias item_apply_sakuya item_apply
  55.   def item_apply(user, item)
  56.     item_apply_sakuya(user, item)
  57.     if (user.state?(100) && $game_switches[100] && ($game_variables[100] == 1))
  58.       $game_temp.reserve_common_event(980)  
  59.     else
  60.       $game_variables[100] += 1
  61.     end
  62.   end
  63. end


如上部分代码(这是我自己各种调的,主要就是根据@result.hp_damage的变化获取最终减伤。)


现在我想达成的是(所有我方角色我都固定了状态112,也就是有112状态的是玩家,其余是ai)
持有状态112的角色,每有100点物理防御力,收到的物理伤害(不含魔法类和必中攻击的)-5%
持有状态112的角色,每有100点魔法防御力,收到的魔法伤害(不含物理类和必中攻击的)-5%

因为@result.hp_damage是最终减伤,我一时搜不到对应的名字,
所以来请教一下大佬们,上边的代码我应该怎么加才能实现效果呢?


作者: 百里_飞柳    时间: 7 天前
神隐的主犯 发表于 2025-6-30 23:00
这个该如何修改呐,因为我也不是很懂,本游戏技能目测大于3000个不同的技能。在技能栏里改会死的 ...

建议在这个方法里修改,它是传入技能使用者和技能,对当前角色进行伤害计算
你可以根据我写的注释,在其中步骤增加你的防御修正
  1. class Game_Battler < Game_BattlerBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 计算伤害
  4.   #--------------------------------------------------------------------------
  5.   def make_damage_value(user, item)
  6.     # 首先根据技能伤害公式计算出了一个数字
  7.     value = item.damage.eval(user, self, $game_variables)
  8.     # 应用当前角色(受击者)的元素抗性
  9.     value *= item_element_rate(user, item)
  10.     # 如果技能是物理攻击(数据库-技能-命中类型-物理攻击),应用当前角色的pdr(特殊能力-受到物理伤害加成)
  11.     value *= pdr if item.physical?
  12.     # 如果技能是魔法攻击(数据库-技能-命中类型-魔法攻击),应用当前角色的mdr(特殊能力-受到魔法伤害加成)
  13.     value *= mdr if item.magical?
  14.     # 如果技能是治疗(数据库-技能-伤害-体力值恢复),应用当前角色的rec(特殊能力-恢复效果比率)
  15.     value *= rec if item.damage.recover?
  16.     # 如果暴击,应用暴击伤害加成
  17.     value = apply_critical(value) if @result.critical
  18.     # 如果设置了 数据库-技能-伤害-离散度,增加波动
  19.     value = apply_variance(value, item.damage.variance)
  20.     # 应用当前角色的防御
  21.     value = apply_guard(value)
  22.     # 将最终伤害数字存入 @result(注意:此次还没有真正造成伤害,在execute_damage方法里才真正更改了hp)
  23.     @result.make_damage(value.to_i, item)
  24.   end
  25. end
复制代码

作者: 百里_飞柳    时间: 6 天前
一定要在这个方法里修改吗?建议在调用它的那个计算伤害公式的方法里改,那个方法里有技能对象,可以效仿它其中根据技能造成物理伤害就获取角色的受到物理伤害倍率,造成魔法伤害就获取角色的受到魔法伤害倍率,来增加你想要的效果。
作者: 神隐的主犯    时间: 6 天前
百里_飞柳 发表于 2025-6-30 12:18
一定要在这个方法里修改吗?建议在调用它的那个计算伤害公式的方法里改,那个方法里有技能对象,可以效仿它 ...

这个该如何修改呐,因为我也不是很懂,本游戏技能目测大于3000个不同的技能。在技能栏里改会死的
作者: soulsaga    时间: 昨天 18:53
本帖最后由 soulsaga 于 2025-7-5 18:56 编辑

RUBY 代码复制
  1. n=100
  2. n -=  self.def / 100 * 5 if item.physical?
  3. n -=  self.mdf / 100 * 5 if item.magical?
  4. value *= n/100.0





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