Project1

标题: 会心一击公式可不可以这么写有没有问题 [打印本页]

作者: lirn    时间: 2014-9-6 22:49
标题: 会心一击公式可不可以这么写有没有问题
我记得,必杀公式如果是与属性挂钩,是这么改

在Game_Battler找到
1.        value = apply_critical(value) if @result.critical

修改为
1.        value = apply_critical(value*user.luk/self.luk.to_f) if @result.critical


如果我想改成必杀伤害在1.5倍的最低基础上与角色的幸运相关,改成这样会不会有问题?

1.        value = apply_critical(value*(1.5 +[user.luk-self.luk*0.5, 0] *0.1  ).to_f) if @result.critical



作者: 喵呜喵5    时间: 2014-9-6 23:48
本帖最后由 喵呜喵5 于 2014-9-6 23:50 编辑

默认脚本中,apply_critical(value)的作用就是value*3,于是你的这段代码在必杀时的伤害实际上等同于:
  1. value = (value*(1.5 +[user.luk-self.luk*0.5, 0] *0.1  ).to_f )*3 if 必杀一击
复制代码
结果是4.5倍最低基础,而不是你所希望的1.5倍最低基础

另外,在你的公式中出现的:[user.luk-self.luk*0.5, 0]

如果你是希望最小值为0而不出现负数的话,应该改成这样:
[user.luk-self.luk*0.5, 0].max

(.to_f 貌似是没有必要的)
作者: lirn    时间: 2014-9-7 11:49
喵呜喵5 发表于 2014-9-6 23:48
默认脚本中,apply_critical(value)的作用就是value*3,于是你的这段代码在必杀时的伤害实际上等同于:结果 ...

感谢,因为这个是人家告诉我的,我只是复制之后更改

to_f有什么作用?

然后那个为什么要加个.max?
作者: 喵呜喵5    时间: 2014-9-7 12:33
to_f : 转化成浮点数
首先你要理解,在电脑中,小数和整数是不一样的,整数间进行运算的结果永远只是整数,1和1.0在电脑中是不同的,因此如果几个整数间的运算希望结果是小数的话就要使用to_f,例如:
  1. (1/2) = 1
  2. (1/2).to_f = 1
  3. (1.to_f/2) = 0.5
  4. (1.0/2) = 0.5
复制代码
[user.luk-self.luk*0.5, 0]
这是一个数组,如果无法理解的话你可以这么想:

一个老太太 * 3 = 三个老太太,如何把三个老太太换成一个数字?

[user.luk-self.luk*0.5, 0].max
这是一个数字,数字的值是 user.luk-self.luk*0.5 和 0 中比较大的那个




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