原帖内容
godtype

2010-7-27 16:15
孔明传经验获得的分析

物理攻击获得的经验值有两个,分别保存在内存46BCD8H+2EH和+32H里面,前者应该是基本经验,即发动了攻击就有,不管是否命中,后者是击倒敌人才有的。

00423B89  /$ 55             PUSH EBP
00423B8A  |. 8BEC           MOV EBP,ESP
00423B8C  |. 83EC 10        SUB ESP,10
00423B8F  |. 53             PUSH EBX
00423B90  |. 56             PUSH ESI
00423B91  |. 57             PUSH EDI
00423B92  |. 894D F0        MOV DWORD PTR SS:[EBP-10],ECX  <==固定的ECX=46BCD8

00423B95  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423B98  |. 33C9           XOR ECX,ECX
00423B9A  |. 8A48 10        MOV CL,BYTE PTR DS:[EAX+10]
00423B9D  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423BA0  |. 8B4C88 08      MOV ECX,DWORD PTR DS:[EAX+ECX*4+8]
00423BA4  |. E8 D756FEFF    CALL 00409280
00423BA9  |. 33C9           XOR ECX,ECX
00423BAB  |. 8AC8           MOV CL,AL
00423BAD  |. 894D F4        MOV DWORD PTR SS:[EBP-C],ECX
取出攻击方等级

00423BB0  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423BB3  |. 33C9           XOR ECX,ECX
00423BB5  |. 8A48 11        MOV CL,BYTE PTR DS:[EAX+11]
00423BB8  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423BBB  |. 8B4C88 08      MOV ECX,DWORD PTR DS:[EAX+ECX*4+8]
00423BBF  |. E8 BC56FEFF    CALL 00409280
00423BC4  |. 33C9           XOR ECX,ECX
00423BC6  |. 8AC8           MOV CL,AL
00423BC8  |. 894D F8        MOV DWORD PTR SS:[EBP-8],ECX
取出防御方等级

00423BCB  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423BCE  |. 33C9           XOR ECX,ECX
00423BD0  |. 8A48 10        MOV CL,BYTE PTR DS:[EAX+10]
00423BD3  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423BD6  |. 8B0C88         MOV ECX,DWORD PTR DS:[EAX+ECX*4]
00423BD9  |. E8 4256FEFF    CALL 00409220
00423BDE  |. 85C0           TEST EAX,EAX
00423BE0  |. 0F85 05000000  JNZ 00423BEB
00423BE6  |. E9 DD000000    JMP 00423CC8
判断攻击方是否我军,409220输出的EAX为0则表示非我军,不能得到经验。

00423BEB  |> 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
00423BEE  |. 3945 F8        CMP DWORD PTR SS:[EBP-8],EAX
00423BF1  |. 0F83 0C000000  JNB 00423C03
00423BF7  |. C745 FC 040000>MOV DWORD PTR SS:[EBP-4],4
00423BFE  |. E9 0E000000    JMP 00423C11
防御方等级小于攻击方等级,基本经验值固定为4

00423C03  |> 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
00423C06  |. 2B45 F4        SUB EAX,DWORD PTR SS:[EBP-C]
00423C09  |. 03C0           ADD EAX,EAX
00423C0B  |. 83C0 06        ADD EAX,6
00423C0E  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
防御方等级大于等于攻击方等级,基本经验值 = (防方等级 - 攻方等级 )*2 + 6

00423C11  |> 837D FC 10     CMP DWORD PTR SS:[EBP-4],10
00423C15  |. 0F8C 07000000  JL 00423C22
00423C1B  |. C745 FC 100000>MOV DWORD PTR SS:[EBP-4],10
基本经验最大为16

00423C22  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00423C25  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
00423C28  |. 8941 2E        MOV DWORD PTR DS:[ECX+2E],EAX
保存到46BCD8H+2EH里面

00423C2B  |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0

00423C32  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423C35  |. 33C9           XOR ECX,ECX
00423C37  |. 8A48 11        MOV CL,BYTE PTR DS:[EAX+11]
00423C3A  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423C3D  |. 8B4488 1A      MOV EAX,DWORD PTR DS:[EAX+ECX*4+1A]
00423C41  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
00423C44  |. 2B41 2A        SUB EAX,DWORD PTR DS:[ECX+2A]
00423C47  |. 0F85 59000000  JNZ 00423CA6
判断是否击倒敌人,46BCD8H+2AH是伤害值,没有击倒敌人则跳到后面。

00423C4D  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423C50  |. 33C9           XOR ECX,ECX
00423C52  |. 8A48 11        MOV CL,BYTE PTR DS:[EAX+11]
00423C55  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423C58  |. 8B0C88         MOV ECX,DWORD PTR DS:[EAX+ECX*4]
00423C5B  |. E8 70A6FFFF    CALL 0041E2D0
00423C60  |. 33C9           XOR ECX,ECX
00423C62  |. 8AC8           MOV CL,AL
00423C64  |. 83F9 0F        CMP ECX,0F
00423C67  |. 0F85 0C000000  JNZ 00423C79
00423C6D  |. C745 FC 300000>MOV DWORD PTR SS:[EBP-4],30
00423C74  |. E9 2D000000    JMP 00423CA6
41E2D0输出的值为0F表示敌军主将,击倒经验值直接为48。

41E2D0输出的值不为0F即非敌军主将的时候:
00423C79  |> 8B45 F4        MOV EAX,DWORD PTR SS:[EBP-C]
00423C7C  |. 3945 F8        CMP DWORD PTR SS:[EBP-8],EAX
00423C7F  |. 0F86 0C000000  JBE 00423C91
00423C85  |. C745 FC 200000>MOV DWORD PTR SS:[EBP-4],20
00423C8C  |. E9 15000000    JMP 00423CA6
防方等级大于攻方等级的时候,击倒经验值直接为32。

00423C91  |> 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
00423C94  |. 2B4D F8        SUB ECX,DWORD PTR SS:[EBP-8]
00423C97  |. 83C1 02        ADD ECX,2
00423C9A  |. B8 40000000    MOV EAX,40
00423C9F  |. 2BD2           SUB EDX,EDX
00423CA1  |. F7F1           DIV ECX
00423CA3  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
防方等级小于等于攻方等级的时候,击倒经验值 = 64 / (攻方等级 - 防方等级 + 2),结果取整数部分。

00423CA6  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
00423CA9  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
00423CAC  |. 8941 32        MOV DWORD PTR DS:[ECX+32],EAX
保存到46BCD8H+32H里面

00423CAF  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423CB2  |. 8378 2A 00     CMP DWORD PTR DS:[EAX+2A],0
00423CB6  |. 0F85 07000000  JNZ 00423CC3
00423CBC  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00423CBF  |. C168 2E 02     SHR DWORD PTR DS:[EAX+2E],2
判断46BCD8H+2AH里面的值是否为0,为0即没有命中,基本经验值除以4。

00423CC3  |> E9 00000000    JMP 00423CC8
00423CC8  |> 5F             POP EDI
00423CC9  |. 5E             POP ESI
00423CCA  |. 5B             POP EBX
00423CCB  |. C9             LEAVE
00423CCC  \. C3             RETN


[ 本帖最后由 阿尔法孝直 于 2010-8-13 21:12 编辑 ]

用户名时间功绩理由
阿尔法孝直 2010-7-27 16:22 +150




当前时区 GMT+8, 现在时间是 2025-7-28 18:34
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.008078 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP