查看: 2479|回复: 8

[已经解决] 关于这个伤害为0取消一切附加效果的脚本

[复制链接]
梦石
0
星屑
10345
在线时间
1117 小时
注册时间
2015-2-10
回帖
164
发表于 2021-10-3 15:37:21 | 显示全部楼层 |阅读模式
悬赏100星屑已解决
我这里有一个伤害或恢复为0则取消一切该技能或道具的附加效果的脚本,一开始我以为只对有伤害计算公式的技能或道具才有效,后来我发现即使是那些设定为本来就不会有伤害或恢复的道具和技能的附加效果也都会消失,必须要设定成其至少有1点的伤害或恢复时其才会有附加效果。我想改掉这个问题,让这个脚本只对那些设定成有伤害或恢复计算公式的技能或道具有效果,并且我想添加一个额外的功能:除了属性有效度为0%外,技能或道具造成的伤害或恢复至少为1。当且仅当该技能或道具的属性造成的伤害或恢复对目标的有效度为0%时伤害才会是0。(有人说在公式里的最后加上“+1”就行,但实际情况是最后的伤害仍然会出现0。)
[pre lang="ruby"]class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 应用“恢复 HP”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_recover_hp item_effect_recover_hp
  def item_effect_recover_hp(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_recover_hp(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“恢复 MP”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_recover_mp item_effect_recover_mp
  def item_effect_recover_mp(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_recover_mp(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“增加 TP”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_gain_tp item_effect_gain_tp
  def item_effect_gain_tp(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_gain_tp(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“附加状态”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_add_state item_effect_add_state
  def item_effect_add_state(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_add_state(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“状态附加”效果:普通攻击
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_add_state_attack item_effect_add_state_attack
  def item_effect_add_state_attack(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_add_state_attack(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“状态附加”效果:普通
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_add_state_normal item_effect_add_state_normal
  def item_effect_add_state_normal(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_add_state_normal(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“状态解除”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_remove_state item_effect_remove_state
  def item_effect_remove_state(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_remove_state(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“强化能力”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_add_buff item_effect_add_buff
  def item_effect_add_buff(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_add_buff(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“弱化能力”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_add_debuff item_effect_add_debuff
  def item_effect_add_debuff(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_add_debuff(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“解除能力强化”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_remove_buff item_effect_remove_buff
  def item_effect_remove_buff(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_remove_buff(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“解除能力弱化”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_remove_debuff item_effect_remove_debuff
  def item_effect_remove_debuff(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_remove_debuff(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“特殊效果”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_special item_effect_special
  def item_effect_special(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_special(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“能力提升”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_grow item_effect_grow
  def item_effect_grow(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_grow(user, item, effect)
  end
  #--------------------------------------------------------------------------
  # ● 应用“学会技能”效果
  #--------------------------------------------------------------------------
  alias sn_160127_item_effect_learn_skill item_effect_learn_skill
  def item_effect_learn_skill(user, item, effect)
    return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
    sn_160127_item_effect_learn_skill(user, item, effect)
  end
end[/pre]

最佳答案

查看完整内容

[pre lang="ruby"]class Game_Battler < Game_BattlerBase def make_damage_value(user, item) value = item.damage.eval(user, self, $game_variables) value *= item_element_rate(user, item) value *= pdr if item.physical? value *= mdr if item.magical? value *= rec if item.damage.recover? value = apply_critical(value) if @result.critical value = apply_variance(value, item.damag ...
梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2021-10-3 15:37:22 | 显示全部楼层
本帖最后由 soulsaga 于 2021-10-4 16:16 编辑
fbeds 发表于 2021-10-4 09:18
谢谢,问题1已经解决了。现在关于问题2我找到了一个类似的脚本,但这个脚本的效果是只要伤害为0,则将伤 ...


[pre lang="ruby"]class Game_Battler < Game_BattlerBase
def make_damage_value(user, item)
    value = item.damage.eval(user, self, $game_variables)
    value *= item_element_rate(user, item)
    value *= pdr if item.physical?
    value *= mdr if item.magical?
    value *= rec if item.damage.recover?
    value = apply_critical(value) if @result.critical
    value = apply_variance(value, item.damage.variance)
    value = apply_guard(value)
    @result.make_damage(value.to_i, item, item_element_rate(user, item))
  end
  end
class Game_ActionResult
alias game_actionresult_make_damage make_damage
  def make_damage(value, item, element)
    value = 1 if value == 0 and element != 0.0
    game_actionresult_make_damage(value, item)
  end
end[/pre]

点评

谢谢帮助,问题已经解决了。  发表于 2021-10-4 18:34

评分

参与人数 1星屑 +100 收起 理由
alexncf125 + 100 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2021-10-3 18:10:56 | 显示全部楼层
第一个问题的问题...

[pre lang="ruby"]return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0 and item.damage.type == 1[/pre]

只有伤害类型是HP伤害时才会取消效果

评分

参与人数 1星屑 +40 收起 理由
alexncf125 + 40 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
10345
在线时间
1117 小时
注册时间
2015-2-10
回帖
164
 楼主| 发表于 2021-10-4 09:18:52 | 显示全部楼层
soulsaga 发表于 2021-10-3 18:10
第一个问题的问题...

return if self.result.hp_damage

谢谢,问题1已经解决了。现在关于问题2我找到了一个类似的脚本,但这个脚本的效果是只要伤害为0,则将伤害改为1,即使是因为属性有效度为0%而导致最后计算出来的伤害为0时也会使伤害变为1,你知道如何修改吗?
  1. class Game_ActionResult
  2.   #--------------------------------------------------------------------------
  3.   # ● 生成伤害
  4.   #--------------------------------------------------------------------------
  5.   alias game_actionresult_make_damage make_damage
  6.   def make_damage(value, item)
  7.     value = 1 if value == 0
  8.     game_actionresult_make_damage(value, item)
  9.   end
  10. end
复制代码
回复

使用道具 举报

梦石
0
星屑
10345
在线时间
1117 小时
注册时间
2015-2-10
回帖
164
 楼主| 发表于 2021-10-4 12:08:14 | 显示全部楼层
soulsaga 发表于 2021-10-4 11:14
alias game_actionresult_make_damage make_damage
  def make_damage(value, item)
    value = 1 if va ...

不行,用有效度为0%的属性攻击敌人时会出错,我新建了一个工程单独测试时也一样。

点评

哎..已更新  发表于 2021-10-4 13:47
回复

使用道具 举报

梦石
0
星屑
10345
在线时间
1117 小时
注册时间
2015-2-10
回帖
164
 楼主| 发表于 2021-10-4 16:00:39 | 显示全部楼层
soulsaga 发表于 2021-10-4 11:14
class Game_Battler < Game_BattlerBase
def make_damage_value(user, item)
    value = item.damage.ev ...

还是不对啊,虽然不会报错了,但是用有效度为0%的属性攻击敌人时,伤害会变成1而不是0。

点评

已更新  发表于 2021-10-4 16:16
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部