Board logo

标题: 反击后必反击兵种 改法 求教 [打印本页]

作者: pabo    时间: 2011-11-4 21:32     标题: 反击后必反击兵种 改法 求教

我找了论坛,发现没有“反击后反击”兵种的改法;于是按着其他效果,如无反击兵种的写法进行添加……结果
发现居然逆反了,效果变成了“指定兵种”反击敌人后 必被敌人再反击……

请问正确写法因当如何呢?难道是添加的地方不对?
作者: edc34512    时间: 2011-11-4 21:50

楼主可以参考一下新引擎
作者: pabo    时间: 2011-11-4 21:52

新引擎不是单个单个加的…我想可能是被压缩过了…不过还是谢ls了

[ 本帖最后由 pabo 于 2011-11-4 22:40 编辑 ]
作者: godtype    时间: 2011-11-4 22:49

原版的反击后反击宝物特效的是这样的:
004063D6  |. 6A 28          PUSH 28  <——特效号
004063D8  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
004063DB  |. E8 90920500    CALL 0045F670
004063E0  |. 8BC8           MOV ECX,EAX
004063E2  |. 6BC9 48        IMUL ECX,ECX,48
004063E5  |. 81C1 681B4A00  ADD ECX,004A1B68  <——计算出来的武将数据内存起始地址
004063EB  |. E8 19160000    CALL 00407A09  <——判断武将身上是否带有指定特效号的装备
004063F0  |. 85C0           TEST EAX,EAX
004063F2  |. 75 0F          JNZ SHORT 00406403  <——判断出武将身上带有反击后反击的宝物特效装备,跳到406403

修改原理:
在计算出来的武将数据内存起始地址后面加上判断武将的兵种是否反击后反击的兵种编号,是的话就跳到406403,不是再去判断武将身上是否带有反击后反击的装备。

将原来的代码修改如下(肯定不够位置,需要另外找空位置跳过改好再跳回来)
MOV ECX,DWORD PTR SS:[EBP-4]
CALL 0045F670
MOV ECX,EAX
IMUL ECX,ECX,48
ADD ECX,004A1B68
CALL 406610
CMP AL,XX  <——XX就是兵种编号
JE 406403
PUSH 28
CALL 00407A09
TEST EAX,EAX
JNZ SHORT 00406403

类似的在已有宝物效果的基础上添加兵种特效都是这样去改,理解清楚就很容易了。

作者: pabo    时间: 2011-11-4 23:40

哎,真是感谢咯…原来我打的那个是两部分拆开各不相干的

CMP AL,XX 好像 是小兵种吧,大兵种CMP EAX,xx为什么没效?还是用其他代码?
作者: 513633522    时间: 2011-11-5 10:18     标题: 回复 #5 pabo 的帖子

大小兵种不是这么区分的……
是和 CMP AL,XX 上面的call ……有关系的
作者: pabo    时间: 2011-11-5 12:25

额…

我看到的都是CALL 00406610的…不过中间加了AND EAX,0FF

难道大兵种判定写法全不一样?


哦,感谢诸位,我用jb和jbe判断解决了(好像只能处理cmp X系列的吧?),幸好是相连的几个三转兵种
不过这里有个小问题……

那啥je XXX判断句 的好像不能用SHORT 短跳 到附近的 jmp再去 最终目的地?
无法中间嫁接个jmp?必须要一次跳转?(因为je远跳太占空间了,能节约点就节约点吧)

比如这样的
                     cmp ***
                     je SHORT &&
   
&&(地址)    JMP%%%

%%%(地址) 生效

[ 本帖最后由 pabo 于 2011-11-5 12:53 编辑 ]




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