轩辕春秋文化论坛 » 曹操传MOD制作交流 » 关于先手攻击代码的问题


2010-2-11 14:53 武骧金星
关于先手攻击代码的问题

我将[url]http://www.xycq.net/forum/viewthread.php?tid=194501[/url]中所讲到的先手攻击代码抄袭到EKD5.EXE上,结果发现指定人物确实是可以先手攻击,但是指定兵种和指定宝物特性都无效……

已经经过反复确认代码绝对没有错误……

能否请前辈诊断一下可能出现了什么错误呢?谢谢。

2010-2-12 11:48 武骧金星
关于先手攻击代码的问题2

教程代码源于[url]http://www.xycq.net/forum/viewthread.php?tid=196096&page=1#pid2717736[/url]

有一段代码是这样的:

0048CC8D   E8 DEE7FAFF      CALL 0043B470                           // 获取武将职业
0048CC92   E9 E2010000      JMP 0048CE79                             // 跳转
0048CE79   3C 40            CMP AL,40                                       // 比较武将职业是否满足预设值
0048CE7B   75 05            JNZ SHORT 0048CE82                      // 如果不满足,跳转判断武将ID
0048CE7D   E9 81020000      JMP 0048D103                            // 如果满足,跳转到0048D103
0048CE82   8B4D F4          MOV ECX,DWORD PTR SS:[EBP-C]   // 在武将职业不满足要求的前提下
0048CE85   E8 E627FDFF      CALL 0045F670                             // 获取武将ID
0048CE8A   3D 00040000      CMP EAX,400                              // 比较武将ID是否满足预设值
0048CE8F   0F85 47020000    JNZ 0048D0DC                            // 如果不满足,跳转判断宝物特效
0048CE95   E9 69020000      JMP 0048D103                             // 如果满足,跳转到0048D103

问题就在于0048D103处的代码是这样写的:

[color=Red]0048D103   6A 17            PUSH 17                                          //?为什么这里要判断宝物特效?[/color]
0048D105   8B4D F8          MOV ECX,DWORD PTR SS:[EBP-8]
0048D108   E8 6325FDFF      CALL 0045F670
0048D10D   8BC8             MOV ECX,EAX
0048D10F   6BC9 48          IMUL ECX,ECX,48
0048D112   81C1 681B4A00    ADD ECX,004A1B68
0048D118   E8 ECA8F7FF      CALL 00407A09                            // 这里判断了武将是否携带特效为17的道具,完全不能理解啊
0048D11D   85C0             TEST EAX,EAX
0048D11F  ^0F84 72FBFFFF    JE 0048CC97
0048D125  ^E9 CBFBFFFF      JMP 0048CCF5

既然在0048CE79和0048CE8A处已经判断过武将的职业和ID,并且满足了触发先手攻击的要求,那么就不需要再判断武将携带的道具了呀?因此我不明白0048D103处的代码的真实含义。

能否请方家指教一下?谢谢。

2010-2-12 12:24 武骧金星
关于宝物的判断

0048D0DC   6A 17            PUSH 17
0048D0DE   8B4D F4          MOV ECX,DWORD PTR SS:[EBP-C]
0048D0E1   E8 8A25FDFF      CALL 0045F670
0048D0E6   8BC8             MOV ECX,EAX
[color=Red]0048D0E8   6BC9 48          IMUL ECX,ECX,48[/color]
[color=Red]0048D0EB   81C1 681B4A00    ADD ECX,004A1B68[/color]
0048D0F1   E8 13A9F7FF      CALL 00407A09
0048D0F6   85C0             TEST EAX,EAX
0048D0F8  ^0F84 F7FBFFFF    JE 0048CCF5
0048D0FE  ^E9 94FBFFFF      JMP 0048CC97

能不能解释一下这里把ECX的值乘上48H,然后又加上004A1B68到底有什么意义?谢谢。

[color=Silver][[i] 本帖最后由 武骧金星 于 2010-2-12 13:25 编辑 [/i]][/color]

2010-2-13 09:01 godtype
两帖合并一起。
先回答最后面的问题,4A1B68是人物资料的内存地址,人物的五围、装备、等级经验等都存放在这里,详细请去看我写的教程以及里面的资料帖。
前面的问题,那段代码已经年代久远,有些问题也不出奇,现在都已经改掉换其他了,建议先参考一下我改的旧引擎3.0或4.0以及STAR的新引擎。我要过段时间再慢慢看回去。

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.