War3 1.20e修改器V3.04by大象。rar怎么用?
它需要在地图加载前打开。所有英雄都可以升级到10W,不考虑地图定义的英雄等级。
此外,1游戏因CE脚本对label标签的处理导致的崩溃被修复。
由于你可以改变英雄等级限制,你实际上可以随意设置平衡常数。我就是想不出有什么可以改变的。
关于标签标签的问题。
这个问题隐藏的太深了,我之前一直不明白原因。
比如有1个脚本。很普通的应用内存+跳转
globalalloc(myhook_install,0x3000)
标签(xmyhook_install)
game.dll+4dd90:
jmp myhook_install
not otherwise provided 除非另有规定
xmyhook_install:
myhook_install:
Xxxxxx(略)
jmp xmyhook_install
一般这样写不会有问题。但魔兽里没有。
Game.dll+4dd90这里的代码是随时调用的代码。用来记录游戏经过的时间。单位毫秒。
换句话说,这段代码的执行频率已经达到了毫秒级,1秒1千次。
有什么问题?
问题是脚本在跳转之后写代码之前修改了跳转。
跳转改变后立即执行代码,但此时跳转的地方没有写对应的代码!
于是出现了这个错误提示:
“xxxxx”(这里是myhook_install的地址)引用的内存“00000012”无法“读取”。
Myhook_install这里的代码怎么变成12了?
但是我看内存的时候发现这里的代码不是12,而是脚本定义的代码。
但是这里的错误信息是12。
这个12是哪里来的?
唯一的可能就是CE在写代码之前在这里做了一个类似12的标记。
修改跳转后,我发现了这个标签,把它改成了脚本的代码。
12在这里可能代表代码的长度。
所以不要用label标签跳转到执行频率高的代码。
相反,您应该手动编写反弹地址。
上面的脚本是这样写的,所以没有问题。
myhook_install:
xxxxxx
jmp game.dll+4dd96
game.dll+4dd90:
jmp myhook_install
not otherwise provided 除非另有规定
注意顺序,先写代码,再修改跳转。
确保您跳转到的代码是正确的。