Project1

标题: Game_Battler 3伤害公式上的一点问题 [打印本页]

作者: qq381055296    时间: 2018-5-17 11:45
标题: Game_Battler 3伤害公式上的一点问题
因为之前做了一个BOSS,设定是这样的,只允许队伍内的某个职业攻击,其他职业攻击无效
所以用开关控制了一下
    if self.is_a?(Game_Enemy) && $game_switches[35]
      if attacker.id == 1
      self.damage = self.damage
    else
      self.damage = 0
    end
  end

这就是说打开35开关后,除了ID是1的这个角色,其他任何角色都没有办法对怪物造成伤害
本来是挺合理的
但是,我之前有做一些固定技能
比如这种:
           skill.id  == 167 or skill.id  == 168
           self.damage = user.int / 20 + rand(300)

又或者这种可以升级的技能
           elsif skill.id == 151
           self.damage = $game_variables[542] * (user.maxhp / 45) + rand(500)

然后这个脚本就冲突了,固定伤害会无视上面的那个开关设定直接造成伤害
我想问的是脚本存在顺序性么,比如我调整两段脚本的顺序是否有用呢

该如何避免这种问题,我想的笨办法是,在每一个固定伤害技能前面都加一个35开关的判定,但好像确实有点蠢
等一个指点
作者: yang1zhi    时间: 2018-5-17 12:59
肯定有顺序的啊。
你要是先执行了上面的当ID等于1时伤害是0
然后你再判断下面两个,那就肯定是按下面两个的伤害算。
作者: cinderelmini    时间: 2018-5-17 13:18
  1.   # 如果指定技能的伤害判定优先于对角色ID对BOSS的伤害判定可以这样写
  2.   if self.is_a?(Game_Enemy)
  3.     if $game_switches[35]
  4.       if attacker.id == 1
  5.         self.damage = self.damage
  6.       else
  7.         self.damage = 0
  8.       end
  9.     else
  10.       self.damage = self.damage
  11.     end
  12.     if skill.id  == 167 or skill.id  == 168
  13.       self.damage = user.int / 20 + rand(300)
  14.     elsif skill.id == 151
  15.       self.damage = $game_variables[542] * (user.maxhp / 45) + rand(500)
  16.     end
  17.   end
  18.   
  19.   # 如果角色ID对BOSS的伤害判定优先于指定技能的判定可以这样写
  20.   if self.is_a?(Game_Enemy)
  21.     self.damage = self.damage
  22.     if skill.id  == 167 or skill.id  == 168
  23.       self.damage = user.int / 20 + rand(300)
  24.     elsif skill.id == 151
  25.       self.damage = $game_variables[542] * (user.maxhp / 45) + rand(500)
  26.     end
  27.     if $game_switches[35]
  28.       if attacker.id == 1
  29.         self.damage = self.damage
  30.       else
  31.         self.damage = 0
  32.       end
  33.     end
  34.   end
复制代码

作者: 灯笼菜刀王    时间: 2018-5-17 13:46
本帖最后由 灯笼菜刀王 于 2018-5-17 13:49 编辑

ruby允许给同一个变量多次赋值,后面的会覆盖前面的。

你自己观察下可以发现,这些东西都是给 self.damage 这个变量赋值的。根据上面的规则,排越后面优先度就越大

所以,根据你自己的设定,调整它们的顺序就可以了。但是,这样相当于给了复数条件了,而且会互相干扰。

所以,你也可以用一个条件分歧给它们套起来 ,事件上表现就是

当XXX满足的时候
   self.damage = XXX
除此以外 XXX满足的时候
   self.damage = XXX
除此以外
   XXXXX
结束

脚本写法
if xxxxxxxx
  执行
elsif xxxxxxxxx
  执行
else
  执行
end

这样,就是优先度从上到下了,当满足前面一个条件,下面的就不再执行,这样就可以避免“同时有N个结果出现”




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