Project1

标题: 写相关的吸收伤害反弹伤害的脚本出了很多问题 [打印本页]

作者: chen12311    时间: 2024-9-7 01:20
标题: 写相关的吸收伤害反弹伤害的脚本出了很多问题
本帖最后由 chen12311 于 2024-9-7 15:06 编辑

比如开开关时自己对自己没有造成伤害,还有取消敌人相关的buff然后开关关不掉了,就会一直没有伤害等等,所以求帮助
以下为代码(注:是给敌人使用的技能,我知道我写的代码很抽象,所以见谅
RUBY 代码复制
  1. module Absorb_text
  2.   TEXT_TE=""
  3.   TEXT_TEXT="%s吸收了%d点伤害。"
  4. end
  5. class Game_Battler < Game_BattlerBase
  6.   alias make_damage_value_absorb make_damage_value
  7.   def make_damage_value(user, item)
  8.     if $game_switches[122]==true
  9.       @value_absorb=0
  10.       value = item.damage.eval(user, self, $game_variables)
  11.       value *= item_element_rate(user, item)
  12.       value *= pdr if item.physical?
  13.       value *= mdr if item.magical?
  14.       value *= rec if item.damage.recover?
  15.       value = apply_critical(value) if @result.critical
  16.       value = apply_variance(value, item.damage.variance)
  17.       value = apply_guard(value)
  18.       @value_absorb=value
  19.       $game_variables[92]+=@value_absorb
  20.       @result.make_damage(value.to_i, item)
  21.     elsif $game_switches[122]==false
  22.       make_damage_value_absorb(user,item)
  23.     end
  24.   end
  25. end
  26. class Game_ActionResult
  27.   alias make_damage_absorb make_damage
  28.   def make_damage(value, item)
  29.     if $game_switches[121]==true
  30.       @value_absorb_1=value
  31.       value=0
  32.       @critical = false if value == 0
  33.       @hp_damage = value if item.damage.to_hp?
  34.       @mp_damage = value if item.damage.to_mp?
  35.       @mp_damage = [@battler.mp, @mp_damage].min
  36.       @hp_drain = @hp_damage if item.damage.drain?
  37.       @mp_drain = @mp_damage if item.damage.drain?
  38.       @hp_drain = [@battler.hp, @hp_drain].min
  39.       @success = true if item.damage.to_hp? || @mp_damage != 0
  40.     elsif $game_switches[121]==false
  41.       make_damage_absorb(value, item)
  42.     end
  43.   end
  44.   def enemy_absorb_text
  45.     if $game_switches[121]==true
  46.       fmt = @battler.actor? ? Absorb_text::TEXT_TE : Absorb_text::TEXT_TEXT
  47.       sprintf(fmt,@battler.name, @value_absorb_1)
  48.     end
  49.   end
  50.   alias hp_damage_text_absorb hp_damage_text
  51.   def hp_damage_text
  52.     if $game_switches[121]==true
  53.       if @hp_drain > 0
  54.         fmt = @battler.actor? ? Vocab::ActorDrain : Absorb_text::TEXT_TE
  55.         sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
  56.       elsif @hp_damage > 0
  57.         fmt = @battler.actor? ? Vocab::ActorDamage : Absorb_text::TEXT_TE
  58.         sprintf(fmt, @battler.name, @hp_damage)
  59.       elsif @hp_damage < 0
  60.         fmt = @battler.actor? ? Vocab::ActorRecovery : Absorb_text::TEXT_TE
  61.         sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
  62.       else
  63.         fmt = @battler.actor? ? Vocab::ActorNoDamage : Absorb_text::TEXT_TE
  64.         sprintf(fmt, @battler.name)
  65.       end
  66.     elsif $game_switches[121]==false
  67.       hp_damage_text_absorb
  68.     end
  69.   end
  70. end
  71. class Window_BattleLog
  72.   alias display_damage_enemy_absorb display_damage
  73.   def display_damage(target, item)
  74.     display_hp_absorb(target, item)# if target.result.barrier?#
  75.     display_damage_enemy_absorb(target, item)
  76.   end
  77.   def display_hp_absorb(target, item)
  78.     add_text(target.result.enemy_absorb_text)
  79.     wait
  80.   end
  81. end


作者: 百里_飞柳    时间: 2024-9-7 09:15
额每个战斗角色都会走这一套流程,居然用全局开关共用吗?
建议在 game battler 里面增加各个角色自己的实例变量
然后在受到伤害前判断,之后在别的地方调用这个角色的实例变量,在伤害处理结束后关闭该实例变量
作者: chen12311    时间: 2024-9-7 10:16
本帖最后由 chen12311 于 2024-9-7 12:27 编辑
百里_飞柳 发表于 2024-9-7 09:15
额每个战斗角色都会走这一套流程,居然用全局开关共用吗?
建议在 game battler 里面增加各个角色自己的实 ...


但我这个是要给敌人用的技能,那应该怎么做
作者: chen12311    时间: 2024-9-7 22:17
本帖最后由 chen12311 于 2024-9-7 23:20 编辑

还是有个问题,就是给敌人附加效果依旧没法关闭开关,我想要的效果是给敌人附加无法行动的状态时开关关闭,我知道问题但不知道怎么解决,求解答
RUBY 代码复制
  1. module Absorb_text
  2.   TEXT_TE=""
  3.   TEXT_TEXT="%s吸收了%d点伤害。"
  4. end
  5. class Game_Battler < Game_BattlerBase
  6.   alias make_damage_value_absorb make_damage_value
  7.   def make_damage_value(user, item)
  8.     if $game_switches[122]==true
  9.       @value_absorb=0
  10.       value = item.damage.eval(user, self, $game_variables)
  11.       value *= item_element_rate(user, item)
  12.       value *= pdr if item.physical?
  13.       value *= mdr if item.magical?
  14.       value *= rec if item.damage.recover?
  15.       value = apply_critical(value) if @result.critical
  16.       value = apply_variance(value, item.damage.variance)
  17.       value = apply_guard(value)
  18.       @result.make_damage(value.to_i, item)
  19.       if @battler.actor? ==false
  20.         @value_absorb=value
  21.         $game_variables[92]+=@value_absorb
  22.       end
  23.     elsif $game_switches[122]==false
  24.       make_damage_value_absorb(user,item)
  25.     end
  26.   end
  27. end
  28. class Game_ActionResult
  29.   alias make_damage_absorb make_damage
  30.   def make_damage(value, item)
  31.     if $game_switches[121]==true && @battler.actor? ==false
  32.       if value==0
  33.         value_absorb_1=0
  34.       elsif value>0
  35.         @value_absorb_1=value
  36.         value=0
  37.       end
  38.       @critical = false if value == 0
  39.       @hp_damage = value if item.damage.to_hp?
  40.       @mp_damage = value if item.damage.to_mp?
  41.       @mp_damage = [@battler.mp, @mp_damage].min
  42.       @hp_drain = @hp_damage if item.damage.drain?
  43.       @mp_drain = @mp_damage if item.damage.drain?
  44.       @hp_drain = [@battler.hp, @hp_drain].min
  45.       @success = true if item.damage.to_hp? || @mp_damage != 0
  46.     elsif $game_switches[121]==false || @battler.actor? ==true
  47.       make_damage_absorb(value, item)
  48.     end
  49.   end
  50.   def enemy_absorb_text
  51.     if $game_switches[121]==true && @value_absorb_1>0
  52.       fmt = @battler.actor? ? Absorb_text::TEXT_TE : Absorb_text::TEXT_TEXT
  53.       sprintf(fmt,@battler.name, @value_absorb_1)
  54.     end
  55.   end
  56.   alias hp_damage_text_absorb hp_damage_text
  57.   def hp_damage_text
  58.     if $game_switches[121]==true
  59.       if @hp_drain > 0
  60.         fmt = @battler.actor? ? Vocab::ActorDrain : Absorb_text::TEXT_TE
  61.         sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
  62.       elsif @hp_damage > 0
  63.         fmt = @battler.actor? ? Vocab::ActorDamage : Absorb_text::TEXT_TE
  64.         sprintf(fmt, @battler.name, @hp_damage)
  65.       elsif @hp_damage < 0
  66.         fmt = @battler.actor? ? Vocab::ActorRecovery : Absorb_text::TEXT_TE
  67.         sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
  68.       else
  69.         fmt = @battler.actor? ? Vocab::ActorNoDamage : Absorb_text::TEXT_TE
  70.         sprintf(fmt, @battler.name)
  71.       end
  72.     elsif $game_switches[121]==false
  73.       hp_damage_text_absorb
  74.     end
  75.   end
  76. end
  77. class Window_BattleLog
  78.   alias display_damage_enemy_absorb display_damage
  79.   def display_damage(target, item)
  80.     display_hp_absorb(target, item)# if target.result.barrier?#
  81.     display_damage_enemy_absorb(target, item)
  82.   end
  83.   def display_hp_absorb(target, item)
  84.     add_text(target.result.enemy_absorb_text)
  85.     wait
  86.   end
  87. end





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