游侠NETSHOW论坛

标题: 兵种适性上限、战法成功率与距离修改 [打印本页]

作者: sergi    时间: 2008-10-7 18:39:19     标题: 兵种适性上限、战法成功率与距离修改

内存地址对应繁中pk1.1版

兵种适性与经验上限
004A6E40: 兵种适性提高所需经验的资料地址指标(007E81FC)
007E81FC开始是兵种升级经验150-200-250, 虽然不能直接修改,
不过可以自行在空白内存区段输入想要的数据, 然后将指标改为
该段内存的开始地址. 如果提高了兵种适性上限的话, 也可以多输入
新增加的兵种适性所需的适性经验, 例如150-200-250-100.

004A6E0D: 可获得兵种经验的适性上限(3=S)
兵种适性达到S(3)之后就不会再获得适性经验, 所以想再升到(4)的话,
此处也要做出相应的提高.
004A6E5F: 兵种适性上限(3=S)
004A6E63: 兵种适性超过上限时的封顶值(3=S)
兵种适性想升到4(以下称之为X)的话, 要在此修改上限.

兵种适性与战法成功率的计算
005AF8ED: 会开始对战法成功率做额外附加的兵种适性 (2=A)
005AF8FF: (上述兵种适性)对全战法附加的成功率(5)
005AF8F8: (上述兵种适性 + 1)对全战法附加的成功率(10)

有改过兵种适性的人应该会注意到, 把武将兵种适性改超过S的话,
战法成功率反而会下跌, 就是因为这些适性超过了有附加成功率的
适性范围. 下面举出一个修改例:

(战法适性)B    A    S
(部队适性)
B                75
A                80   75
S                85   80   75
这是没修改时的战法成功率(不考虑地形因素影响)

把005AF8ED改为3, 005AF8F8改为20, 005AF8FF改为10之后
(战法适性)B    A    S
(部队适性)
B                75
A                75   70
S                85   80   75
X                95   90   85
可以看出, 只有X与S有附加成功率, A因为没有附加, 所以等于B.

不同战法受地形影响的类型
005AFAD5: 战法成功率上限(100)
005AFADB: 战法成功率超过上限后的封顶值(100)

005AFAE8: (战法0=突刺)成功率资料地址的指标(005AF913)
005AFAEC: (战法1=螺旋突刺)成功率资料地址的指标(005AFA05)
005AFAF0: (战法2=二段突刺)成功率资料地址的指标(005AF928)
005AFAF4: (战法3=熊手)成功率资料地址的指标(005AF98D)
005AFAF8: (战法4=横扫)成功率资料地址的指标(005AFA05)
005AFAFC: (战法5=旋风)成功率资料地址的指标(005AFAD0)
005AFB00: (战法6=火矢)成功率资料地址的指标(005AFA0D)
005AFB04: (战法7=贯箭)成功率资料地址的指标(005AFA05)
005AFB08: (战法8=乱射)成功率资料地址的指标(005AFAD0)
005AFB0C: (战法9=突击)成功率资料地址的指标(005AF913)
005AFB10: (战法10=突破)成功率资料地址的指标(005AFA49)
005AFB14: (战法11=突进)成功率资料地址的指标(005AFA5B)
005AFB18: (战法12=火矢(井阑))成功率资料地址的指标(005AFADA)
005AFB1C: (战法13=破碎)成功率资料地址的指标(005AFADA)
005AFB20: (战法14=放射)成功率资料地址的指标(005AFADA)
005AFB24: (战法15=投石)成功率资料地址的指标(005AFADA)
005AFB28: (战法16=火矢(舰船))成功率资料地址的指标(005AFADA)
005AFB2C: (战法17=猛撞)成功率资料地址的指标(005AFAD0)

大略说明一下, 突刺与突击的指标相同, 代表受到地形影响的类型相同,
都是对地势较高的敌军成功率下降. 而熊手对地势较高的敌军成功率会
大幅上升. 兵器战法的指标指向100%成功率, 把其他战法的指标也改为
005AFADA的话, 成功率也就变成一定100%.

战法范围与移动距离
00594F63: 贯箭有效距离(3)
对超过此距离的目标使用贯箭的话, 无法正常攻击. 所以不论是修改
scenario.s11里的贯箭射程, 或是用san11pkme新增加的特技, 此处也要
修改才能对4格外的目标正常发动贯箭.

00595B7A: 突击的前进距离(1)
00595B9A: 突进的前进距离(2)

00596005: 突刺, 猛撞的推动距离(1)
00596015: 二段突刺的推动距离(2)(5格已测试成功)
推动距离改为0的话, 会一直退到有障碍为止...

计略消耗气力
0049518A: 计略消耗气力的资料地址之指标(0079CC08)
0079CC08开始, 依序为各计略消耗气力10-10-15-15-10-10-20-50-50
可以自行在空白内存区段输入想要的数据, 然后将指标改为
该段内存的开始地址.

附一张游戏中兵种适性由S提高至X的图

[ 本帖最后由 sergi 于 2008-10-7 18:41 编辑 ]
作者: pighead86    时间: 2008-10-8 09:07:21

我所知道的

弩兵在高处,对低处部队发动战法也有成功率提升(5%,10%)
弩兵对森林里的部队发动战法也有成功率提升(带射手),+10%
弩兵对湿地里的部队发动战法成功率下降,-10%
(以上可能只适用于火矢)
火计对森林会有计略成功率提升

等等

希望楼主有空可以从内存地址角度总结一下...
作者: 竹内栖凤    时间: 2008-10-8 09:10:49

很强大 。。。又看晕了。。。。。。。。。。。。。。。。。。。
作者: pighead86    时间: 2008-10-8 09:17:37

对于懒得修改自己内存, 只等修改器的人来说

里面的有用结论并不多啊,晕啥
作者: wangvieri    时间: 2008-10-8 09:22:09

lz能够介绍下如何具体修改吗
作者: sergi    时间: 2008-10-8 10:19:00

我没办法直接读懂内存, 所以得等高人出手了.
不过倒是有个小发现, 就是战法成功率是依据移动前的部队位置而决定,
并非依据移动后的位置.

例如熊手对高处敌军的成功率上升, 对低处敌军的成功率下降.
如果移动前熊手的成功率是上升状态, 那么即使移动后敌军变为
处于相对低处, 成功率仍然会是上升状态, 而不会变成下降状态.
作者: 我爱申华    时间: 2008-10-8 10:23:20

又要手动保存一篇…………LZ把研究心得整理打包到一个贴里吧…………
作者: pighead86    时间: 2008-10-8 10:23:59

原帖由 sergi 于 2008-10-8 10:19 发表
我没办法直接读懂内存, 所以得等高人出手了.
不过倒是有个小发现, 就是战法成功率是依据移动前的部队位置而决定,
并非依据移动后的位置.

例如熊手对高处敌军的成功率上升, 对低处敌军的成功率下降.
如果移动前熊手 ...



这个应该可以理解
之后的位置改变是结果, 而不是发动的条件

我是说你有可能从内存中找到成功率修正的单元么
比如熊手地势低增加成功率什么的
把成功率修正给公布出来
作者: fantasy17    时间: 2008-10-8 10:25:20

一直没改过内存。金山游侠那个改???????????????????????????
作者: 我爱申华    时间: 2008-10-8 10:41:20     标题: 回复 #9 fantasy17 的帖子

WinHex应该也可以吧
作者: jiangjd3    时间: 2008-10-8 12:51:55

问一下,这个内存的修改是每次登录都要重新修改一下吗?
作者: sergi    时间: 2008-10-8 13:38:20

8楼的理解似乎有些偏差. 我在6楼所提的「移动前、后」,
并不是战法成功后附带的移动效果, 而是战法发动前移到选定之位置的移动.

也就是说, 如果该回合开始时, 敌我双方的相对位置会使得某战法的
成功率下降, 那么即使移动到了对成功率有增加的位置, 该战法的成功率
仍然会是下降状态.

回覆11楼, 内存修改每次重启游戏都要再改一次, 因为每次重启游戏
都是从源文件读取资料后放入内存.  不过利用内存修改器的地址存档功能,
可以节省许多时间, 就我个人而言, 每次启动游戏后只不过多花5秒,
就可以完成数百个地址的修改.

对于不会做修改器的我来说, 已经是很方便了.
作者: y306250915    时间: 2008-10-8 13:49:28

kan  看不懂!!!!!!!!!!!!!!!!!!!!!!!!
作者: szwd1997    时间: 2008-10-8 13:59:17

再次支持楼主的辛勤劳动和探索精神
作者: musleejs    时间: 2008-10-8 14:18:48

不怎么了解数据结构,因此,和看天书基本无差别
作者: pighead86    时间: 2008-10-8 14:24:09

原帖由 sergi 于 2008-10-8 13:38 发表
8楼的理解似乎有些偏差. 我在6楼所提的「移动前、后」,
并不是战法成功后附带的移动效果, 而是战法发动前移到选定之位置的移动.

也就是说, 如果该回合开始时, 敌我双方的相对位置会使得某战法的
成功率下降, 那么 ...


哦,那比较神奇了
下一步的判断,不仅和状态有关,还和之前做过的事情有关?

san11里面还有其他这样的事情么?
作者: laichoon    时间: 2008-10-8 14:34:00

看不懂
不知道哪位高手可以編制成修改器。
作者: jiangjd3    时间: 2008-10-8 14:39:37

原帖由 sergi 于 2008-10-8 13:38 发表
8楼的理解似乎有些偏差. 我在6楼所提的「移动前、后」,
并不是战法成功后附带的移动效果, 而是战法发动前移到选定之位置的移动.

也就是说, 如果该回合开始时, 敌我双方的相对位置会使得某战法的
成功率下降, 那么 ...

太感谢了,不仅回答了问题,而且还说明了原因……
好人……
作者: Kenpareala    时间: 2008-10-8 15:01:15

楼主辛苦了..
每回合开始的相对位置决定战法成功率,光荣是为了简化计算,还是因为懒啊..
作者: sergi    时间: 2008-10-8 16:46:46

做了进一步测试, 发现我在12楼的结论也不完整.
正确的结论应该是, 每回合开始时的敌我相对位置只影响画面上
显示的战法成功率, 真正用来判断的战法成功率是由我方发动战法时
所在的位置与敌方位置来产生.

所以即使回合开始时我方的位置不利于战法成功率, 只要移动到
有利位置, 战法成功率就会有实质增加(画面显示值不再为真).

举例来说, 回合开始时敌我双方的位置使得显示的突进成功率是55%,
选择发动后失败, 读档后移至相对高处再发动, 此时显示的突进成功率
仍然是55%, 但是这次成功了. 这足以说明移动后的位置有实质影响.
换句话说, 一旦我方需要移动后再发动战法, 那么显示的成功率就
不能再作为参考, 必须自己依据新的敌我双方所在地势来判断.

San11pkme的完美成功率显示补丁是使用画面上显示的成功率数字,
所以可能出现原本判断失败(0%), 移动后却成功, 或是原本判断成功(100%),
移动后却反而失败的状况. 并不是修改器有问题, 而且游戏没有对
显示的成功率随时更新, 不能不说是一个小缺点.

[ 本帖最后由 sergi 于 2008-10-8 17:05 编辑 ]
作者: crosier    时间: 2008-10-9 14:18:36

好东西,希望能通俗些。
作者: 安妮罗杰    时间: 2008-10-23 09:15:19

原帖由 sergi 于 2008-10-8 16:46 发表
做了进一步测试, 发现我在12楼的结论也不完整.
正确的结论应该是, 每回合开始时的敌我相对位置只影响画面上
显示的战法成功率, 真正用来判断的战法成功率是由我方发动战法时
所在的位置与敌方位置来产生.

所以即使 ...

我来说明一下
成功率的计算函数只有一个
不论是显示的成功率 还是实际的成功率 都是使用同一个
这个BUG的原因就是由于成功率的计算函数在计算所使用的参数
是发动攻击的部队A的当前坐标1 以及 受攻击的部队B的当前坐标2
其中关键在于坐标1
内存查看可以发现 部队只有在确实的收到不能取消的命令以后 坐标才发生改变
也就是说 当玩家作出部队A的移动预想到坐标3时  坐标1没有任何变化
此时成功率函数调用得到的数值对于部队A的预想位置坐标3不准 而是以原位置坐标1计算的
只有在最后一下鼠标点下去以后坐标1才真正的修改到坐标3 于是实际行动时再调用成功率的计算的结果已经和原来显示的不同

PS 基于以上可以推论
当前坐标并不等同于每回合开始时的坐标
当一个移位战法生效后
坐标2即立刻改变
其他部队的成功率显示将以新的坐标2为参数
而并非回合开始的值
此推论可以验证 但我偷懒 不贴图了.....

作者: 安妮罗杰    时间: 2008-10-23 12:08:15

原帖由 sergi 于 2008-10-7 18:39 发表
内存地址对应繁中pk1.1版

兵种适性与经验上限
004A6E40: 兵种适性提高所需经验的资料地址指标(007E81FC)
007E81FC开始是兵种升级经验150-200-250, 虽然不能直接修改,
不过可以自行在空白内存区段输入想要的数据, 然 ...

有弓A的限制取消
我更新一个弓S的限制取消
00595374 修改为CC(原为2C)
0059537C 修改为75(原为74)
乱射的误伤就会完全取消
作者: ygd432113    时间: 2008-10-24 04:48:06

研究这种没人看得懂的天书有什么用?  有本事就放修改器出来,发这种帖子刷屏占空间吗
作者: afl001    时间: 2008-10-24 06:34:14

楼主用的是哪种内存编辑器,推荐个。
作者: thje    时间: 2008-10-24 08:10:38

嗯,见教。。。。。。
作者: sergi    时间: 2008-10-24 14:17:04     标题: 回复 #25 afl001 的帖子

我只用过GameMaster与FPE, 其他的还未曾尝试过.
GameMaster可改内存及EXE等文件, FPE的介面与搜寻语法也颇为方便,
各有长处, 我通常是一起使用.
作者: 安妮罗杰    时间: 2008-10-25 19:33:23

原帖由 sergi 于 2008-10-7 18:39 发表
有改过兵种适性的人应该会注意到, 把武将兵种适性改超过S的话,
战法成功率反而会下跌, 就是因为这些适性超过了有附加成功率的
适性范围. 下面举出一个修改例:

(战法适性)B    A    S
(部队适性)
B                75
A                80   75
S                85   80   75
这是没修改时的战法成功率(不考虑地形因素影响)

把005AF8ED改为3, 005AF8F8改为20, 005AF8FF改为10之后
(战法适性)B    A    S
(部队适性)
B                75
A                75   70
S                85   80   75
X                95   90   85
可以看出, 只有X与S有附加成功率, A因为没有附加, 所以等于B.

友情奉送

0x005AF8EB起0x18个字节
修改值8D 04 80 85 C0 74 09 BB FB FF FF FF 03 D8 EB 08 69 D8 67 66 66 66 33 DB
则战法成功率为每上升一个适应等级+5
修改值48 48 33 DB 85 C0 74 0A 83 F8 00 77 02 EB 09 83 EB FB 83 EB FB 6B C0 FB
则战法成功率为S以上时均+10
作者: 雅典娜    时间: 2008-10-25 21:09:48

如果能从云南一箭射到襄平……
作者: sergi    时间: 2008-10-26 05:22:47     标题: 回复 #28 安妮罗杰 的帖子

感谢大侠出手相助.
关于CE的memory viewer窗口内显示的opcode, 您之前提过好像有错误,
我个人无脑使用后, 有点小疑问.
例如霹雳(23)的内存地址是00595D65, 如果在memory viewer窗口
选择go to address 并输入00595D65的话, 显示的opcode是pop 17,
但是如果go to address是输入00595D20(该段程序开头), 那么
从00595D64开始的2byte(6A 17)的opcode变成push 17, 上面紧邻
的opcode也有变化. 是否有可能是因为go to address的切入地址
落在某句程序之中, 所以才造成您看到的错误?
如果能避开这一点的话, CE显示的opcode是否可以相信呢?

顺便感叹一下, 要看懂一行opcode就已经很难, 要连系一大串opcode
就更不要想了. 右侧的register与flag又无法显示, 断点追踪又被拒绝
(没有debugging right, 是因为传说中的safedisc吗?).
真是残酷的现实...............................

PS: 如果不会花费您太多时间的话, 能否指点如何将霹雳的波及伤害
从1/3倍改为1倍, 我想可能在00595D65之后的部份.
作者: 安妮罗杰    时间: 2008-10-26 11:41:44

原帖由 sergi 于 2008-10-26 05:22 发表
感谢大侠出手相助.  
关于CE的memory viewer窗口内显示的opcode, 您之前提过好像有错误,
我个人无脑使用后, 有点小疑问.
例如霹雳(23)的内存地址是00595D65, 如果在memory viewer窗口
选择go to address 并输入00595D65的话, 显示的opcode是pop 17,
但是如果go to address是输入00595D20(该段程序开头), 那么
从00595D64开始的2byte(6A 17)的opcode变成push 17, 上面紧邻
的opcode也有变化. 是否有可能是因为go to address的切入地址
落在某句程序之中, 所以才造成您看到的错误?
如果能避开这一点的话, CE显示的opcode是否可以相信呢?

顺便感叹一下, 要看懂一行opcode就已经很难, 要连系一大串opcode
就更不要想了. 右侧的register与flag又无法显示, 断点追踪又被拒绝
(没有debugging right, 是因为传说中的safedisc吗?).
真是残酷的现实...............................
PS: 如果不会花费您太多时间的话, 能否指点如何将霹雳的波及伤害
从1/3倍改为1倍, 我想可能在00595D65之后的部份.

PS: 如果不会花费您太多时间的话, 能否指点如何将霹雳的波及伤害
从1/3倍改为1倍, 我想可能在00595D65之后的部份.

你说的这个情况 就算用OD也是一样 是正常的 与此无关 其对索引和跳转识别皆不准确 不论此点 仍不可信

我想是SF的问题 不过我也没有能力搞定这种牛壳..
不能调试的结果就是指针CALL和指针J完全没有可能看懂~

搞汇编折腾几个小时是很平常的 SO 又三个小时过去nio~~~
霹雳的波及伤害
0x00595EBB 0x07字节
修改值 83 C4 1C 33 C0 8B C0
原始值 略
作者: keyneslin    时间: 2008-10-26 16:41:53     标题: 回复 #31 安妮罗杰 的帖子

剛看到這帖回一下~
關於san11pk的保護可以看這帖試試(使用後可反查)
http://forum.cheatengine.org/viewtopic.php?t=304542
至少~我用此方法找出回合數的code了 Orz...

ps:安妮大 何時開個OD教學帖~(針對SAN11),網上的教學沒針對性,難懂~(F8都快按爛了還找不到我要的Orz...)
ps2:sergi兄 用GM、FPE搜指令的方法也可開個教學帖,小弟很好奇(佩服)您是如何單靠這兩項工具找出code的
ps3:我當機了 Orz... 目前還不確定是我的code有問題,還是san11pk有寫入code的保護,總之,改天再試了,看片去~

[ 本帖最后由 keyneslin 于 2008-10-26 16:57 编辑 ]
作者: 安妮罗杰    时间: 2008-10-26 17:40:11

OD要按F8必须ATTACH上吧 你怎么弄上去的类?

311一般出错都只是跳出吧 你做的什么都说来听听 研究研究

PS san11pk要是有code区效验 照我那么大片大片的改早就该玩完了....怎KO能噢~~~~
作者: keyneslin    时间: 2008-10-26 18:32:13

原帖由 安妮罗杰 于 2008-10-26 17:40 发表
OD要按F8必须ATTACH上吧 你怎么弄上去的类?

311一般出错都只是跳出吧 你做的什么都说来听听 研究研究

PS san11pk要是有code区效验 照我那么大片大片的改早就该玩完了....怎KO能噢~~~~ ...

我也attach不上,
我是直接開exe檔的方式看能不能查到指令(網上教學都是直接開exe檔 Orz...)

另~關於錯誤的部分我已找到方法解決,
原本我用mov的方式填值但一直跳機(有一次是死機 ),
後來就改用db的方式填值~
應該是我的指令錯誤造成的吧~
不過不排除san11有check address的功能,
當初在寫homm5的script時就遇到過(填值順序是否正確會影響check,也就是會不會造成跳機)

ps:其實我對san11修改沒啥研究,因為van大及pkme的功能已經很強大了,而且現在也沒在玩san11了(等fallout3啊啊啊~),之所以會冒出來發言,完全是被安妮大及sergi兄的技術帖所吸引~兩位如能合作,估計能出不少實用的CT檔~呵呵呵~

[ 本帖最后由 keyneslin 于 2008-10-26 18:33 编辑 ]
作者: tkh321    时间: 2009-2-5 23:36:23

原帖由 keyneslin 于 2008-10-26 18:32 发表

我也attach不上,
我是直接開exe檔的方式看能不能查到指令(網上教學都是直接開exe檔 Orz...)



加了壳的直接开档,看到的不是真正的代码

之所以會冒出來發言,完全是被安妮大及sergi兄的技術帖所吸引  


同感,同感,佩服佩服
作者: zhudengfu    时间: 2009-6-29 15:34:15

技术贴,可惜不是学汇编的,不知道有没有高手给的详细的教程,我周末在家折腾了1天斗没有丝毫的头绪,

各位,一般使用的什么软件,GM似乎不是很好用。
作者: cyehua    时间: 2009-11-6 09:23:45

挖坟的来了,不知道LZ还在不????有个问题想问下,兵种适性按你的做能升到S+10%,那S+100%之类的上限怎么弄???

作者: cyehua    时间: 2009-11-14 14:18:48

兵种适性与经验上限
004A6E40: 兵种适性提高所需经验的资料地址指标(007E81FC)
007E81FC开始是兵种升级经验150-200-250, 虽然不能直接修改,
不过可以自行在空白内存区段输入想要的数据, 然 ...



sergi大大,经验上限的那个改不了上限,麻烦指导下,你说的我又看不懂
作者: 安妮罗杰    时间: 2009-11-14 14:46:48

007段是不能改的
004段可以改 不过需要一定的汇编经验来查找不需要的段落
作者: cyehua    时间: 2009-11-14 15:42:13

那要怎么改啊,004段的我都看不懂,安妮大大支下招
作者: lwt    时间: 2009-11-15 02:10:42

兵种适性与战法成功率的计算
005AF8ED: 会开始对战法成功率做额外附加的兵种适性 (2=A)
005AF8FF: (上述兵种适性)对全战法附加的成功率(5)
005AF8F8: (上述兵种适性 + 1)对全战法附加的成功率(10)

安大的友情奉送代码(本人认为是汇编后的机器指令段),覆盖了以上的数据地址的数据,应该有冲突,是上下的哪个地址写错还是怎么回事?有劳安大费心说明一下。(在005AF8ED前只有2字节,难道是三国的函数返回部?代码和数据也连的太紧了吧。)
0x005AF8EB起0x18个字节
修改值8D 04 80 85 C0 74 09 BB FB FF FF FF 03 D8 EB 08 69 D8 67 66 66 66 33 DB
则战法成功率为每上升一个适应等级+5
修改值48 48 33 DB 85 C0 74 0A 83 F8 00 77 02 EB 09 83 EB FB 83 EB FB 6B C0 FB
则战法成功率为S以上时均+10

恳请安大看后回复!

[ 本帖最后由 lwt 于 2009-11-15 02:13 编辑 ]
作者: lwt    时间: 2009-11-15 02:16:11

原帖由 安妮罗杰 于 2009-11-14 14:46 发表
007段是不能改的
004段可以改 不过需要一定的汇编经验来查找不需要的段落

请安大提供一些安全的“不需要的段落”地址段吧,先谢谢了!
作者: cyehua    时间: 2009-11-15 09:29:50     标题: 回复 #41 lwt 的帖子

这个我改好了,我发个FPE的文件给你要不?
作者: lwt    时间: 2009-11-15 11:47:46

原帖由 cyehua 于 2009-11-15 09:29 发表
这个我改好了,我发个FPE的文件给你要不?

首先表示感谢,不过我没有FPE,能否麻烦你把相关的修改告诉我?
要所有相关的地址,原值,修改值,自己改才有成就感呀!
怕找错了地方,所以要用原值对照,以求安全(我玩的是繁体PK1.1版,你的改法要同版才行)。
主要是确认安大的修改代码地址,和三国的空闲内存地址,含安全范围(可以有多少级) ,当然也可能你用了别的改法。

如果你实在不愿意麻烦,就只好发FPE的文件了,只是不知道怎么发,要怎么收?还要告诉我用的什么FPE版本,好网上找来下载。不过要安装FPE,记下改法后复原系统来删去FPE,我的习惯,系统中只有自己常用的软件,不含游戏,所以会连三国也复原掉了,还要重装三国11,重设所有的修改,还是有点麻烦的,最好还是告诉我改法。

再次感谢!

[ 本帖最后由 lwt 于 2009-11-15 12:15 编辑 ]
作者: 安妮罗杰    时间: 2009-11-15 13:42:34

1、战法成功率普适修改的问题,请安大指正确认
sergi 的内存修改:
兵种适性与战法成功率的计算
005AF8ED: 会开始对战法成功率做额外附加的兵种适性 (2=A)
005AF8FF: (上述兵种适性)对全战法附加的成功率(5)
005AF8F8: (上述兵种适性 + 1)对全战法附加的成功率(10)

安大的友情奉送:
0x005AF8EB起0x18个字节
修改值8D 04 80 85 C0 74 09 BB FB FF FF FF 03 D8 EB 08 69 D8 67 66 66 66 33 DB
则战法成功率为每上升一个适应等级+5
修改值48 48 33 DB 85 C0 74 0A 83 F8 00 77 02 EB 09 83 EB FB 83 EB FB 6B C0 FB
则战法成功率为S以上时均+10

本人求助:
安大给的是代码,覆盖了sergi地址的数据,应该有冲突,是上下的哪个地址写错还是怎么回事?有劳安大费心说明一下。(在005AF8ED前只有2字节,难道正好是调用的函数尾部?下面又恰好是005AF8ED开始的数据?)

新函数代码是我重写的函数 直接覆盖了311原本的计算函数 所以覆盖后sergi的地址无效了

2、S+的兵种升级经验问题,请安大指教帮助
sergi 的内存修改:
007E81FC开始是兵种升级经验150-200-250, 虽然不能直接修改,
不过可以自行在空白内存区段输入想要的数据, 然 ...

安大回复:
007段是不能改的(请教:007段不过是数据,而且是只有兵种升级经验才用到的数据,为何安大说不能改呢?)
004段可以改 不过需要一定的汇编经验来查找不需要的段落

本人求助:
能否请安大费神,顺手指点一些安全的“不需要的段落”地址段呢?
真的不敢在内存中乱填[兵种升级经验表],竟然是每项4字节,如果到S+100%,要4 X 13 = 52字节已经被游戏申请到手,但又没使用的“富余”内存呢!
如果能找到使用该表的指令,改成字节递增寻址字节读取比较,指令长度不变或变短填NOP。255点才升一级已经足够难了,007E81FC起有12字节,能用到S+90%,这样才是最安全可靠的吧?

找到连续52字节几乎不可能 我们原本只最多认为能填个3-4级已经在需求上足够了
字节递增的话需要自行找空域填加字节转换到字的代码 实现起来也相当麻烦
比较有操作性的设想是 所有的等级都用同一个数字比如250
0x4A6E3D起修改7字节 KB 00 BB FA 00 00 00

3、记不清了,好像也是安大的,如果知道,也请指点
百出版本2
消耗气力自定义(最后9字节 原顺序)
00495177
8B 4C 24 04 85 C0 75 0A 0F B6 81 08 CC 79 00 C2 04 00 0F B6 81 93 51 49 00 C2 04 00 0A 0A 0F 0F
0A 0A 14 32 32

本人求助:
怎样自定义呀?

我不是标了是最后9字节么

4、部队移动10格上限的寻找保护光驱,恳请安大关注,在可能的条件下帮一把


这个到目前为止 没有发现什么好办法

[ 本帖最后由 安妮罗杰 于 2009-11-15 13:45 编辑 ]
作者: 安妮罗杰    时间: 2009-11-15 13:52:27

原帖由 lwt 于 2009-11-15 11:47 发表

首先表示感谢,不过我没有FPE,能否麻烦你把相关的修改告诉我?
要所有相关的地址,原值,修改值,自己改才有成就感呀!
怕找错了地方,所以要用原值对照,以求安全(我玩的是繁体PK1.1版,你的改法要同版才行)。
主要是确认安大的修改代码 ...

实际上修改内存是每次开游戏都要改的 如果这个操作不借助一个内存修改脚本软件是十分麻烦的
所以如果你打算用你修改过的规则玩下去 恐怕你很难把FPE(或者其他脚本ME软件)移出系统 至少在你不再玩311之前如此

FPE最新的版本是2001版
作者: cyehua    时间: 2009-11-15 14:12:45

原帖由 lwt 于 2009-11-15 11:47 发表

首先表示感谢,不过我没有FPE,能否麻烦你把相关的修改告诉我?
要所有相关的地址,原值,修改值,自己改才有成就感呀!
怕找错了地方,所以要用原值对照,以求安全(我玩的是繁体PK1.1版,你的改法要同版才行)。
主要是确认安大的修改代码 ...

适应公式修改
0x005AF8EB起0x18个字节
修改值8D 04 80 85 C0 74 09 BB FB FF FF FF 03 D8 EB 08 69 D8 67 66 66 66 33 DB
我是这么改的(要选择8字节的那个)
005AF8EB  1165
005AF8EC  32772
005AF8ED  34176
005AF8EE  49285
005AF8EF  29888
005AF8F0  2420
005AF8F1  47881
005AF8F2  64443
005AF8F3  65531
005AF8F4  65535
005AF8F5  65535
005AF8F6  1023
005AF8F7  55299
005AF8F8  60376
005AF8F9  2283
005AF8FA  26888
005AF8FB  55401
005AF8FC  26584
005AF8FD  26215
005AF8FE  26214
005AF8FF  26214
005AF900  13158
005AF901  56115
005AF902  33755
作者: cyehua    时间: 2009-11-15 14:20:10

找到连续52字节几乎不可能 我们原本只最多认为能填个3-4级已经在需求上足够了
字节递增的话需要自行找空域填加字节转换到字的代码 实现起来也相当麻烦
比较有操作性的设想是 所有的等级都用同一个数字比如250
0x4A6E3D起修改7字节 KB 00 BB FA 00 00 00

安妮大大,这么改是不是每一级经验都250啊????
作者: 安妮罗杰    时间: 2009-11-15 19:07:19     标题: 回复 #48 cyehua 的帖子


作者: cyehua    时间: 2009-11-15 20:35:45     标题: 回复 #49 安妮罗杰 的帖子

那其他的就不能改了吧,C适性也不好生活啊
作者: 安妮罗杰    时间: 2009-11-15 21:08:06     标题: 回复 #50 cyehua 的帖子

你能升到S+90了 那么care那些C等人做什么
要不你就全150
作者: cyehua    时间: 2009-11-15 21:30:04     标题: 回复 #51 安妮罗杰 的帖子

S+90能升??? 安大果然厉害
S+100就不能了吗?
那把
0x4A6E3D起修改7字节 KB 00 BB FA 00 00 00
改成
0x4A6E3D起修改7字节 KB 00 BB FF 00 00 00
是不是升级就要255经验了????

[ 本帖最后由 cyehua 于 2009-11-15 21:33 编辑 ]
作者: 安妮罗杰    时间: 2009-11-15 22:26:02

最好不要改成255
因为当254时如果有一个+2的事件会直接变0
作者: newmusic    时间: 2009-11-15 22:27:41

花点时间都能搞的东西,要么做个修改器,要么就别装深沉了!!!!
作者: lwt    时间: 2009-11-15 23:03:32

首先谢谢各位大侠的热情指点!
复安大#45:
1、发短信后,睡了一觉突然想通了。sergi 的内存修改不是修改数据区,本来就是指令代码的操作数修改,安大的代码覆盖完全没问题。看了回复得到证实,谢谢。
2、52字节不敢奢望,只是举例而已,能到S+40%足够,也要28字节呢!潜意识中或许安大能做到吧。能有28或者24字节的富余地址么?
用字节转换双字的函数实现字节递增太麻烦,前提是找到原读表代码,修改成调用转换函数,可是如果已经找到原代码,直接把双字指令改成字节指令,双字递增变字节递增更简单,何必再找空域写转换函数。
安大的操作性设想很好理解,可是没说清楚,所以没法照做:
  A、0x4A6E3D起修改7字节 KB 00 BB FA 00 00 00,第一字节是KB,这不是合法HEX数值呀,写错?应该是什么?
  B、安大的修改原理是什么?是废弃经验表,用直接操作数指定250?那修改上面第四字节FA的值,就能改变升级的唯一经验要求值?还是取消递增,固定用原表中第三项?那修改007E8204处的数值,也能改变升级的唯一经验要求值?
  C、如果修改原理如上,0x4A6E3D就应该是原读表代码所在处了?双字寻址变字节寻址对安大来说,应该是只用吹灰之力的小手术,为何安大难为呢?我又猜错?
3、百出版本2的最后9字节,莫非是对应计略火计-雷计的9字节,各种都可以自定义?太好了,应该是只对百出有效,并非全体有效吧!
4、部队移动10格上限的寻找保护光驱,能得到安大上心就感激不尽了!本来就是随缘的事,专门去找,几十个小时可能连个浪花都没有啊!
再谢,盼复。

复安大#46:
我用的是金山游侠V超精简绿色版,每地址只能设4字节,不能输入HEX不方便,功能很少,勉强能按各位的办法修改,18字节要用6项修改拼成,看中的是绿色,恢复系统不影响使用。
安大能否推荐款好点的绿色软件,最好能支持最新Intel指令集汇编反汇编。

复cyehua #47:
先谢了!不过你并没有给出可以填扩展经验表的地址,这样S+的成功率能提高了,可还是不能升级呀。
还有,看了你的改法,第一印象就是用的安大的改法,是把2字节的数据表示在单字节地址上,包含了下一字节的数值,还是用10进的写法。真是不好意思,太感激了!
不过,如果每字节写出的话,用单字节的十六进数值串表示,如安大那样写,比较容易看明白的。
如果安大能找到24-28字节的空域,或解决了双字变字节的问题,或说清了0x4A6E3D的操作性设想,可以每级100点之类,你的“C适性也不好生活啊”就解决了

再次向两位表示感谢!

[ 本帖最后由 lwt 于 2009-11-15 23:30 编辑 ]
作者: 安妮罗杰    时间: 2009-11-16 00:29:38

2A
EB 抱歉当时疏忽写错了
2C
你的逻辑完全不符合汇编 有相当一部分的汇编指令是不接受字节的
并且字节操作指令不会自动把R32的高24位置0的
字节递增读出的字节不转换成字 后面的使用R32参数的汇编指令得到的参数就不是正确的
所以这个修改会相当的不方便 修改点将会非常多 而且可能造成一些不同修改之间的冲突
3
这是只对百出有效的 全体的方法记得楼主发过了
作者: lwt    时间: 2009-11-16 03:27:05

复安大#56
2A
4A6E3D EB 00 BB FA 00 00 00,我没有新的工具,用XP的DOS窗debug看,是
4A6E3D JMP 4A6E3F
4A6E3F MOV BX,250(250是2字节)
还多出2字节0,明显不对头,莫非实际是32位指令(因为在32位段中?)
4A6E3D JMP 4A6E3F
4A6E3F MOV EBX,250(250是4字节)
前2字节用JMP不用NOP,不知何种考虑?不过基本能确定,改这立即数,就改变了统一的升级经验点数。
2C
没有看到相关程序代码,没法细说,从经验点数的作用推测,无非把已有点数和要求值比较,不够Pass,够了就INC级别,应该不会太古怪呀。
字节指令不能把高24位置0?MOVZX如何?或先XOR清0也行吧,1-2字节或者可能挤的出来,编译器的优化应该比不过手动优化的。
还有,修改点应该不会很多呀,改成字节递增只要把偏移的乘数4从指令中去掉就行,估计指令长度不变或缩短。读取用MOVZX虽慢点,应该感觉不到吧,毕竟只有获得经验的动作后,才调用一次检查够否升级的,关键是指令长度+1,要想法挤出来。等字节变双字后,其它就不用管了吧。
多年没碰汇编了,如果说的不对,请别在意。还是要谢你的!

[ 本帖最后由 lwt 于 2009-11-16 03:28 编辑 ]
作者: 安妮罗杰    时间: 2009-11-16 13:18:31

偏移的乘数4从指令中去掉就行 这肯定是乱搞
这么算肯定出错偏移的乘数改了读取的长度不改读出来的能对么?
另外汇编里偏移和读取是用同一个指令
作者: lwt    时间: 2009-11-16 23:40:25

复安大#58
没有工具看不到,不妨假设一下:
级别在SI中,从安大的操作性设想看,升级要求经验会读入EBX,升级经验表地址是TABLE
假设原代码段:
        SHL        ESI,2        /*偏移*4,因为ESI已置,SHL SI,2同样效果*/
        MOV EBX,DWORD PTR TABLE[ESI]        /*读取升级要求经验双字*/

        LEA ESI,TABLE[ESI*4]        /*SI=表头+偏移*4*/
        MOV EBX,DWORD PTR [ESI]        /*读取升级要求经验双字*/
改为:
        MOVZX EBX,BYTE PTR TABLE[ESI] /*读取并扩展升级要求经验字节*/
可以吗?

[ 本帖最后由 lwt 于 2009-11-17 00:06 编辑 ]
作者: 安妮罗杰    时间: 2009-11-17 01:27:39

原代码只有一句
MOV R32, DWORD PTR [R32 * 4 + OFFSET]
MOVZX的做法我会研究一下
作者: lwt    时间: 2009-11-17 02:01:10

复安大#60
那就是原先我说的
MOVZX R32, BYTE PTR [R32 + OFFSET]了
MOVZX长出1字节,去掉*4未必会短1字节,可能还是要靠优化前后的代码挤出来。

[ 本帖最后由 lwt 于 2009-11-17 02:22 编辑 ]
作者: cyehua    时间: 2009-11-18 23:23:51

安大,有点问题啊
所有的等级都用同一个数字比如250
0x4A6E3D起修改7字节 EB 00 BB FA 00 00 00
这么改之后,兵种上限是能升到S+100的吗?怎么我适性S+的武将用战法都没有兵种经验的

[ 本帖最后由 cyehua 于 2009-11-18 23:31 编辑 ]
作者: 安妮罗杰    时间: 2009-11-19 02:29:17     标题: 回复 #62 cyehua 的帖子

等级上限还是要改的
作者: 风三笑    时间: 2009-11-19 13:58:11

S11又要热闹啦~!~

我补!!!
作者: gaoyuzhe    时间: 2009-12-3 18:07:47     标题: 回复 #1 sergi 的帖子

楼主能发个让适性升级的修改档么?改内存实在有点高深,不会啊.
作者: tkh321    时间: 2010-7-17 19:44:42

sergi 老大,修改兵种适性上限后成功率
确实下降了

005AF8EB - 83 e8 02                   - sub eax,02
005AF8EE - 74 0e                      - je 005af8fe
005AF8F0 - 48                         - dec eax
005AF8F1 - 74 04                      - je 005af8f7
005AF8F3 - 33 db                      - xor ebx,ebx
005AF8F5 - eb 0c                      - jmp 005af903
005AF8F7 - bb 0a 00 00 00             - mov ebx,0000000a
005AF8FC - eb 05                      - jmp 005af903
005AF8FE - bb 05 00 00 00             - mov ebx,00000005
005AF903 - 83 fd 11                   - cmp ebp,11

不知sergi老大,和安杰罗尼老大能否解释一下 以上一段代码

eax 是适性么
ebx 是成功率加成么

我把代码修改为
005AF8EB jmp start
start:
sub eax,01
jg s1
jmp 005AF903
s1:                                   //从适性B开始,每级加5点
add ebx,05
dec eax
jg s1
jmp 005AF903


为什么这样修改之后,所有战法的成功率为百分之百了呢??

[ 本帖最后由 tkh321 于 2010-7-21 17:46 编辑 ]
作者: tkh321    时间: 2010-7-18 19:44:03

读不起,我知道了,ebx没有清零


再请问两位老大有脱壳之后的san11pk.exe么

[ 本帖最后由 tkh321 于 2010-7-22 07:34 编辑 ]




欢迎光临 游侠NETSHOW论坛 (https://game.ali213.net/) Powered by Discuz! X2