看了ERA API引发的思考
今天晚上看了下ERA帮助里面的API小节,原来所谓的ERA SDK就1个era.h,包含了一个命名空间以及若干angel.dll导出函数的定义。不是我贪心,真的,这尼玛的不得不吐槽啊。在给的例子里面ApiHook最后一个CodeAddr的参数还用了个硬编码地址。关于触发器硬编码地址的问题,我用谷歌搜索了下,发现除了俄罗斯一论坛有个讨论帖子以外就没有其他资料可循了。根据API的功能总结了下,要实现复杂的功能必须依赖于DLL处在游戏进程空间这个条件来修改内存。沧海在回复我帖子的时候提过这个问题,仔细一看尼玛还真蛋碎啊。目前来看有几个问题要解决:
1:API的详细的用法。另外我英文不好,希望有英文好的翻译一下那个环节,谢谢了。
2:硬编码地址的寻找。即便用OD这样的动态调试器也不见得能够有效的找出它们。
3:内存地址随机化问题。win7默认没有强制所有程序地址随机化,但是估计后来的系统会这样。还有就是win7可能也会做这样的设置,那时候这些dll里面的硬编码地址都会失效,想想什么后果。
4:人力资源问题。虽然是业余写写,但是还是希望有几个人可以在网上商量沟通。
我也做了个例子,点击指挥官图标事件的。
编译器:VC++6
1)创建一个简单DLL工程
2)配置inlucde目录加上TOOLS/ERA/SDK
3)输入代码编译组建
4)拷贝文件到eraplugins
#include "stdafx.h"
#include "era.h"
#include <stdio.h>
using namespace Era;
void __stdcall OnOpenCommanderWindow_Handler(TEvent* Event) //点击指挥官图标操作器
{
ExecErmCmd("IF:M^梦魇骑士你乱点指挥官,我要划圈圈诅咒你^;");
}
extern "C" __declspec(dllexport) BOOL APIENTRY DllMain(
HANDLE hModule,
DWORDul_reason_for_call,
LPVOID lpReserved)
{
if(ul_reason_for_call != DLL_PROCESS_ATTACH) return TRUE; //不是attach到进程则直接返回
ConnectEra(); //加载angel.dll并导出函数地址以备用,详见era.h
RegisterHandler(OnOpenCommanderWindow_Handler, "OnOpenCommanderWindow"); //注册
return TRUE;
}
本来想研究研究ERA结构,一看这阵式,估计只能研究ERA的使用了。我只懂一点点VB编程,不懂dll。不过,以前的中文插件都是深入dll才做出来的。 本来SOD就是95时代的遗老遗少,指望能在硬编码上倒腾出新花样来纯粹是和自己过不去。
而且我有一帖说过了,因为当时的技术限制SOD用了很多不得已而为之的蠢办法,结果就是WOG也跟着倒霉。
所以,严格来说,与其试图继续在SOD的基础上作文章,反倒不如重起炉灶新作一个程序调用资源。本来LUA的359是有点希望……
至于ERA么,本质上还是没有脱离WOG的范围。 个人觉得这是时间精力的问题,既然别人老外能写出插件,难道我们就不可以吗。只是这活太费力罢了。 看来我没有看错楼主哦.
继续研究研究
;oweojs;
回复 5# 的帖子
只有等周末抽时间看,还的上班哎。 原帖由 梦魇骑士 于 2013-1-24 09:07 发表 http://bbs.h3wog.com/images/common/back.gif个人觉得这是时间精力的问题,既然别人老外能写出插件,难道我们就不可以吗。只是这活太费力罢了。 不是简单的插件问题,如果你只在乎写插件的话我自然是拍手称赞。但要是你想要做出WOG所不能的话,那还是另找一个引擎比较妥当。
HOMM3现在可以算一款”老游戏“,它的结构不像新时代的同伴那样拥有广大的扩展性和兼容性(当然严格来说,HOMM3的文件和程序结构还算是比较开放的了),我们只求修修补补,最多添砖加瓦。要想彻底改造,那真是谨谢不敏。
最近论坛很多人会一拍脑袋,说”我这样来改造H3/WOG/ERA是最好的“……我表示很心寒。而且其中的个别几个还特别喜欢YY出一个不切实际的想法硬要别人帮他实现。
希望楼主不是这种人。也希望楼主是爱着HOMM3和它的一切的人。 ;han; 太高端了 LZ乃专业人士也,鉴定完毕;kaun;
跟K大、沧老湿、007好好切磋切磋,基情无限哦;aieol;
回复 9# 的帖子
我和007昨天已经勾搭上了 Era works even on Windows 8 64 bits, but I had to enable compatibility mode with Windows XP Service Pack 2. Address randomization is a problem, right, but we cannot rebuild everything from scratch. Because if SoD base image address changes from 0x400000 to anything else, almost all UN:C hacks/wog and plugin code will become invalid. Only VCMI is free from these drawbacks. Though to say the truth Win XP..Win 8 allow playing our old Heroes 3 game, so it's not a real problem.Era SDK is not perfect. It's very simple. But it introduces normal event system, which is rather scalable. I hope Era 2.60 will also add internationalization support based on universal language files with alphabetic keys and values.
3.59 LUA engine has means for installing hooks in the code right from LUA. But again, using absolute addresses. Sorry, the above post was written by me. Forgot to relogin. 梦魇一个帖子竟把西方的如来给招来了;kaun; Berserker 发表于 2013-12-2 00:15
Sorry, the above post was written by me. Forgot to relogin.
I want know more about the details of the creatures in memory. I try to research the code but without any achievement. Can you help me with my problem? Thx. Did you download WoG sources?
IDA database
https://dl.dropbox.com/u/44735333/wog/Heroes3f.rar
Map editor IDA database
https://dl.dropboxusercontent.com/u/44735333/wog/h3maped.rar
WoG Sources (2006 year):
http://archive.heroes35.net/download.php?id=189
Most of Heroes structures are described in several .h files like structs.h.
baratorch (the author of HiRez mod) also released the sources. I can search the link if you are interested and know C++ a bit. Berserker 发表于 2013-12-3 03:25
Did you download WoG sources?
IDA database
https://dl.dropbox.com/u/44735333/wog/Heroes3f.rar
Oh,so helpful and great! 本帖最后由 真的很Man哦 于 2013-12-9 23:59 编辑
SOD和WOD是我玩得最久的游戏了,总共有十多年了,其间有时间偷偷抽空跑几百公里跑去和朋友玩,也是玩这游戏,真回味,要是能搞到SOD的源码就爽了(痴心妄想,哎!) 本帖最后由 真的很Man哦 于 2013-12-10 00:00 编辑
Berserker 发表于 2013-12-3 03:25
Did you download WoG sources?
IDA database
https://dl.dropbox.com/u/44735333/wog/Heroes3f.rar
小小程序猿一枚,有时间也研究一下WOG的源码。
页:
[1]