标题: 指定辅助装备可以由哪些兵种装备的修改, 特定人物可习得特定策略
性别:未知-离线 star175

★★

Rank: 9Rank: 9Rank: 9
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 讨逆将军
好贴 3
功绩 153
帖子 686
编号 91725
注册 2006-11-16


发表于 2013-3-8 16:12 资料 文集 短消息 只看该作者
指定辅助装备可以由哪些兵种装备的修改

最近翻看旧帖,发现了这个 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 编辑 ]

本帖最近评分记录
WHITESHIP 2013-3-8 16:55 +100 好帖奖励


顶部
性别:男-离线 WHITESHIP

★★
谏议大夫

Rank: 16
组别 翰林学士
级别 征北将军
功绩 380
帖子 4210
编号 170977
注册 2007-6-3
家族 轩辕学院


发表于 2013-3-8 16:54 资料 个人空间 短消息 只看该作者
这样不错,DATA又可以缩短了。

前阵子把策略学会也改掉了。看了这段代码后才发现40757c那块儿好像忘了改……


顶部
性别:男-离线 狂煞∑小星
(Myth阿杨)

Rank: 5Rank: 5
组别 士兵
级别 破虏将军
功绩 7
帖子 720
编号 308223
注册 2009-1-29
家族 轩辕学院


发表于 2013-3-8 18:28 资料 个人空间 短消息 只看该作者 QQ
数据地址是用二进制编辑么,这么多不能都写一个地址上吧……
顶部
性别:未知-离线 seaseesea
(福瑞阁社区)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 2
帖子 234
编号 334137
注册 2009-8-11


发表于 2013-3-8 21:00 资料 主页 短消息 只看该作者


QUOTE:
原帖由 star175 于 2013-3-8 16:12 发表
最近翻看旧帖,发现了这个 http://www.xycq.net/forum/thread-246088-1-1.html
研究后觉得这个代码很好,可惜5.9没加上去,所以贴一下5.9的改法,希望能帮助有需要的人

目前5.9在同样的位置有一个类似功能的 ...

非常感谢star,MOD用得上了!!
顶部
性别:未知-离线 morningboo
(冰冷的山)

Rank: 4
组别 士兵
级别 偏将军
功绩 4
帖子 356
编号 171314
注册 2007-6-5


发表于 2013-3-8 23:22 资料 短消息 只看该作者
回复 #1 star175 的帖子

好贴,看了觉得比以前的方便多了,像现在的EXE,兵种又多,要重新修改辅助装备限制用以前的函数很麻烦,并且代码页很长,这样就方便多了,好贴就要顶!
顶部
性别:未知-离线 morningboo
(冰冷的山)

Rank: 4
组别 士兵
级别 偏将军
功绩 4
帖子 356
编号 171314
注册 2007-6-5


发表于 2013-3-9 12:58 资料 短消息 只看该作者
回复 #1 star175 的帖子

发现一楼代码第二行错了,多了一个PUSH EBP
应该删去
顶部
性别:男-离线 WHITESHIP

★★
谏议大夫

Rank: 16
组别 翰林学士
级别 征北将军
功绩 380
帖子 4210
编号 170977
注册 2007-6-3
家族 轩辕学院


发表于 2013-3-9 13:10 资料 个人空间 短消息 只看该作者
star,策略学会的代码,43dde2(AI使用策略)和46598C(武将情报显示),这两处要不要改?
顶部
性别:未知-离线 star175

★★

Rank: 9Rank: 9Rank: 9
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 讨逆将军
好贴 3
功绩 153
帖子 686
编号 91725
注册 2006-11-16


发表于 2013-3-9 15:08 资料 文集 短消息 只看该作者
回复 #7 WHITESHIP 的帖子

不用
顶部
性别:未知-离线 morningboo
(冰冷的山)

Rank: 4
组别 士兵
级别 偏将军
功绩 4
帖子 356
编号 171314
注册 2007-6-5


发表于 2013-3-19 21:08 资料 短消息 只看该作者
请问star哥,能否贴一下毅大5.0中需要无条件跳转的地址,自身能力实在有限。。。找不到对应位置,貌似几个相关函数的位置也和star5.9的不一致,拜谢。
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2013-4-20 23:08 资料 短消息 只看该作者
求问下,这个是用ue改吗?具体是改data,还是exe。我比较小白不理解
顶部
性别:未知-离线 morningboo
(冰冷的山)

Rank: 4
组别 士兵
级别 偏将军
功绩 4
帖子 356
编号 171314
注册 2007-6-5


发表于 2013-4-21 00:45 资料 短消息 只看该作者
回复 #10 l414628744 的帖子

是用OD改,改的EXE
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2013-4-21 11:59 资料 短消息 只看该作者
谢谢
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2013-4-21 13:25 资料 短消息 只看该作者
问下能用在5.8版的exe修改吗
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2013-4-23 16:06 资料 短消息 只看该作者
怎么我改了之后运行exe自动结束啊,是改5.9版的exe
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2013-4-23 16:13 资料 短消息 只看该作者
有改之后能用的exe能给我一个吗
顶部
性别:未知-离线 star175

★★

Rank: 9Rank: 9Rank: 9
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 讨逆将军
好贴 3
功绩 153
帖子 686
编号 91725
注册 2006-11-16


发表于 2013-4-24 08:27 资料 文集 短消息 只看该作者
回复 #15 l414628744 的帖子

现在的5.9已经加上了
顶部
性别:未知-离线 l414628744

Rank: 2Rank: 2
组别 百姓
级别 破贼校尉
功绩 1
帖子 73
编号 327177
注册 2009-6-12


发表于 2013-4-24 13:56 资料 短消息 只看该作者
回复 #16 star175 的帖子

太感谢了
顶部
性别:未知-离线 koap3838

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 30
编号 197619
注册 2007-8-4


发表于 2015-7-15 07:44 资料 短消息 只看该作者
好东西!!!!!!!!!!!!!!!
顶部

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




当前时区 GMT+8, 现在时间是 2025-2-3 22:52
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

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

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