关于exp 封顶情况的解释
在d2的各种数据计算中,对单个数据会有不同的上限。
一般来说是4294967295(或者十六进制的FFFF FFFF)和2147483647(或者是十六进制的7FFF FFFF)。
任何游戏计算中的中间数据都不能突破这种上限。
Peter Hu(应该是游戏开发人员)在代码中增加了大量的检测函数以确保数据在超过最大上限的时候停留在最大值而不是造成溢出。
由此我们来看看kb的情况:
hell baal exp1=4536276
8pp game下,exp2=4536276*(1+7/2)= 20413242
考虑最多的exp bonus情况,exp3= 20413242*(1+89/256*7)=70090780
还是远远小于2147483647,怎么解释在kb时出现的exp封顶呢?
这是因为在游戏中,由于在十六进制表达下,除法的计算与乘法相比要消耗很多的时间。
所以系统通常优先执行乘法运算,然后将部分除法的除数相乘后再做一次总的除法,从而减少游戏计算的时间。
只有一种情况例外,即除数是2的若干次方的情况下。此时在十六进制意义下相除只是简单的右移。
回头再来看游戏对于kb exp的计算。
monstats.txt
hell difficulty Baal, Exp(H)=6460
monlevel.txt
L-XP(H) for a level 99=70221
所以hell baal exp1=6460*70221%=4536276
但是再考虑到上面所说的情况,真实的计算过程应该是
6460*70221=453627660,而除以100的计算被推后。
如果在exp计算中起作用的上限是7FFF FFFF(2147483647)的话,是可以在3-4 pp game中达到的。
因为在exp计算中,真正的上限和乘除法的计算序列是未知的,所以无法准确的得出不同情况下kb的exp封顶人数。
关于pet经验的获得:
一个级别为X的pet杀死某怪物所得的经验等于同级别的玩家杀死该怪物应该获得的经验值。
玩家或者玩家的随从(如nec的骷髅,dru的狼)杀死怪物时,pet 获得经验为应得经验的1/3。
pet一次最多只能获得从当前级别升级所需的全部经验的1/64。
pet升级所需经验计算
experience_function(level) = (Exp/Lvl) * (level+1) * level ^ 2
其中level为pet当前级别:
Exp/Lvl可在下表中对应查找(CF hireling.txt)
Normal Nightmare Hell
Rogue Scout, Fire 100 110 120
Rogue Scout, Ice 105 115 125
Desert Warrior 110 120 130
Eastern Sorceror, Fire 110 120 130
Eastern Sorceror, Lightning 110 120 130
Eastern Sorceror, Cold 120 130 140
Barbarian 120 130 140
由此我们可以看到除了力量,敏捷,技能级别等等因素之外,从普通雇佣的pet比地狱雇佣的pet的另一好处:升级所需的exp少(不过,从低级升到跟地狱难度佣兵相当的等级需要大量的时间)