查看: 1229|回复: 4

[有事请教] 请问如何制作根据自机角色物防魔防获取对应减伤?

[复制链接]
梦石
0
星屑
187
在线时间
85 小时
注册时间
2024-1-8
回帖
11
发表于 2025-6-29 20:04:04 | 显示全部楼层 |阅读模式
悬赏30星屑已解决
[pre lang="ruby"]class Game_Battler < Game_BattlerBase
  def execute_damage(user)
    on_damage(@result.hp_damage) if @result.hp_damage > 0
   

   
   
   
    if self.state?(41) && rand > 0.75
      @result.hp_damage = 0
      self.add_state(12)   #12是一个空状态
    end
    #41状态有25%概率无敌,这个是八云紫的境界抵抗
   
   
   
    #新状态加这里
   
   
    @result.hp_damage *= 0.5 if self.state?(96)
    #↑这个是灵梦的减伤50%
   
    @result.hp_damage -= 25000 if self.state?(220)
    #↑这个是敌人的澄澈
   
    @result.hp_damage -= 300 if self.state?(221)
    #↑这个是我方的澄澈
   
    @result.hp_damage *= 0.25 if self.state?(48) && rand > 0.75   #48状态(多萝茜)有25%概率受到25%伤害

   
    #伤害公式连击(没有112状态【自机固有】收到增伤连击)   
    @result.hp_damage *= (1+$game_temp.combo_hit[0]*0.003) if self.state?(112) ==false
    @result.hp_damage=@result.hp_damage.to_i#清除小数
   
   
    @result.hp_damage *= 0.5 if self.state?(175)
    #↑这个是简单难度的减伤
   
    @result.hp_damage *= 1.5 if self.state?(267)
    #↑这个是暗之主的易伤
  
   
    self.hp -= @result.hp_damage
    self.mp -= @result.mp_damage
    user.hp += @result.hp_drain
    user.mp += @result.mp_drain
  end

  
  
  #时停计算
  
  alias item_apply_sakuya item_apply
  def item_apply(user, item)
    item_apply_sakuya(user, item)
    if (user.state?(100) && $game_switches[100] && ($game_variables[100] == 1))
      $game_temp.reserve_common_event(980)  
    else
      $game_variables[100] += 1
    end
  end
end

[/pre]

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


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

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

最佳答案

查看完整内容

建议在这个方法里修改,它是传入技能使用者和技能,对当前角色进行伤害计算 你可以根据我写的注释,在其中步骤增加你的防御修正

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

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

发表于 2025-6-29 20:04:05 | 显示全部楼层
神隐的主犯 发表于 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
复制代码
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

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

发表于 2025-6-30 12:18:13 | 显示全部楼层
一定要在这个方法里修改吗?建议在调用它的那个计算伤害公式的方法里改,那个方法里有技能对象,可以效仿它其中根据技能造成物理伤害就获取角色的受到物理伤害倍率,造成魔法伤害就获取角色的受到魔法伤害倍率,来增加你想要的效果。
回复

使用道具 举报

梦石
0
星屑
187
在线时间
85 小时
注册时间
2024-1-8
回帖
11
 楼主| 发表于 2025-6-30 23:00:08 | 显示全部楼层
百里_飞柳 发表于 2025-6-30 12:18
一定要在这个方法里修改吗?建议在调用它的那个计算伤害公式的方法里改,那个方法里有技能对象,可以效仿它 ...

这个该如何修改呐,因为我也不是很懂,本游戏技能目测大于3000个不同的技能。在技能栏里改会死的
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2025-7-5 18:53:38 | 显示全部楼层
本帖最后由 soulsaga 于 2025-7-6 15:41 编辑

[pre lang="ruby"]n=100
n -=  self.def / 100 * 5 if item.physical?
n -=  self.mdf / 100 * 5 if item.magical?
value *= n/100.0[/pre]

或且写成
n -= item.physical? ? self.def / 100 * 5 : m.magical? ? self.mdf / 100 * 5 : 0
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部