同人星球BBS -> 游戏修改 -> [修改资料]绯想天1.02 天气的修改 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

修改众 08-06-09 06:41

这是本区第1个调用子程序的实际例子


102相对于101,指针没变化
人物数组结构增加了4byte的偏移量
也就是说增加了1个变量在人物数组中

[[006D7224]+C] 玩家1
[[006D7224]+10] 玩家2
[006d5E08]+10 练习模式天气
006D5E0C 2byte 天气时间 真
[006d7228]+488 float 天气时间数字

人物数组结构
C X
10 Y
13C 当前动作?
174 HP
176 HPMax
482 MP
484 MPMax
52c 4byte 卡片生成基数
530 4byte 剩余卡片数量 (到0就没有卡片可以用了
554 卡片完成度 (500 就打开1张卡片
556 byte 卡片数量
564 4byte 卡片选择
568 4byte 卡片数量2

===============天气的改修
找天气编号地址失败。所以就从天气剩余时间入手。
天气在时间999的时候就会改变。
因此观察将时间置为999的代码,附近代码是这样

0046FE22 - 8b ce                      - mov ecx,esi
0046FE24 - 5e                        - pop esi
0046FE25 - e9 76 80 ff ff            - jmp 00467ea0
0046FE2A - 66 3d e7 03                - cmp ax,03e7
0046FE2E - 7c 14                      - jnge 0046fe44
0046FE30 - 6a 01                      - push 01 参数1入栈
0046FE32 - 51                        - push ecx 参数2入栈,这个就是天气的代码
0046FE33 - 8d 4e 04                  - lea ecx,[esi+04] 将必要指针放进ecx
0046FE36 - 66 c7 05 0c 5e 6d 00 e7 03 - mov word ptr [006d5e0c],03e7 天气时间置为999
0046FE3F - e8 cc 3a fc ff            - call 00433910 调用天气变化子程序
0046FE44 - 8b ce                      - mov ecx,esi
0046FE46 - 5e                        - pop esi
0046FE47 - e9 54 80 ff ff            - jmp 00467ea0
0046FE4C - cc                        - int 3
0046FE4D - cc                        - int 3

要改变天气就很简单了。
直接将参数入栈,然后call 00433910 就可以。

具体实现脚本是这样
Copy code

[ENABLE]
createthread(weather)
alloc(weather,1000)

weather:
mov esi,[006d7224]
push 01
push [006d5E1C]
lea ecx,[esi+04]
mov word ptr [006d5e0c],03e7
call 00433910
ret
[DISABLE]
dealloc(weather)


这个脚本将 [006d5E1C] 作为指针,天气的代码就存放在这个指针中


查看完整版本: [-- [修改资料]绯想天1.02 天气的修改 --] [-- top --]

Powered by PHPWind v5.3 Code © 2003-05 PHPWind
Time 0.033864 second(s),query:3 Gzip enabled

You can contact us