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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7033
在线时间
879 小时
注册时间
2015-2-10
帖子
248
跳转到指定楼层
1
发表于 2021-10-3 15:37:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100星屑
我这里有一个伤害或恢复为0则取消一切该技能或道具的附加效果的脚本,一开始我以为只对有伤害计算公式的技能或道具才有效,后来我发现即使是那些设定为本来就不会有伤害或恢复的道具和技能的附加效果也都会消失,必须要设定成其至少有1点的伤害或恢复时其才会有附加效果。我想改掉这个问题,让这个脚本只对那些设定成有伤害或恢复计算公式的技能或道具有效果,并且我想添加一个额外的功能:除了属性有效度为0%外,技能或道具造成的伤害或恢复至少为1。当且仅当该技能或道具的属性造成的伤害或恢复对目标的有效度为0%时伤害才会是0。(有人说在公式里的最后加上“+1”就行,但实际情况是最后的伤害仍然会出现0。)
RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 应用“恢复 HP”效果
  4.   #--------------------------------------------------------------------------
  5.   alias sn_160127_item_effect_recover_hp item_effect_recover_hp
  6.   def item_effect_recover_hp(user, item, effect)
  7.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  8.     sn_160127_item_effect_recover_hp(user, item, effect)
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 应用“恢复 MP”效果
  12.   #--------------------------------------------------------------------------
  13.   alias sn_160127_item_effect_recover_mp item_effect_recover_mp
  14.   def item_effect_recover_mp(user, item, effect)
  15.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  16.     sn_160127_item_effect_recover_mp(user, item, effect)
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 应用“增加 TP”效果
  20.   #--------------------------------------------------------------------------
  21.   alias sn_160127_item_effect_gain_tp item_effect_gain_tp
  22.   def item_effect_gain_tp(user, item, effect)
  23.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  24.     sn_160127_item_effect_gain_tp(user, item, effect)
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 应用“附加状态”效果
  28.   #--------------------------------------------------------------------------
  29.   alias sn_160127_item_effect_add_state item_effect_add_state
  30.   def item_effect_add_state(user, item, effect)
  31.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  32.     sn_160127_item_effect_add_state(user, item, effect)
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 应用“状态附加”效果:普通攻击
  36.   #--------------------------------------------------------------------------
  37.   alias sn_160127_item_effect_add_state_attack item_effect_add_state_attack
  38.   def item_effect_add_state_attack(user, item, effect)
  39.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  40.     sn_160127_item_effect_add_state_attack(user, item, effect)
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 应用“状态附加”效果:普通
  44.   #--------------------------------------------------------------------------
  45.   alias sn_160127_item_effect_add_state_normal item_effect_add_state_normal
  46.   def item_effect_add_state_normal(user, item, effect)
  47.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  48.     sn_160127_item_effect_add_state_normal(user, item, effect)
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 应用“状态解除”效果
  52.   #--------------------------------------------------------------------------
  53.   alias sn_160127_item_effect_remove_state item_effect_remove_state
  54.   def item_effect_remove_state(user, item, effect)
  55.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  56.     sn_160127_item_effect_remove_state(user, item, effect)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 应用“强化能力”效果
  60.   #--------------------------------------------------------------------------
  61.   alias sn_160127_item_effect_add_buff item_effect_add_buff
  62.   def item_effect_add_buff(user, item, effect)
  63.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  64.     sn_160127_item_effect_add_buff(user, item, effect)
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 应用“弱化能力”效果
  68.   #--------------------------------------------------------------------------
  69.   alias sn_160127_item_effect_add_debuff item_effect_add_debuff
  70.   def item_effect_add_debuff(user, item, effect)
  71.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  72.     sn_160127_item_effect_add_debuff(user, item, effect)
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 应用“解除能力强化”效果
  76.   #--------------------------------------------------------------------------
  77.   alias sn_160127_item_effect_remove_buff item_effect_remove_buff
  78.   def item_effect_remove_buff(user, item, effect)
  79.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  80.     sn_160127_item_effect_remove_buff(user, item, effect)
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 应用“解除能力弱化”效果
  84.   #--------------------------------------------------------------------------
  85.   alias sn_160127_item_effect_remove_debuff item_effect_remove_debuff
  86.   def item_effect_remove_debuff(user, item, effect)
  87.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  88.     sn_160127_item_effect_remove_debuff(user, item, effect)
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 应用“特殊效果”效果
  92.   #--------------------------------------------------------------------------
  93.   alias sn_160127_item_effect_special item_effect_special
  94.   def item_effect_special(user, item, effect)
  95.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  96.     sn_160127_item_effect_special(user, item, effect)
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 应用“能力提升”效果
  100.   #--------------------------------------------------------------------------
  101.   alias sn_160127_item_effect_grow item_effect_grow
  102.   def item_effect_grow(user, item, effect)
  103.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  104.     sn_160127_item_effect_grow(user, item, effect)
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 应用“学会技能”效果
  108.   #--------------------------------------------------------------------------
  109.   alias sn_160127_item_effect_learn_skill item_effect_learn_skill
  110.   def item_effect_learn_skill(user, item, effect)
  111.     return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0
  112.     sn_160127_item_effect_learn_skill(user, item, effect)
  113.   end
  114. end

最佳答案

查看完整内容

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) v ...

Lv5.捕梦者

梦石
0
星屑
33193
在线时间
10491 小时
注册时间
2009-3-15
帖子
4756
2
发表于 2021-10-3 15:37:22 | 只看该作者
本帖最后由 soulsaga 于 2021-10-4 16:16 编辑
fbeds 发表于 2021-10-4 09:18
谢谢,问题1已经解决了。现在关于问题2我找到了一个类似的脚本,但这个脚本的效果是只要伤害为0,则将伤 ...


RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2. def make_damage_value(user, item)
  3.     value = item.damage.eval(user, self, $game_variables)
  4.     value *= item_element_rate(user, item)
  5.     value *= pdr if item.physical?
  6.     value *= mdr if item.magical?
  7.     value *= rec if item.damage.recover?
  8.     value = apply_critical(value) if @result.critical
  9.     value = apply_variance(value, item.damage.variance)
  10.     value = apply_guard(value)
  11.     @result.make_damage(value.to_i, item, item_element_rate(user, item))
  12.   end
  13.   end
  14. class Game_ActionResult
  15. alias game_actionresult_make_damage make_damage
  16.   def make_damage(value, item, element)
  17.     value = 1 if value == 0 and element != 0.0
  18.     game_actionresult_make_damage(value, item)
  19.   end
  20. end

点评

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

评分

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

查看全部评分

回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33193
在线时间
10491 小时
注册时间
2009-3-15
帖子
4756
3
发表于 2021-10-3 18:10:56 | 只看该作者
第一个问题的问题...

RUBY 代码复制
  1. return if self.result.hp_damage <= 0 and self.result.mp_damage <= 0 and item.damage.type == 1


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

评分

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

查看全部评分

回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7033
在线时间
879 小时
注册时间
2015-2-10
帖子
248
4
 楼主| 发表于 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
复制代码
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7033
在线时间
879 小时
注册时间
2015-2-10
帖子
248
5
 楼主| 发表于 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
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7033
在线时间
879 小时
注册时间
2015-2-10
帖子
248
6
 楼主| 发表于 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
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 14:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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