轩辕春秋文化论坛 » 曹操传MOD制作交流 » 指定辅助装备可以由哪些兵种装备的修改


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.