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
# 如果指定技能的伤害判定优先于对角色ID对BOSS的伤害判定可以这样写
if self.is_a?(Game_Enemy)
if $game_switches[35]
if attacker.id == 1
self.damage = self.damage
else
self.damage = 0
end
else
self.damage = self.damage
end
if 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)
end
end
# 如果角色ID对BOSS的伤害判定优先于指定技能的判定可以这样写
if self.is_a?(Game_Enemy)
self.damage = self.damage
if 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)
end
if $game_switches[35]
if attacker.id == 1
self.damage = self.damage
else
self.damage = 0
end
end
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