Project1
标题:
一个“较复杂”状态设置的问题
[打印本页]
作者:
负零
时间:
2014-5-21 17:18
标题:
一个“较复杂”状态设置的问题
本帖最后由 负零 于 2014-5-21 23:27 编辑
如何实现类似"防御力上升一个数值,这个数值是攻击力与魔法攻击力的差值。"
简单表达就是“防御力提升“攻击力与魔法攻击力的差值”这一数值”。
求大神指点下思路和实现方法。
------------------------------------------------------------------------------------以下为追加
(, 下载次数: 50)
上传
点击文件名下载附件
请问这个怎么破?
作者:
fux2
时间:
2014-5-21 17:42
Game_BattlerBase里面267行有一个定义
def param
复制代码
这个方法会取得某项属性,里面的value就是最终会返回的值,最后一行为矫正,可以先不管。
你是希望这个状态再其他状态之前生效,就写在
value = param_base(param_id) + param_plus(param_id)
复制代码
后面,如果想最后再加上这个属性,就写在
value *= param_rate(param_id) * param_buff_rate(param_id)
复制代码
后面,写什么内容呢,为了系统化一点,我们写成这样
value += param_spec(param_id)
复制代码
这一句加入的位置取决于你上面的选择。
然后在方法后面定义一个新方法。
(这里本来应该在增加和移除buff的方法做修改的,那样才是规范的
但这里图省事,就直接遍历状态了。)
def param_spec(param_id)
ret = 0 # 默认返回值
case param_id
when 3 # 判断通过这个方法获取的属性是不是def
if @states.include?(6) #如果拥有6号状态
ret += (self.mat-self.atk).abs
end
end
return ret
end
复制代码
加入这个方法之后你可以试试效果了。
另外提醒你一下,这个示范的写法是极其不规范的,
如果你只有少量特殊状态可以凑合用,大量的话还是建议规范写
在battler里面加入buff_exflags数组,add_state里面判断状态来改变buff_flags
往里存的是symbol名,然后写好方法,在获取属性里面遍历buff_exflag一个个call累加即可。
作者:
taroxd
时间:
2014-5-21 18:00
我还是来个更不规范的写法吧(50是状态id,未测试)
[pre lang="ruby" line="1"]
class Game_BattlerBase
alias_method :def_without_state, :def
def def
def_without_state + (state?(50) ? atk - mat : 0)
end
end[/pre]
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X5.0