2013-3-8 16:12
star175
指定辅助装备可以由哪些兵种装备的修改
最近翻看旧帖,发现了这个 [url=http://www.xycq.net/forum/thread-246088-1-1.html]http://www.xycq.net/forum/thread-246088-1-1.html[/url]
研究后觉得这个代码很好,可惜5.9没加上去,所以贴一下5.9的改法,希望能帮助有需要的人
目前5.9在同样的位置有一个类似功能的函数,不过要新增一个兵种很麻烦。
所以直接改成这样就行了
00406CBA /$ 55 PUSH EBP
00406CBB |. 90 NOP
00406CBC |. 8BEC MOV EBP,ESP
00406CBE |. 80F9 FF CMP CL,0FF ;CL的值为兵种号(0H-27H)或FF,就是data里设置的可装备兵种,如果为FF,表示全兵种可用
00406CC1 |. 74 29 JE SHORT Ekd5.00406CEC
00406CC3 |. 3AC8 CMP CL,AL ;
00406CC5 |. 74 25 JE SHORT Ekd5.00406CEC
00406CC7 |. BA 41C34400 [color=red]MOV EDX,Ekd5.00405210 ;数据地址,可根据需要随便选择一处空位置
[/color]00406CCC |. EB 01 JMP SHORT Ekd5.00406CCF
00406CCE |> 42 /INC EDX
00406CCF |> 803A FF CMP BYTE PTR DS:[EDX],0FF
00406CD2 |.^ 75 FA |JNZ SHORT Ekd5.00406CCE
00406CD4 |. 42 |INC EDX
00406CD5 |. 803A FF |CMP BYTE PTR DS:[EDX],0FF
00406CD8 |. 74 0E |JE SHORT Ekd5.00406CE8
00406CDA |. 3A0A |CMP CL,BYTE PTR DS:[EDX]
00406CDC |.^ 75 F0 \JNZ SHORT Ekd5.00406CCE
00406CDE |> 42 /INC EDX
00406CDF |. 3A02 |CMP AL,BYTE PTR DS:[EDX]
00406CE1 |. 74 09 |JE SHORT Ekd5.00406CEC
00406CE3 |. 803A FF |CMP BYTE PTR DS:[EDX],0FF
00406CE6 |.^ 75 F6 \JNZ SHORT Ekd5.00406CDE
00406CE8 |> 33C0 XOR EAX,EAX
00406CEA |. EB 03 JMP SHORT Ekd5.00406CEF
00406CEC |> 33C0 XOR EAX,EAX
00406CEE |. 40 INC EAX
00406CEF |> 8BE5 MOV ESP,EBP
00406CF1 |. 5D POP EBP
00406CF2 \. C3 RETN
00406CF3 90 NOP
00406CF4 90 NOP
00406CF5 90 NOP
00406CF6 90 NOP
00406CF7 90 NOP
00406CF8 90 NOP
00406CF9 90 NOP
[color=red]上面的函数里使用405210作为数据地址,这个可根据需要随便选择一处空位置,只要位置够用就行
[/color]
然后在[color=#ff0000]405210处写一些数据,0FF为开始和间隔的标志数据,以0FFFF为数据的结束标志[/color]
[color=#ff0000][/color]
[color=#ff0000]如 FF [color=black]06[/color] [color=blue]07 0C[/color] FF [color=black]08[/color] [color=blue]09 0A 0B 11[/color] FF FF[/color]
[color=#ff0000][/color]
[color=#ff0000]这里有2段数据[/color]
[color=#ff0000]表示 如果一件辅助品为设置为[color=#000000]06[/color]号兵种专用,那么[color=#0000ff]07 0C[/color] 兵种也能能装备[/color]
[color=#ff0000] 如果一件辅助品为设置为[color=black]08[/color]号兵种专用,那么[color=#0000ff]09 0A 0B 11[/color] 兵种也能能装备[/color]
[color=#ff0000][/color]
[color=#ff0000][color=black]需要更多就直接加在后面即可[/color][/color]
[color=#ff0000][/color]
[color=#ff0000][color=#000000]如改为[/color] [/color]
[color=#ff0000][/color]
[color=#ff0000] FF [color=black]06[/color] [color=blue]07 0C[/color] FF [color=black]08[/color] [color=blue]09 0A 0B 11[/color] FF [color=black]0C[/color] [color=blue]05 0F 15[/color] FF FF [/color]
[color=#ff0000] 这样就增加了一段,表示 [color=black]0C[/color]号兵种专用辅助品,[color=#0000ff]05 0F 15[/color] 兵种也能能装备,只要注意不要漏写了分隔符和结束符就行[/color]
[color=#ff0000][color=black]另 根据以上思路,又写了一个特定人物可习得特定策略,这样就使得策略的习得不再仅仅由兵种或特效决定[/color] [/color]
[color=#ff0000][/color]
[color=#ff0000]这个代码要多一些,能力不足者慎用[/color]
[color=#ff0000][/color]
[color=#ff0000]人物学会特定策略[/color]
[color=#ff0000]第一处[/color]
[color=#ff0000]0040757C .^\E9 B3DBFFFF JMP Ekd5.00405134
00407581 90 NOP
00407582 90 NOP[/color]
[color=#ff0000][/color]
[color=#ff0000]00405134 > /8A51 2C MOV DL,BYTE PTR DS:[ECX+2C]
00405137 . |3AC2 CMP AL,DL
00405139 . |74 1C JE SHORT Ekd5.00405157
0040513B . |8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0040513E . |8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
00405141 . |E8 4A000000 CALL Ekd5.00405190 ; 人物升级时出现学会策略的提示
00405146 . |84C0 TEST AL,AL
00405148 . |0F84 0E240000 JE Ekd5.0040755C
0040514E . |3A4A 2C CMP CL,BYTE PTR DS:[EDX+2C]
00405151 . |0F85 05240000 JNZ Ekd5.0040755C
00405157 > |E9 27240000 JMP Ekd5.00407583[/color]
[color=#ff0000]
第二处
0043E17E .^\E9 E26FFCFF JMP Ekd5.00405165
0043E183 90 NOP
0043E184 > 5A POP EDX
0043E185 . 3BC2 CMP EAX,EDX
0043E187 . 73 0F JNB SHORT Ekd5.0043E198
0043E189 > 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
0043E18C . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0043E18F . E8 FC6FFCFF CALL Ekd5.00405190 ; 策略指令按钮是否可用
0043E194 . 84C0 TEST AL,AL
0043E196 .^ 74 BE JE SHORT Ekd5.0043E156
00405165 > /E8 9E8F0300 CALL Ekd5.0043E108
0040516A . |84C0 TEST AL,AL
0040516C . |0F84 17900300 JE Ekd5.0043E189
00405172 . |0FB6C0 MOVZX EAX,AL
00405175 . |50 PUSH EAX
00405176 . |8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
00405179 . |E8 52140000 CALL Ekd5.004065D0
0040517E . |E9 01900300 JMP Ekd5.0043E184
第三处
00465B39 |. /74 53 JE SHORT Ekd5.00465B8E
00465B46 |. 3BC2 CMP EAX,EDX
00465B48 |. 72 44 JB SHORT Ekd5.00465B8E
00465B8E |> \8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00465B91 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
00465B94 |. E8 F7F5F9FF CALL Ekd5.00405190 ;显示策略列表
00465B99 |. 84C0 TEST AL,AL
00465B9B |.^ 0F84 5CFFFFFF JE Ekd5.00465AFD
00465BA1 \.^ EB A7 JMP SHORT Ekd5.00465B4A
[/color][color=black]00405190 /$ 55 PUSH EBP
00405191 |. 8BEC MOV EBP,ESP
00405193 |. 51 PUSH ECX
00405194 |. 52 PUSH EDX
00405195 |. E8 E36C0000 CALL Ekd5.0040BE7D
0040519A |. 50 PUSH EAX
0040519B |. BA A45B4600 MOV EDX,Ekd5.[color=red]004051F0
[/color]004051A0 |. EB 01 JMP SHORT Ekd5.004051A3
004051A2 |> 42 /INC EDX
004051A3 |> 803A FF CMP BYTE PTR DS:[EDX],0FF
004051A6 |.^ 75 FA |JNZ SHORT Ekd5.004051A2
004051A8 |. 42 |INC EDX
004051A9 |. 803A FF |CMP BYTE PTR DS:[EDX],0FF
004051AC |. 74 29 |JE SHORT Ekd5.004051D7
004051AE |. 8B4D FC |MOV ECX,DWORD PTR SS:[EBP-4]
004051B1 |. 3A0A |CMP CL,BYTE PTR DS:[EDX]
004051B3 |.^ 75 ED \JNZ SHORT Ekd5.004051A2
004051B5 |> 42 /INC EDX
004051B6 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
004051B9 |. 66:3B02 |CMP AX,WORD PTR DS:[EDX]
004051BC |. 74 0A |JE SHORT Ekd5.004051C8
004051BE |. 803A FF |CMP BYTE PTR DS:[EDX],0FF
004051C1 |. 74 14 |JE SHORT Ekd5.004051D7
004051C3 |. 83C2 02 |ADD EDX,2
004051C6 |.^ EB ED \JMP SHORT Ekd5.004051B5
004051C8 |> 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
004051CB |. E8 00140000 CALL Ekd5.004065D0
004051D0 |. 8A4A 02 MOV CL,BYTE PTR DS:[EDX+2]
004051D3 |. 3AC1 CMP AL,CL
004051D5 |. 73 04 JNB SHORT Ekd5.004051DB
004051D7 |> 33C0 XOR EAX,EAX
004051D9 |. EB 06 JMP SHORT Ekd5.004051E1
004051DB |> 33C0 XOR EAX,EAX
004051DD |. 40 INC EAX
004051DE |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
004051E1 |> 8BE5 MOV ESP,EBP
004051E3 |. 5D POP EBP
004051E4 \. C3 RETN
[/color][color=#ff0000][/color]
[color=#ff0000][/color]
[color=#ff0000]核心函数是405190[/color]
[color=#ff0000][/color]
[color=#ff0000]这个函数用了4051F0作为数据地址,同样可根据需要随便选择一处位置够用的位置[/color]
[color=#ff0000][/color]
也是用FF作为开始及分隔标志,FF FF作为结束标志
[color=#ff0000]如 FF [color=black]00[/color] 01 00 [color=blue]0A[/color] 05 00 [color=blue]02[/color] FF[color=black] 01[/color] 10 00 [color=blue]04[/color] FF FF [/color]
[color=#ff0000][/color]
[color=#ff0000]这里有2段数据[/color]
[color=#ff0000][/color]
[color=#ff0000]1 01号武将(输入时要倒过来 即 输入 01 00)在10级([color=blue]0A[/color])时可习得[color=black]00[/color]号策略[/color]
[color=#ff0000] 05号武将(05 00)在2级([color=blue]02[/color])时可习得00号策略[/color]
[color=#ff0000][/color]
[color=#ff0000]2 16号武将(10 00)在4级([color=blue]04[/color])时可习得[color=black]01[/color]号策略[/color]
[color=#ff0000][/color]
[color=#ff0000]要提醒一个特例,由于是用FF来作为标志数据,所以第255(FF)号武将不能用这个方法来指定策略。[/color]
[color=#ff0000] [/color]
[color=Silver][[i] 本帖最后由 star175 于 2013-3-9 14:55 编辑 [/i]][/color]
2013-3-8 16:54
WHITESHIP
这样不错,DATA又可以缩短了。
前阵子把策略学会也改掉了。看了这段代码后才发现40757c那块儿好像忘了改……
2013-3-8 18:28
狂煞∑小星
数据地址是用二进制编辑么,这么多不能都写一个地址上吧……
2013-3-8 21:00
seaseesea
[quote]原帖由 [i]star175[/i] 于 2013-3-8 16:12 发表
最近翻看旧帖,发现了这个 [url]http://www.xycq.net/forum/thread-246088-1-1.html[/url]
研究后觉得这个代码很好,可惜5.9没加上去,所以贴一下5.9的改法,希望能帮助有需要的人
目前5.9在同样的位置有一个类似功能的 ... [/quote]
[b][color=Red]非常感谢star,MOD用得上了!![/color][/b]
2013-3-8 23:22
morningboo
回复 #1 star175 的帖子
好贴,看了觉得比以前的方便多了,像现在的EXE,兵种又多,要重新修改辅助装备限制用以前的函数很麻烦,并且代码页很长,这样就方便多了,好贴就要顶!
2013-3-9 12:58
morningboo
回复 #1 star175 的帖子
发现一楼代码第二行错了,多了一个PUSH EBP
应该删去
2013-3-9 13:10
WHITESHIP
star,策略学会的代码,43dde2(AI使用策略)和46598C(武将情报显示),这两处要不要改?
2013-3-9 15:08
star175
回复 #7 WHITESHIP 的帖子
不用
2013-3-19 21:08
morningboo
请问star哥,能否贴一下毅大5.0中需要无条件跳转的地址,自身能力实在有限。。。找不到对应位置,貌似几个相关函数的位置也和star5.9的不一致,拜谢。
2013-4-20 23:08
l414628744
求问下,这个是用ue改吗?具体是改data,还是exe。我比较小白不理解
2013-4-21 00:45
morningboo
回复 #10 l414628744 的帖子
是用OD改,改的EXE
2013-4-21 11:59
l414628744
谢谢
2013-4-21 13:25
l414628744
问下能用在5.8版的exe修改吗
2013-4-23 16:06
l414628744
怎么我改了之后运行exe自动结束啊,是改5.9版的exe
2013-4-23 16:13
l414628744
有改之后能用的exe能给我一个吗
2013-4-24 08:27
star175
回复 #15 l414628744 的帖子
现在的5.9已经加上了
2013-4-24 13:56
l414628744
回复 #16 star175 的帖子
太感谢了
2015-7-15 07:44
koap3838
好东西!!!!!!!!!!!!!!!
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.