当你在非资料片模式下,在地狱难度最后杀Diablo的时候,如果是8个玩家结盟在Diablo的场景,有人就会要求等级最低的离队。
这看似是一个奇怪的要求,但是如果没人离队,就是说如果是8pp杀Diablo的话,那么每个玩家只能获得1点经验,而不是预期的大量经验。
同样的情形发生在资料片模式地狱难度杀Baal五小队的第二小队的时候,如果没人离队而且8个玩家都在场,那么每个玩家只能获得1点经验。BN上有一些老玩家习惯在杀第二小队的时候,等级最高的离队,杀完第二小队后,再重新组队。
这个问题解决方法只有一个:杀Diablo或者第二小队的时候,最多保持7个玩家在场。
如果你想深究这个原因,你回去查询IMPK的经验计算过程,“Experience计算的详细流程”http://impk.blizzard.cn/ShowTopic-546719-34.html
你会发现其中并没有说明为何出现这种情况。因此我决定研究一下程序代码,以找到真正的原因。
很容易,可以发现游戏中经验值的计算代码,而问题出在结盟时候经验分配的计算上,代码如下(1.11b的代码,1.10的算法一样)
.text:6FC9E04D
loc_6FC9E04D:
; CODE XREF: PersonExpGain2+50j
.text:6FC9E04D
mov
esi, [esp+70h] ;
引入结盟因素,基础经验值=0x0039FD64
.text:6FC9E051
lea
eax, [ecx-1]
; 同一区域内在exp分配范围内结盟玩家数
.text:6FC9E054
imul eax,
esi
; 0x0195EDBC=exp*(player-1)
.text:6FC9E057
imul eax,
59h
; 0x8D1FA65C=exp*(player-1)*89
.text:6FC9E05A
cdq
; EDX=FFFFFFFF EAX=8D1FA65C
.text:6FC9E05B
and
edx,
0FFh
; EDX=FF EAX=8D1FA65C
.text:6FC9E061
add
eax,
edx
; EAX=8D1FA75B=8D1FA65C+FF
.text:6FC9E063
sar
eax,
8
; EAX=EAX/256=FF8D1FA7