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

Project1

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

[已经过期] Game_Battler 3伤害公式上的一点问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
371
在线时间
120 小时
注册时间
2012-11-20
帖子
64
跳转到指定楼层
1
发表于 2018-5-17 11:45:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
因为之前做了一个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开关的判定,但好像确实有点蠢
等一个指点

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

2
发表于 2018-5-17 12:59:39 | 只看该作者
肯定有顺序的啊。
你要是先执行了上面的当ID等于1时伤害是0
然后你再判断下面两个,那就肯定是按下面两个的伤害算。

评分

参与人数 1+1 收起 理由
qq381055296 + 1 是这个样子的,我把两段脚本互换位置后,就.

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

3
发表于 2018-5-17 13:18:21 | 只看该作者
  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
复制代码
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
4
发表于 2018-5-17 13:46:21 | 只看该作者
本帖最后由 灯笼菜刀王 于 2018-5-17 13:49 编辑

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

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

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

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

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

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

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 16:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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