- UID
- 494747
- 帖子
- 406
- 精华
- 2
- 威望
- 20
- 阅读权限
- 100
- 注册时间
- 2008-9-28
|
22#
发表于 2008-10-19 12:37
| 只看该作者
原帖由 らёгαρん 于 2008-10-19 00:16 发表
{int,round}(dmg*(1-mdef)/mdef-vmdef)*(1-属性%)*(1-种族%)*(1-防御性技能%)
将这个公式分为四段
dmg0=skill(matk)
dmg1=dmg0*(1-mdef/100)
dmg2=dmg1-vmdef
dmg3=dmg2*(1-属性%)*(1-种族%)*(1-防御性技能%)
在dmg1的阶段,mdef=100是否会导致dmg1=0,在这里暂时不讨论
但是从现实经验判断,当dmg1<vmdef的时候,是不会出现dmg2=0,而是强制输出1的
然后将dmg2=1带入dmg3,才可能会出现0伤。
这里有两种说法,第一种是不论后面减伤有多少,因为始终小于1,所以dmg3也始终小于1,小数舍去,则输出0。但是我有做过测试,当被攻击者仅使用一个HW盾,也就是说dmg3在取整前的实际值为0.7的时候,还是会输出1,所以我认为无条件舍去这个说法是不正确的。
另一种说法是普通的四舍五入,0.5进位为1,小于0.5的时候取整为0.但是同样测试,用冰箭术去打风1属性的对象,根据属性加成应该正好减为0.5。照例说应该进位为1,但实际输出却是0
所以我就是想知道的,到底当将1乘算为多少的时候,才是0到1的进位点。
dmg3既非floor{dmg2*(1-属性%)*(1-种族%)*(1-防御性技能%)},也非round{dmg2*(1-属性%)*(1-种族%)*(1-防御性技能%)},那到底是什么,这是问题所在……
[ 本帖最后由 银色的永眠 于 2008-10-19 14:36 编辑 ] |
|