Project1

标题: 求一个吸收伤害的护盾脚本 [打印本页]

作者: newface    时间: 2019-2-17 21:23
标题: 求一个吸收伤害的护盾脚本
在施加护盾状态后,单体或全体友方得到一个吸收指定变量当前数值的护盾,比如变量501的数值是1000,就是给每个被施加护盾状态的人加1000护盾,可以每人吸收1000伤害。在护盾存在时,受到伤害时会显示“吸收了xx点伤害,还剩xx点护盾值”,并且如果一次伤害大于护盾值满额,会吸收掉护盾值等同的伤害后才去扣hp.

我试过“这个护盾脚本,大家看看”帖子中楼下的改良脚本,但是有很多问题,所以另外开帖寻求帮助,谢谢大家。
作者: KB.Driver    时间: 2019-2-18 10:07
Project1.zip (1.43 MB, 下载次数: 128, 售价: 10 星屑)
写了一个多小时,新建工程测试通过。




作者: newface    时间: 2019-2-19 09:24
KB.Driver 发表于 2019-2-18 10:07
写了一个多小时,新建工程测试通过。

多谢,马上试试
作者: newface    时间: 2019-2-19 09:57
KB.Driver 发表于 2019-2-18 10:07
写了一个多小时,新建工程测试通过。

攻击敌人或者被攻击时弹出 脚本“game_battle”的第30行发生了 ArgumentError wrong number of argument(3 for 2)

game_battle 是插入的脚本

# ● 应用对于使用对象以外的效果
  #--------------------------------------------------------------------------
  def item_global_effect_apply(effect)
    if effect.code == EFFECT_COMMON_EVENT
      $game_variables[10] = (self.is_a?(Game_Actor) ? @actor_id : @enemy_id)
      $game_temp.reserve_common_event(effect.data_id)
    end
  end
  #--------------------------------------------------------------------------
  # ● 应用技能/物品的效果
  #--------------------------------------------------------------------------
  def item_apply(user, item)
    @result.clear
    @result.used = item_test(user, item)
    @result.missed = (@result.used && rand >= item_hit(user, item))
    @result.evaded = ([email protected] && rand < item_eva(user, item))
    if @result.hit?
      p "HIT"
      unless item.damage.none?
        @result.critical = (rand < item_cri(user, item))
        make_damage_value(user, item)   #30行在此
        execute_damage(user)
      end
      
      
      if item.ex_damage?
        p "Ttttt"
        a = user.atk_elements.include?(item.damage.element_id) ? item.ex_state * 2 : item.ex_state
        b = (item_element_rate(user, item)*a)*(85+rand(30))/100.0
        exd = b.round
        @ex_damage = exd.to_s
        self.ex += exd
      end
        
      #新增属性
      if self.is_a?(Game_Actor)
      item.note.scan(/<命中 (.*) (.*)>/).inject([]) do |r, i|
        self.add_params_push(i[0], i[1])
      end
      end
      
      item.effects.each {|effect| item_effect_apply(user, item, effect) }
      item_user_effect(user, item)
    end
  end
  #--------------------------------------------------------------------------
  # ● 自动获得战斗图
  #--------------------------------------------------------------------------
  def battler_name
    name = @battler_name
    states.each {|s| name = name + "_" + s.name if s.show_lihui? }
   #name = @battler_name unless FileTest.exists?("Graphics/Battlers/" + name + ".png")
    return name
  end
end




作者: KB.Driver    时间: 2019-2-19 11:15
newface 发表于 2019-2-19 09:57
攻击敌人或者被攻击时弹出 脚本“game_battle”的第30行发生了 ArgumentError wrong number of argument( ...

你先试试把我的脚本放在你这个出错脚本的下面试试,不行的话麻烦你附上你的战斗系统脚本。

说实话,去跟别的脚本兼容,这种问题最麻烦了。
你截图的那段毫无疑问全部是用的覆盖定义,兼容性最差的。
如果是你自己写的,建议你学一下利用alias 别名 的猴子补丁。
作者: newface    时间: 2019-2-19 14:50
KB.Driver 发表于 2019-2-19 11:15
你先试试把我的脚本放在你这个出错脚本的下面试试,不行的话麻烦你附上你的战斗系统脚本。

说实话,去跟 ...

放到下面去不会出错了,但是也没有护盾效果了,就是加了护盾也没有任何减免伤害提示,超出了护盾值的伤害护盾也不会解除。
作者: newface    时间: 2019-2-19 14:51
KB.Driver 发表于 2019-2-19 11:15
你先试试把我的脚本放在你这个出错脚本的下面试试,不行的话麻烦你附上你的战斗系统脚本。

说实话,去跟 ...

不是我自己写的,也是积累了很久的别人的脚本互相叠加的效果,战斗脚本的名称是哪个呢?
作者: newface    时间: 2019-2-19 15:08
KB.Driver 发表于 2019-2-19 11:15
你先试试把我的脚本放在你这个出错脚本的下面试试,不行的话麻烦你附上你的战斗系统脚本。

说实话,去跟 ...

这应该是你要的脚本?

Scripts_Push.rar

20.61 KB, 下载次数: 125

Scripts.rar

227.91 KB, 下载次数: 101


作者: KB.Driver    时间: 2019-2-19 15:25
newface 发表于 2019-2-19 15:08
这应该是你要的脚本?

看了一下,你这默认脚本(Scene_Battle)都被改的千疮百孔了。
还有其他一大堆乱七八糟的定义,方法。
我都不清楚不加我这个脚本它原来能不能好好运行。

说实话,你这个系统实在是太混乱了,还是找个大神给你重新写一个比较好。

作者: newface    时间: 2019-2-19 16:02
KB.Driver 发表于 2019-2-19 15:25
看了一下,你这默认脚本(Scene_Battle)都被改的千疮百孔了。
还有其他一大堆乱七八糟的定义,方法。
我 ...

哈哈,没办法,当初没有经验,缺乏规划,功能是一个个想到后再一个个添加的,之前就有过几次兼容问题,我也没报多大希望,试试联系消失已久的原脚本帝吧,这个脚本让你费心了,非常感谢!
作者: newface    时间: 2019-2-20 10:02
KB.Driver 发表于 2019-2-19 15:25
看了一下,你这默认脚本(Scene_Battle)都被改的千疮百孔了。
还有其他一大堆乱七八糟的定义,方法。
我 ...

啊,经过调试可以用了,但是发现一个问题,就是您给我的原版工程中,护盾值耗尽后护盾状态也不会消失……
还请麻烦能不能补一个护盾值为0时护盾状态消失的语句?
作者: KB.Driver    时间: 2019-2-20 13:05
newface 发表于 2019-2-20 10:02
啊,经过调试可以用了,但是发现一个问题,就是您给我的原版工程中,护盾值耗尽后护盾状态也不会消失…… ...

RUBY 代码复制
  1. class Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● [追加]护盾属性读取
  4.   #--------------------------------------------------------------------------
  5.   def barrier
  6.     @barrier >= 0 ? @barrier : (@barrier = 0)
  7.   end
  8.   #--------------------------------------------------------------------------
  9.   # ● [别名修改]受到伤害时解除状态
  10.   #--------------------------------------------------------------------------
  11.   alias remove_states_by_damage_for_barrier remove_states_by_damage
  12.   def remove_states_by_damage
  13.     remove_states_by_damage_for_barrier # 原方法
  14.     barrier_states = states.select{|state| state.barrier_value(self) != 0}
  15.     if !barrier_states.empty?
  16.       total_barrier = barrier_states.map{|state|state.barrier_value(self)}.inject(:+)
  17.       barrier_states.sort_by{|state|state.barrier_value(self)}.each do |state|
  18.         if total_barrier - @barrier >= state.barrier_value(self)
  19.           total_barrier -= @barrier
  20.           remove_state(state.id)
  21.         end
  22.       end
  23.     end
  24.   end
  25. end


找个空白的地方加入这个看看
作者: newface    时间: 2019-2-21 16:36
KB.Driver 发表于 2019-2-20 13:05
class Game_Battler
  #--------------------------------------------------------------------------
  ...

经过测试,运行正常,目前没有出错,非常感谢!
作者: 踢腿水上飘    时间: 2019-2-27 09:59
这个脚本不错,比我用的那个好像好一点




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