标题: 岳飞传Exe
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


既然不是通用修改,就先发在这里了。
1、普通道具改为5级
0040832F  ADD EAX,5
00409186  AND EAX,4

这一段是周瑜改过的么?说实话没太看明白是什么意思,照着样子改改。

另外发现AI那里改得不全,继续修改ing~~~

12月10日修改
普通道具5级这里修改的也不全。
00407E87 AND EAX,5
00407E8A ADD EAX,5

另外还有41460c和459c70附近的疑似,需要确认其功能后再修改。


顶部
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


原exe买出宝物价格计算公式为:
(价格系数*100*3/4)*(级别+1)/2
其中级别因素只有有级别的宝物需要考虑。
现修改为
(价格系数*400/5)*(级别+3)/4
  化简一下就是 价格系数*20*(级别+3)

修改位置:
注:本公式实际为(价格系数*80*4/4)*(级别+3)/4

0040C7BC IMUL EAX,EAX,50                            ; *80
0040C7BF  IMUL EAX,EAX,4                              ;*4
;下面原来就是/4,不用修改了

0040C7F2 XOR ECX,ECX
0040C7F4 MOV CL,BYTE PTR SS:[EBP+8]         ;取得级别
0040C7F7 ADD ECX,3                                       ;加3
0040C7FA MOV EDX,DWORD PTR SS:[EBP-4]   ;取得公式前半部分计算结果
0040C7FD IMUL EDX,ECX                                 ;*(级别+3)
0040C800 SHR EDX,2                                       ; /4
0040C803 NOP
0040C804 NOP
0040C805 NOP


顶部
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


敌人的装备的等级

原计算方法主要是,将级别/18,商为武器的层级(就是这一系武器中三类武器中,是第几类)。然后将余数/6+1,作为级别。大于等于48级的,就是最高等级装备。三级装备的经验值为FF,其他的经验值为0。

现计算方法,普通武器最高5级,武将每升4级武器加一级。

所以对应的计算方法的数字转换要点就是 18-->20,6-->4,48-->60,3-->5

修改位置
00408069 MOV ECX,14                             ;20

00408088 MOV ECX,14                             ;20

004080A0 CMP ECX,3C                             ;60

004080B5 MOV ECX,14                             ;20

00408101 MOV BYTE PTR SS:[EBP-10],5   ;5

004081CF CMP EDX,5                               ;5

0040821C CMP EDX,14                             ;20

00408257 CMP EAX,14                              ;20

004082B0 CMP EDX,5                                ;5


;计算武器等级的函数,普通武器和特殊武器要分开
00406BB1 PUSH EBP
00406BB2 MOV EBP,ESP
00406BB4 MOV EAX,EDX
00406BB6 XOR EDX,EDX
00406BB8 XOR ECX,ECX
00406BBA MOV CL,6
00406BBC DIV ECX
00406BBE MOV EDX,EAX
00406BC0 MOV ESP,EBP
00406BC2 POP EBP
00406BC3 RETN

;其他部分的相关调用及修改(待补充)
00406C56 MOV CL,4

00407EC3 CALL EKD5_gai.00406BB1

00407EE5 CALL EKD5_gai.00406BB1

00407EFE CMP EDX,3C

00407F03 MOV BYTE PTR SS:[EBP+10],5

00407F15 MOV ECX,14
顶部
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


卖3-4级普通装备得1个果子、卖5级装备得2个果子

这个改起来麻烦还是很多的

1、首先0040DA45这个方法是将第一个参数所指示的物品数量加1。
本身不太好修改,要完成加二的目标的话,我们重新写了个函数(这个返回值似乎还有问题),

00406B83 PUSH EBP
00406B84 MOV EBP,ESP
00406B86 MOV EAX,DWORD PTR SS:[EBP+C]
00406B89 PUSH EAX
00406B8A MOV ECX,004B0770
00406B8F CALL 0040DA45
00406B94 MOV ECX,DWORD PTR SS:[EBP+8]
00406B97 CMP ECX,2
00406B9A JL SHORT 00406BAB
00406B9C MOV EAX,DWORD PTR SS:[EBP+C]
00406B9F PUSH EAX
00406BA0 MOV ECX,004B0770
00406BA5 CALL 0040DA45
00406BAA DEC EAX                                                 ;-1以保持返回值,便于判断
00406BAB MOV ESP,EBP
00406BAD POP EBP
00406BAE RETN 8

;调用此函数的地方
0046B28A PUSH DWORD PTR SS:[EBP-8C]               ;物品
0046B290 PUSH DWORD PTR SS:[EBP-94]               ;数量
0046B296 CALL 00406B83

2、买出装备获得果子数量的计算

;计算获得何种果子及果子数量的函数0040D51B中
0040D595 JL SHORT 0040D5E2

0040D5BF MOV AL,67
0040D5C1 JMP SHORT 0040D5D5
0040D5C3 MOV AL,62
0040D5C5 JMP SHORT 0040D5D5
0040D5C7 MOV AL,66
0040D5C9 JMP SHORT 0040D5D5
0040D5CB MOV AL,63
0040D5CD JMP SHORT 0040D5D5
0040D5CF MOV AL,64
0040D5D1 JMP SHORT 0040D5D5
0040D5D3 MOV AL,65
0040D5D5 MOV ECX,1
0040D5DA CMP EDX,5
0040D5DD JL SHORT 0040D5E4
0040D5DF INC ECX
0040D5E0 JMP SHORT 0040D5E4
0040D5E2 OR AL,0FF

;上面对应的跳转表
0040D5EA 0040D5BF
0040D5EE 0040D5C3
0040D5F2 0040D5C7
0040D5F6 0040D5C7
0040D5FA 0040D5C3
0040D5FE 0040D5CB
0040D602 0040D5CB
0040D606 0040D5CF
0040D60A 0040D5D3
0040D60E 0040D5E2

调用此函数之后的修改
0046B1E7 MOV BYTE PTR SS:[EBP-8C],AL
0046B1ED MOV DWORD PTR SS:[EBP-94],ECX

3、提示话语的修改

就是商人很满意Lv几的装备,送给几个果子这句话。
首先要修改虚拟地址00486E40,exe中物理地址0x86040位置的字符串
商人好像对Lv.%2d的
%s非常中意,所以
又给了我们
个%s。
改为
商人好像对Lv.%2d的
%s非常中意,所以
又给了我们
%d个%s。

0046B203 MOV ECX,EAX
0046B205 IMUL ECX,ECX,19
0046B208 ADD ECX,004A1140
0046B20E CALL 0045F710
0046B213 PUSH EAX                                         ;压入果子名称串地址
0046B214 MOV EAX,DWORD PTR SS:[EBP-94]
0046B21A PUSH EAX                                         ;压入果子数量
0046B21B NOP
0046B21C NOP
0046B21D NOP

4、其他相关修改
调用以上函数的函数0046B043的其他修改

0046B046 SUB ESP,94

0046B1ED MOV DWORD PTR SS:[EBP-94],ECX         ;将果子的数量存入栈内

或许遗漏了部分的修改,因为修改中OllyDbg因为剪切板错误崩溃了几次,修改位置都没有留下
顶部
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


动态商店

据张生的解释是根据武将的平均等级,计算商店里买出物品的等级

位置在004038C0以下

现修改为

004038C2 CMP AL,14       ;20级

004038C7 CMP AL,16       ;22级

004038CC CMP AL,18       ;24级

004038D1 CMP AL,1A       ;26级

004038D6 CMP AL,28       ;40级 (to 张生: 跨度这么大?)

004038DB CMP AL,2A       ;42级

004038E0 CMP AL,2C       ;44级

004038E5 CMP AL,2E       ;46级
顶部
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


发表于 2005-12-11 21:39 资料 主页 个人空间 短消息 看全部作者
关于AI的补充修改
原来的曹操传的AI,是判断如果攻击范围内有人可以攻击,则进入攻击模式,去寻找攻击目标。但是如果所有攻击走位都被己方人员占用,则原地待命。 属于一种保守方式。

现在提供两种修改建议
建议一:
在进入攻击模式后,判断攻击走位照常。如果发现攻击走位跟本人原始位置一样(也就是攻击走位都被占用的情况),则跳转到移动(进军)模式。

修改位置1
0043A832 JMP 00406B62  ;此处原来是结束AI走位判断,现在转到我们的附加判断

修改位置2
00406B62 MOV ECX,DWORD PTR SS:[EBP-10]
00406B65 ADD ECX,6
00406B68 PUSH ECX                      ;压入当前AI单位的原始位置地址
00406B69 PUSH 004B2C20            ;计算出的走位位置
00406B6E CALL 0043B420             ;判断走位位置是否等于原始位置
00406B73 ADD ESP,8
00406B76 TEST EAX,EAX                ;判断结果
00406B78 JE   0043A950               ;如果原地不动,
00406B7E JMP 0043A837               ;如果有攻击点可以走位,则调转到移动模式

建议二:
在进入攻击模式后,判断攻击走位照常。并且无论如何都接着进入移动(进军)模式。

修改位置
将 0043A832 处的长跳转用NOP填充。

ps:建议二的修改方法明显简单,是偶尔发现的。因为第一次修改的时候00406B78、00406B7E两个跳转写反了,但应该攻击的单位依然做出了正确的攻击行为

具体区别有待于测试。
顶部
性别:男-离线 东方无翼

燕王

Rank: 28Rank: 28Rank: 28Rank: 28
组别 诸侯
级别 卫将军
好贴 6
功绩 849
帖子 6143
编号 1704
注册 2003-10-27


发表于 2005-12-19 11:30 资料 主页 个人空间 短消息 看全部作者
AI的修改,只有方法一是对的。
exe是偶改错了,上贴中的方法一没错。

其实这个修改只不过是战术不同,相对原来AI这个稍微积极一点,如果敌人的目标是攻击,即便攻击走位都被占领,也会尽量向目标靠拢。而原AI会选择待机。
但是这样会造成敌人拥挤到一起,很容易受到群体攻击 哪种更好呢?
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-8-6 19:02
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

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

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