| | |
|
组别 | 白衣卿相 |
级别 | 讨逆将军 |
好贴 | 3 |
功绩 | 153 |
帖子 | 686 |
编号 | 91725 |
注册 | 2006-11-16 |
| |
| | |
|
|
|
指定辅助装备可以由哪些兵种装备的修改
最近翻看旧帖,发现了这个 http://www.xycq.net/forum/thread-246088-1-1.html
研究后觉得这个代码很好,可惜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 MOV EDX,Ekd5.00405210 ;数据地址,可根据需要随便选择一处空位置
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
上面的函数里使用405210作为数据地址,这个可根据需要随便选择一处空位置,只要位置够用就行
然后在405210处写一些数据,0FF为开始和间隔的标志数据,以0FFFF为数据的结束标志
如 FF 06 07 0C FF 08 09 0A 0B 11 FF FF
这里有2段数据
表示 如果一件辅助品为设置为06号兵种专用,那么07 0C 兵种也能能装备
如果一件辅助品为设置为08号兵种专用,那么09 0A 0B 11 兵种也能能装备
需要更多就直接加在后面即可
如改为
FF 06 07 0C FF 08 09 0A 0B 11 FF 0C 05 0F 15 FF FF
这样就增加了一段,表示 0C号兵种专用辅助品,05 0F 15 兵种也能能装备,只要注意不要漏写了分隔符和结束符就行
另 根据以上思路,又写了一个特定人物可习得特定策略,这样就使得策略的习得不再仅仅由兵种或特效决定
这个代码要多一些,能力不足者慎用
人物学会特定策略
第一处
0040757C .^\E9 B3DBFFFF JMP Ekd5.00405134
00407581 90 NOP
00407582 90 NOP
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
第二处
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
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.004051F0
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
核心函数是405190
这个函数用了4051F0作为数据地址,同样可根据需要随便选择一处位置够用的位置
也是用FF作为开始及分隔标志,FF FF作为结束标志
如 FF 00 01 00 0A 05 00 02 FF 01 10 00 04 FF FF
这里有2段数据
1 01号武将(输入时要倒过来 即 输入 01 00)在10级(0A)时可习得00号策略
05号武将(05 00)在2级(02)时可习得00号策略
2 16号武将(10 00)在4级(04)时可习得01号策略
要提醒一个特例,由于是用FF来作为标志数据,所以第255(FF)号武将不能用这个方法来指定策略。
[ 本帖最后由 star175 于 2013-3-9 14:55 编辑 ]
|
|
|
|