Project1

标题: 一个“较复杂”状态设置的问题 [打印本页]

作者: 负零    时间: 2014-5-21 17:18
标题: 一个“较复杂”状态设置的问题
本帖最后由 负零 于 2014-5-21 23:27 编辑

如何实现类似"防御力上升一个数值,这个数值是攻击力与魔法攻击力的差值。"
简单表达就是“防御力提升“攻击力与魔法攻击力的差值”这一数值”。
求大神指点下思路和实现方法。
------------------------------------------------------------------------------------以下为追加
请问这个怎么破?

作者: fux2    时间: 2014-5-21 17:42
Game_BattlerBase里面267行有一个定义
  1. def param
复制代码
这个方法会取得某项属性,里面的value就是最终会返回的值,最后一行为矫正,可以先不管。
你是希望这个状态再其他状态之前生效,就写在
  1. value = param_base(param_id) + param_plus(param_id)
复制代码
后面,如果想最后再加上这个属性,就写在
  1. value *= param_rate(param_id) * param_buff_rate(param_id)
复制代码
后面,写什么内容呢,为了系统化一点,我们写成这样
  1. value += param_spec(param_id)
复制代码
这一句加入的位置取决于你上面的选择。
然后在方法后面定义一个新方法。
(这里本来应该在增加和移除buff的方法做修改的,那样才是规范的
但这里图省事,就直接遍历状态了。)
  1.   def param_spec(param_id)
  2.     ret = 0 # 默认返回值
  3.     case param_id
  4.     when 3 # 判断通过这个方法获取的属性是不是def
  5.       if @states.include?(6) #如果拥有6号状态
  6.         ret += (self.mat-self.atk).abs
  7.       end
  8.     end
  9.     return ret
  10.   end
复制代码
加入这个方法之后你可以试试效果了。
另外提醒你一下,这个示范的写法是极其不规范的,
如果你只有少量特殊状态可以凑合用,大量的话还是建议规范写
在battler里面加入buff_exflags数组,add_state里面判断状态来改变buff_flags
往里存的是symbol名,然后写好方法,在获取属性里面遍历buff_exflag一个个call累加即可。
作者: taroxd    时间: 2014-5-21 18:00

我还是来个更不规范的写法吧(50是状态id,未测试)
RUBY 代码复制
  1. class Game_BattlerBase
  2.   alias_method :def_without_state, :def
  3.   def def
  4.     def_without_state + (state?(50) ? atk - mat : 0)
  5.   end
  6. end





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