标题: 增加一个能力档的详细改法
性别:未知-离线 star175

★★

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


发表于 2008-4-26 17:31 资料 文集 短消息 只看该作者
增加一个能力档的详细改法

在论坛里不断有网友询问如何增加能力档,对于这个问题,一直也没有看到很全面的解答,我个人曾经研究过这个问题,略作说明,不足之处还请指正。
以下的代码和说明均是以我发部的exe第四次修改版为例子。

由于我的exe第四次修改版已经增加了一个X能力档,在这里为了比较好的说明这个改法,就以再增加一个D能力档为例子说明。

目前exe第四次修改版的能力成长档为
                X          S         A          B         C
合格条件  100     90-98     80-88    70-78      
合格成长   5           4         3          2         1


完美条件                         100        90      100
完美成长                          4           3        3


假设现在需要修改为
                X         S            A            B           C          D
合格条件  100     90-98     80-88      70-78     60-68  
合格成长   6          5            4            3           2          1


完美条件                          100         90        100         90
完美成长                            5            4          4           3


步骤一:
用UE打开exe,按照图中的位置修改文字内容:
修改前:
图1


图片附件: 01.jpg (2008-4-26 17:31, 12.03 K)


修改后:
图2


图片附件: 02.jpg (2008-4-26 17:31, 12.7 K)


把这几个字母的UE位置记下来,然后关闭UE

步骤二:

先修改能力成长代码,用ollydbg打开exe,写代码:
0040736D  |.  3C 32            CMP AL,32                         ;  50×2=100
0040736F  |.  7C 04            JL SHORT Ekd5.00407375
00407371      B0 06            MOV AL,6
00407373  |.  EB 29            JMP SHORT Ekd5.0040739E
00407375  |>  3C 2D            CMP AL,2D                         ;  45×2=90
00407377  |.  7C 04            JL SHORT Ekd5.0040737D
00407379      B0 05            MOV AL,5
0040737B  |.  EB 21            JMP SHORT Ekd5.0040739E
0040737D  |>  3C 28            CMP AL,28                         ;  40×2=80
0040737F  |.  7C 04            JL SHORT Ekd5.00407385
00407381      B0 04            MOV AL,4
00407383  |.  EB 19            JMP SHORT Ekd5.0040739E
00407385  |>  3C 23            CMP AL,23                         ;  35×2=70
00407387  |.  7C 04            JL SHORT Ekd5.0040738D
00407389      B0 03            MOV AL,3
0040738B  |.  EB 11            JMP SHORT Ekd5.0040739E
0040738D      3C 1E            CMP AL,1E                         ;  30×2=60
0040738F      7C 04            JL SHORT Ekd5.00407395
00407391      B0 02            MOV AL,2
00407393      EB 09            JMP SHORT Ekd5.0040739E
00407395      B0 01            MOV AL,1                          ;  小于60的跳转到这里  增加1点
00407397  |.  90               NOP
00407398      90               NOP
00407399      90               NOP
0040739A  |.  90               NOP
0040739B  |.  90               NOP
0040739C  |.  90               NOP
0040739D  |.  90               NOP
0040739E  |>  8BE5             MOV ESP,EBP
004073A0  |.  5D               POP EBP
004073A1  \.  C2 0400          RETN 4
这里改好以后,人物升级时的能力成长就已经可以了,就是这么简单,但显示还是不行,所以还要改显示方面的代码。

步骤三:

修改显示代码
由于现在有六档能力,所以先要找一段6×4=24字节的空间。我的exe里有很多空间,我都是用90填充了,用Ctrl+B,找字节,
随意输入几个90,确定,就会跳到一些代码为都是90的地方,数到有24字节以上的地方就可以拿来用了。
图三:


图片附件: 03.jpg (2008-4-26 17:31, 10.49 K)


我用了406A55处的位置。
现在看一下刚才记下的字母在Ue中的位置
Ue地址
X  8AEDA      
S  8AED8
A  8AED6
B  8AED4
C  8AED2
D  8AED0


在这里ob地址=Ue地址+401600
根据这个计算出ob的地址来
OB地址
X  0048C4DA
S  0048C4D8
A  0048C4D6
B  0048C4D4
C  0048C4D2
D  0048C4D0


在406A55处点一下,在Ctrl+E,进入二进制编辑窗口,输入二进制代码,注意转移顺序要颠倒过来。
图四


图片附件: 04.jpg (2008-4-26 17:31, 13.49 K)



下面是一个很重要的自定义函数(这个函数在我的exe里已经有了,如果要在别的exe里改,需要找20字节的空间):

00406CC9  /$  55               PUSH EBP
00406CCA  |.  8BEC             MOV EBP,ESP
00406CCC  |.  25 FF000000      AND EAX,0FF
00406CD1  |.  2C 00            SUB AL,0
00406CD3      3C 06            CMP AL,7                             ;  由于最高成长为6,所以这里是7,可以根据实际情况修改
00406CD5  |.  72 02            JB SHORT Ekd5.00406CD9               ;  小于7跳转,什么都不做
00406CD7  |.  B0 05            MOV AL,6                             ;  大于等于7都设为6,这里也可根据实际情况修改
00406CD9  |>  8BE5             MOV ESP,EBP
00406CDB  |.  5D               POP EBP
00406CDC  \.  C3               RETN

这个函数的一个作用是把大于7数值都设为6,这样当你在data中把某项能力设为7或更大时,就不会出现汉字的情况了。

还有一处需要注意:

00406CD1  |.  2C 00            SUB AL,0
这一句代码看上去似乎是多余的,现在也确实如此,这是因为我们现在的成长是从1开始计数的,如果是想岳飞传那样的4、5、6、8,最低档为4,就要靠这一
句来调整了,顺便说一下,在岳飞传里的这一句是 SUB AL,3,大家可以想一想为什么。
以上就是这个自定义函数的两个主要作用了。

步骤四:

在exe里调用这个函数的地方共有5处,就是兵种的五项能力成长了
图五:


图片附件: 05.jpg (2008-4-26 17:31, 6.06 K)


这五个地方作用是一样的,就是通过自定义函数返回的值去找到相应的字母位置以表示兵种某项能力档,现在我们先来看一下477Cf7:

00477CF7  |.  E8 CDEFF8FF   CALL GEkd5.00406CC9                      ; 自定义函数,返回eax
00477CFC  |.  8B1485 516A40>MOV EDX,DWORD PTR DS:[EAX*4+406A51]
00477D03  |.  52            PUSH EDX                                 ; /Text

关键的位置在

0477CFC  |.  8B1485 516A40>MOV EDX,DWORD PTR DS:[EAX*4+406A51]

假设兵种的某项能力为1(eax)
EAX*4+406A51=406A55,这个位置就是我们刚才输入了24个字节的起始位置,而它的值就是0048C4D0,也就是字母D在exe里的ob地址了,这样此兵种
的该项能力成长就显示为D了。

以下依葫芦画瓢,修改其余的4处,就可以了。

00477CF7  |.  E8 CDEFF8FF   CALL GEkd5.00406CC9
00477CFC  |.  8B1485 516A40>MOV EDX,DWORD PTR DS:[EAX*4+406A51]

00477D30  |.  E8 94EFF8FF   CALL GEkd5.00406CC9
00477D35  |.  8B0485 516A40>MOV EAX,DWORD PTR DS:[EAX*4+406A51]

00477D69  |.  E8 5BEFF8FF   CALL GEkd5.00406CC9
00477D6E  |.  8B0C85 516A40>MOV ECX,DWORD PTR DS:[EAX*4+406A51]

00477DA0  |.  E8 24EFF8FF   CALL GEkd5.00406CC9
00477DA5  |.  8B1485 516A40>MOV EDX,DWORD PTR DS:[EAX*4+406A51]

00477DD9  |.  E8 EBEEF8FF   CALL GEkd5.00406CC9
00477DDE  |.  8B0485 516A40>MOV EAX,DWORD PTR DS:[EAX*4+406A51]

注意:需要说明的是改这几处代码最好是用Ctrl+E用二进制模式改,用汇编模式改会多占用调一个字节,会把下面一句给冲掉,不注意的话就出错了


修改完毕。

[ 本帖最后由 star175 于 2008-4-26 17:39 编辑 ]

本帖最近评分记录
yanguodong 2008-4-27 14:08 +109 好帖奖励


顶部
性别:未知-离线 BCWCNQJ

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 19
编号 273540
注册 2008-4-3


发表于 2008-4-26 19:13 资料 短消息 只看该作者
STAR越来越牛了....


顶部
性别:男-离线 37610716
(妖)

白衣伯爵

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 平东将军
好贴 1
功绩 151
帖子 2567
编号 214815
注册 2007-9-12


发表于 2008-4-26 19:43 资料 个人空间 短消息 只看该作者
这个的确,但他也不象有些人很大的架子,基本上别人问什么回答什么,没有什么觉得不耐烦的语气。
顶部
性别:男-离线 神的儿子

Rank: 5Rank: 5
组别 士兵
级别 安国将军
功绩 8
帖子 815
编号 140361
注册 2007-4-16
来自 天堂


看着有点晕, 但还是撑下去学吧.
顶部
性别:未知-离线 qw65
(仲天之帆)

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 252
编号 98424
注册 2007-1-3


发表于 2008-4-27 07:09 资料 短消息 只看该作者 QQ
我想了好久,现在马上回去试试
顶部
性别:男-离线 战神奉先
( 把你dǎ残)

Rank: 5Rank: 5
组别 士兵
级别 破虏将军
功绩 8
帖子 762
编号 267588
注册 2008-2-14
来自 第“二”天堂
家族 肉肉门


发表于 2008-4-27 07:13 资料 短消息 只看该作者 QQ
回复 #5 dzbcorg0804 的帖子

含有广告成分
顶部
性别:男-离线 longxinghen
(君棣侯)

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


发表于 2008-4-27 10:27 资料 短消息 只看该作者
真是厉害啊,
学习学习
顶部
性别:未知-离线 yanguodong

白衣伯爵
谏议大夫

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11
组别 翰林学士
级别 讨逆将军
功绩 331
帖子 630
编号 60674
注册 2006-2-23
家族 轩辕魔教


发表于 2008-4-27 14:20 资料 个人空间 短消息 只看该作者
楼主进步很快呀关于能力显示以前我还是请教周瑜才弄明白的
顶部
性别:未知-离线 csydemon

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 13
编号 108806
注册 2007-2-10


发表于 2008-4-27 19:00 资料 短消息 只看该作者
恩 恩 恩 看了半天 好象有点点懂了 谢谢~!
顶部
性别:未知-离线 winrar2008

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


发表于 2008-4-27 21:06 资料 短消息 只看该作者
佩服楼上的,我看半天一点也没看懂
顶部
性别:男-离线 37610716
(妖)

白衣伯爵

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 平东将军
好贴 1
功绩 151
帖子 2567
编号 214815
注册 2007-9-12


发表于 2008-4-30 07:33 资料 个人空间 短消息 只看该作者
前面的可以照葫芦画瓢改,后面的就不懂了,如果楼主能跟上UE的修改方法就.....
顶部
性别:男-离线 paro
(皮哥)

Rank: 5Rank: 5
组别 士兵
级别 讨逆将军
功绩 6
帖子 615
编号 17220
注册 2004-9-7
家族 肉肉门


收藏之,现在正用了!
OB虽然能用但是函数的意义一点也不明白!
顶部
性别:男-离线 37610716
(妖)

白衣伯爵

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11
轩辕春秋年度最佳(轩辕工作室)
组别 白衣卿相
级别 平东将军
好贴 1
功绩 151
帖子 2567
编号 214815
注册 2007-9-12


发表于 2008-5-21 20:57 资料 个人空间 短消息 只看该作者
回复 #12 paro 的帖子

那你就照葫芦画瓢吧!
顶部
性别:未知-离线 大鸟劲生

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 15
编号 269733
注册 2008-3-2


发表于 2008-5-23 19:13 资料 短消息 只看该作者
佩服LZ   不过还是有点不明白  决定 再去研究
顶部
性别:未知-离线 乱世枭雄

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 296
编号 93991
注册 2006-12-3


发表于 2008-6-2 08:56 资料 短消息 只看该作者
帮忙看看好吗?

我已经初步改好了,本来是想把X成长改为9的,但是进入游戏点击人物右键查看的时候就出错弹出,所以只好改为8的成长了,还有我改的这个 我发现成长还是有问题,就拿曹操来说吧,我改的A(80-88)的成长是6,data文件里设置的也是6,但是实际升级的时候他5围中属性是90以上的升级时成长变成了我设置的S(90-98)的7的成长了,还有其他的人也是这样,不知道说明问题,有可能是我画葫芦画错了,能请你帮我看看吗?如果可以的话,麻烦你帮我改正其中错误的地方,把成长改为X10,S8,A6,B5,C4,D3,并且告诉我完美成长的条件及数值,因为我看不出它自动的数值是多少,谢谢,给你添麻烦了,如能帮忙改好,小弟感激不尽!

            X          S         A          B            C          d
合格条件   100     90-98    80-88    70-78     60-68      60-
合格成长   10           8        6          5         4             3

完美条件     ?      ?     100         90       100         ?
完美成长     ?      ?      ?        ?          ?          ?

(上面的完美条件及完美成长的数值还请一并告之,谢谢)

[ 本帖最后由 乱世枭雄 于 2008-6-2 22:06 编辑 ]


附件: 我改的文件.rar (2008-6-2 22:06, 229.81 K)
该附件被下载次数 312
顶部
性别:未知-离线 geming060

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 49
编号 243277
注册 2007-12-1


发表于 2008-6-2 09:19 资料 短消息 只看该作者
为了实现自己的MOD努力学下去吧!
顶部
性别:男-离线 爱咋咋地

Rank: 2Rank: 2
组别 百姓
级别 奋威校尉
功绩 1
帖子 112
编号 57453
注册 2006-1-13
来自 吉林辽源
家族 轩辕学院


发表于 2008-6-2 09:56 资料 短消息 只看该作者 QQ
能不能将改好后的EXE文件发上来啊!
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2008-6-2 13:25 资料 个人空间 短消息 只看该作者
回复 #15 乱世枭雄 的帖子

正确的成长公式是:(个人成长+兵种成长(即DATA的设值))/2
所以(8+6)/2=7。
没有错的。

X设定为9会出错?应该不可能吧,我照这份教程帮东吴改了新成长档都没有问题。
顶部
性别:未知-离线 乱世枭雄

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 296
编号 93991
注册 2006-12-3


发表于 2008-6-2 16:47 资料 短消息 只看该作者
回复 #18 godtype 的帖子

我也不知道为什么,但是在DATA里改了大将军的攻击为9进入游戏右键查看攻击力为X的人物的时候就会弹出,如果你有空的话,也请帮我看看怎么回事,感激不尽!
顶部
性别:未知-离线 乱世枭雄

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 296
编号 93991
注册 2006-12-3


发表于 2008-6-2 18:00 资料 短消息 只看该作者


QUOTE:
原帖由 godtype 于 2008-6-2 13:25 发表
正确的成长公式是:(个人成长+兵种成长(即DATA的设值))/2
所以(8+6)/2=7。
没有错的。

X设定为9会出错?应该不可能吧,我照这份教程帮东吴改了新成长档都没有问题。

我原来设定的是X8,S7,A6.。。。的,所以按照你这个公式算的话应该是(7+6)/2=6.5,难道是四舍五入变成7这样算吗,我不知道是不是这样的算法,还请指点一二啊,谢谢!
另外同样是曹操,我改成智力和统帅100的话,升一级智力和统帅成长就变成11的成长了,这个是完美成长的增量吗?
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2008-6-2 21:37 资料 个人空间 短消息 只看该作者
回复 #20 乱世枭雄 的帖子

你发的附件无论怎样看都还是旧的5档人物成长(最高值5),何来6档?何来成长7?
配上你的DATA,就更别说11的成长。

另外曹操传中所有计算得出的数值的小数点后都省去,只算整数部分。
顶部
性别:未知-离线 乱世枭雄

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 296
编号 93991
注册 2006-12-3


发表于 2008-6-2 21:59 资料 短消息 只看该作者
难道是我发错了,我测试看看再发上来
顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2008-6-3 08:30 资料 个人空间 短消息 只看该作者
回复 #22 乱世枭雄 的帖子

00406CD1  |. 2C 02                   SUB AL,2
00406CD3     3C 09                   CMP AL,9
00406CD5  |. 72 02                   JB SHORT 00406CD9
00406CD7     B0 08                   MOV AL,8

修改上面的红色部分,DATA中可以设回9以上数值(9以上全显示为X)

附件是你的EXE的详细成长档。

[ 本帖最后由 godtype 于 2008-6-3 08:33 编辑 ]


图片附件: 0.GIF (2008-6-3 08:30, 8.89 K)

顶部
性别:未知-离线 乱世枭雄

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 忠义校尉
功绩 3
帖子 296
编号 93991
注册 2006-12-3


发表于 2008-6-3 17:03 资料 短消息 只看该作者
回复 #23 godtype 的帖子

非常感谢,现在已经改好了~你的热心帮助我不会忘记的!
另外我还想改一下这个EXE里的破甲攻击,就是完全改成和岳飞传里的那样。按照帖子我只能改成固定数值,但是还是跟最大HP有关,现在不最大怎么去掉这个,还请你指点一下~谢谢

[ 本帖最后由 乱世枭雄 于 2008-6-3 17:13 编辑 ]


图片附件: screenshot1.GIF (2008-6-3 17:13, 195.67 K)



图片附件: screenshot2.GIF (2008-6-3 17:13, 206.77 K)

顶部
性别:男-离线 godtype
(毅)

刘国公
广南东路经略使
枢密直学士
★★★★★★★★★★★★
★★★

Rank: 24Rank: 24Rank: 24
柱国(正二品) 轩辕春秋年度最佳(轩辕工作室)
组别 经略使
级别 卫将军
好贴 1
功绩 1314
帖子 6207
编号 111321
注册 2007-2-18
来自 我家
家族 轩辕学院


发表于 2008-6-3 21:57 资料 个人空间 短消息 只看该作者
回复 #24 乱世枭雄 的帖子

请作者Star175回答。
顶部
性别:未知-离线 yejingtang

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 28
编号 286865
注册 2008-7-16


发表于 2009-4-2 09:13 资料 短消息 只看该作者
头都晕~~
顶部
性别:未知-离线 lgk100

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 35
编号 292338
注册 2008-9-27


发表于 2009-4-2 12:46 资料 短消息 只看该作者
修改岳飞传时发现:
如果把某单位的五围改超过100,也能按提两档加一的成长。
这也是因为加了能力档吗?
顶部
性别:男-离线 squall122

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 13
编号 116676
注册 2007-3-5


发表于 2009-4-2 14:40 资料 短消息 只看该作者
正好最近想研究这方面,受教了
顶部
性别:未知-离线 star175

★★

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


发表于 2009-4-2 16:38 资料 文集 短消息 只看该作者
这个古董都被挖出来了
5.1版的地址已经改变,此方法不再适用
顶部
性别:未知-离线 renson007

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


发表于 2009-10-19 00:36 资料 短消息 只看该作者
我用原版的曹操传按照LZ的方法试了下,结果出错
步骤一和二基本一样
步骤三因为原版的406A55处没有空位,我用了485DD3(UE地址是851D3)这个空白位置
步骤四用了485DEB后面的空白位置
画瓢的地方我是这样改的

00477CF7  |.  E8 CDEFF8FF   CALL GEkd5.00485DEB(其中GEkd5中的“G”米有显示出来)
00477CFC  |.  8B1485 516A40>MOV EDX,DWORD PTR DS:[EAX*4+485DCF]
(485DCF这个位置是根据LZ的换算方法自己瞎算的,即485DD3-EAX*4=485DCF,不知对不对?)
所有修改保存后,结果就打不开了,文件出错了

附上修改的文件,麻烦帮忙看一下哪里改错?该怎么改?


附件: 1Ekd5.rar (2009-10-19 00:36, 208.04 K)
该附件被下载次数 203


顶部

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




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

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

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