那就看你目前想根据他的版本将他的数值改动部分修改为正常数值,还是分析出实现敌方等级跟随我方等级动态变化的MAIN.EXE代码部分,在原版的基础上再作修改了。
我给你简单分析一下计算攻击经验的部分,顺便教一下应该如何修改。前辈的分析其实已经很到位了,只是他没有把IDA中的字节码放出来,你可能看不出其中的对应关系。
seg002:D520 sub_3A440 proc far ; CODE XREF: sub_3AA64+302↓P
seg002:D520
seg002:D520 var_6= word ptr -6
seg002:D520 var_4 = word ptr -4
seg002:D520 var_2 = word ptr -2
seg002:D520 arg_0 = word ptr 6
seg002:D520
seg002:D520 C8 06 00 00 enter 6, 0
seg002:D524 57 push di
seg002:D525 56 push si
seg002:D526 8B 76 06 mov si, [bp+arg_0]
seg002:D529 2A FF sub bh, bh
seg002:D52B 8A 5C 08 mov bl, [si+8]
seg002:D52E 03 DB add bx, bx
seg002:D530 FF 70 04 push word ptr [bx+si+4]
seg002:D533 9A DA 6A F6 1C call sub_23A3A ; 获取攻击方等级
seg002:D538 2A E4 sub ah, ah
seg002:D53A 8B F8 mov di, ax
seg002:D53C 8A 5C 09 mov bl, [si+9]
seg002:D53F 2A FF sub bh, bh
seg002:D541 03 DB add bx, bx
seg002:D543 FF 70 04 push word ptr [bx+si+4]
seg002:D546 9A DA 6A F6 1C call sub_23A3A ; 获取防御方等级
seg002:D54B 2A E4 sub ah, ah
seg002:D54D 89 46 FA mov [bp+var_6], ax
seg002:D550 8A 5C 08 mov bl, [si+8]
seg002:D553 2A FF sub bh, bh
seg002:D555 03 DB add bx, bx
seg002:D557 FF 30 push word ptr [bx+si]
seg002:D559 9A F6 40 F2 2C call sub_31016 ; 判断攻击方属于我军还是敌军
seg002:D55E 0B C0 or ax, ax
seg002:D560 75 03 jnz short loc_3A485
seg002:D562 E9 87 00 jmp loc_3A50C
seg002:D565 loc_3A485: ; CODE XREF: sub_3A440+40↑j
seg002:D565 39 7E FA cmp [bp+var_6], di ; 比较防御方等级与攻击方等级
seg002:D568 73 07 jnb short loc_3A491 ; 无符号不小于跳转
seg002:D56A C7 46 FC 04 00 mov [bp+var_4], 4
seg002:D56F EB 0D jmp short loc_3A49E
seg002:D571 loc_3A491: ; CODE XREF: sub_3A440+48↑j
seg002:D571 8B 46 FA mov ax, [bp+var_6]
seg002:D574 2B C7 sub ax, di
seg002:D576 05 03 00 add ax, 3
seg002:D579 03 C0 add ax, ax
seg002:D57B 89 46 FC mov [bp+var_4], ax ; 基础经验 = (防御方等级-攻击方等级+3)*2
seg002:D57E loc_3A49E: ; CODE XREF: sub_3A440+4F↑j
seg002:D57E C7 46 FE 00 00 mov [bp+var_2], 0
seg002:D583 83 7E FE 00 cmp [bp+var_2], 0
seg002:D587 7C 0D jl short loc_3A4B6
seg002:D589 7F 06 jg short loc_3A4B1
seg002:D58B 83 7E FC 10 cmp [bp+var_4], 16
seg002:D58F 72 05 jb short loc_3A4B6
seg002:D591 loc_3A4B1: ; CODE XREF: sub_3A440+69↑j
seg002:D591 C7 46 FC 10 00 mov [bp+var_4], 16
seg002:D596 loc_3A4B6: ; CODE XREF: sub_3A440+67↑j ; sub_3A440+6F↑j ;
seg002:D596 8B 46 FC mov ax, [bp+var_4]
seg002:D599 89 44 25 mov [si+25h], ax
seg002:D59C 2B C0 sub ax, ax
seg002:D59E 89 46 FC mov [bp+var_4], ax
seg002:D5A1 8A 5C 09 mov bl, [si+9]
seg002:D5A4 2A FF sub bh, bh
seg002:D5A6 03 DB add bx, bx
seg002:D5A8 8B 44 1F mov ax, [si+1Fh]
seg002:D5AB 39 40 0F cmp [bx+si+0Fh], ax ; 检查防御方当前兵力与攻击伤害是否相等,不相等就是未击退
seg002:D5AE 75 36 jnz short loc_3A506
seg002:D5B0 8A 5C 09 mov bl, [si+9]
seg002:D5B3 2A FF sub bh, bh
seg002:D5B5 03 DB add bx, bx
seg002:D5B7 FF 30 push word ptr [bx+si]
seg002:D5B9 9A 9A AE F2 2C call sub_37DBA ; 获取防御方战场代码
seg002:D5BE 3C 0F cmp al, 0Fh ; 判断防守方是否为战场代码是否为0F敌军主将
seg002:D5C0 75 07 jnz short loc_3A4E9
seg002:D5C2 C7 46 FC 30 00 mov [bp+var_4], 48
seg002:D5C7 EB 1D jmp short loc_3A506
seg002:D5C9 loc_3A4E9: ; CODE XREF: sub_3A440+A0↑j
seg002:D5C9 39 7E FA cmp [bp+var_6], di
seg002:D5CC 76 07 jbe short loc_3A4F5
seg002:D5CE C7 46 FC 20 00 mov [bp+var_4], 32 ; 击退经验=32
seg002:D5D3 EB 11 jmp short loc_3A506
seg002:D5D5 loc_3A4F5: ; CODE XREF: _Cal经验获得_sub_3A440+AC↑j
seg002:D5D5 B8 40 00 mov ax, 64
seg002:D5D8 8B CF mov cx, di
seg002:D5DA 2B 4E FA sub cx, [bp+var_6]
seg002:D5DD 41 inc cx
seg002:D5DE 41 inc cx
seg002:D5DF 2B D2 sub dx, dx
seg002:D5E1 F7 F1 div cx ; 击退经验=64÷(攻击方等级-防御方等级+2)
seg002:D5E3 89 46 FC mov [bp+var_4], ax
seg002:D5E6 loc_3A506: ; CODE XREF: ...
seg002:D5E6 8B 46 FC mov ax, [bp+var_4]
seg002:D5E9 89 44 27 mov [si+27h], ax
seg002:D5EC loc_3A50C: ; CODE XREF: sub_3A440+42↑j
seg002:D5EC 5E pop si
seg002:D5ED 5F pop di
seg002:D5EE C9 leave
seg002:D5EF CA 02 00 retf 2
seg002:D5EF sub_3A440 endp
图片附件: UE中经验代码.png (2025-11-29 19:49, 333 K)

你可以对比图片和代码左侧的字节码至上而下的顺序,基本是一致的,不一致的地方你也不用管。
那么可以看到你之前找到的主将的固定经验,也就是seg002: D5C2这一行,对应着UE中30ee0h这一行的5个字节码C7 46 FC 30 00,那么修改哪个字节码可以实现改动主将的固定经验(48),显然是其中的30因为48的十六进制就是0x30,那么同样的修改击杀等级超过攻击方的普通敌军的击退经验(32),就是对应这UE中30ef0h这一行的20,将其修改为相应的十六进制数。
再举几个例子,如修改UE中30e80h这一行的04,就可以修改当攻击方等级大于防御方等级的固定经验(4);同时修改UE中30ea0h和30eb0h两行的10,就可以修改当攻击方等级小于防御方等级的最高加成经验;修改UE中30ef0h这一行的40,就可以修改当攻击方等级大于防御方等级的击退经验公式的被除数。
[ 本帖最后由 漫漫苦短 于 2025-11-29 20:05 编辑 ]