Board logo

标题: 请教一个代码问题 [打印本页]

作者: YSH0212    时间: 2012-11-2 23:52     标题: 请教一个代码问题

模仿别人写了一段安排人物特效的代码,本来以为可以了,但刚发现所有人都有了这种效果……
下面一段时判断武将的写法,不知道哪里出问题了,各位看看,指点一下。5.0引擎。



MOV EAX,DWORD PTR SS:[EBP-8]
MOV CL,BYTE PTR DS:[EAX+1]
AND ECX,0FF
IMUL ECX,ECX,24
ADD ECX,Ekd5.004B2C50                  
CALL Ekd5.0045F670
CMP EAX,4 -------武将data号                  
JE Ekd5.004231BD    -----执行代码
作者: WHITESHIP    时间: 2012-11-3 00:04

按F2设断点在cmp eax,4处,然后F9运行游戏。随便让一个人触发特效。
系统会自动跳转到断点处,此时看下[strike]右下角[/strike]eax是多少,如果和那个人的武将编号不同,那就说明代码有问题。

说错了,eax在反汇编窗口的左下角。

[ 本帖最后由 WHITESHIP 于 2012-11-3 00:17 编辑 ]
作者: godtype    时间: 2012-11-3 09:58

JE Ekd5.004231BD
的下一行是什么内容?如果是需要给4号武将的效果,那上面这行就应该用jnz
作者: YSH0212    时间: 2012-11-3 10:43     标题: 回复 #2 WHITESHIP 的帖子

果然不对,eax居然是是0000FFFF,这是什么情况……
作者: YSH0212    时间: 2012-11-3 10:47     标题: 回复 #3 godtype 的帖子

应该是用je,后面的代码是不执行特效的代码,跳转过去的是人物特效代码。
你们平时给人物设置特效一般怎么写,我觉得是前面
MOV EAX,DWORD PTR SS:[EBP-8]
MOV CL,BYTE PTR DS:[EAX+1]
这里给eax赋值什么的出了问题。因为cmp eax,4这里的eax的值一直是0000ffff
作者: WHITESHIP    时间: 2012-11-3 12:49     标题: 回复 #5 YSH0212 的帖子

你把
MOV EAX,DWORD PTR SS:[EBP-8]
MOV CL,BYTE PTR DS:[EAX+1]
这两条也设断点测试一下。可能调用武将代码的ECX就错了。
我从没写过特效……这个是我的弱项。这里我不太记得了,ECX本应该是什么来着……?
如果错误要修正的话,就要看右下角的堆栈代码,然后来计算要读取哪个栈。
作者: 513633522    时间: 2012-11-3 13:31



QUOTE:
CMP EAX,4 -------武将data号                  
JE Ekd5.004231BD    -----执行代码

后面的代码是不执行特效的代码,跳转过去的是人物特效代码。

把那一段全部贴出来看看  这样  不执行特效的代码 后 跳过 特效代码 了没

eax的值一直是0000ffff   调用函数之前清空下看看

5.0引擎表示没看过

[ 本帖最后由 513633522 于 2012-11-3 13:33 编辑 ]
作者: godtype    时间: 2012-11-3 15:02

贴完整代码,从跳转的位置来看,这里没什么效果可以添加。




欢迎光临 轩辕春秋文化论坛 (http://xycq.org.cn/forum/) Powered by Discuz! 5.0.0