ERA插件编写--认识插件和SDK
从本篇开始讲解插件相关的编写,以及ExtendedErmFunction编写的实例。希望更多有编程基础的朋友对ERA插件编程有所了解,另外揭开插件的面纱,其实他并不神秘。插件其实是一个DLL文件,又叫动态库链接文件,这个不多说。ERA平台会遍历MOD目录里面的目录,在这些目录下的EraPlugins文件夹里面寻找.dll和.era扩展名的文件,尝试用LoadLibrary加载进进程空间。这里值得注意的是.era扩展名的文件,他是ERA2.3以后的标准扩展名,只是扩展名不同而已,他本身仍然是个DLL文件。
也就是说,任何有效的DLL放到mod的EraPlugins目录下都会被加载,和编程语言无关。看到这里,学习VB的同学可以安心,如果你的DLL无法被加载,我立马给你50000WOG币的精神损失费。
现在说说SDK,位于Tools\Era\SDK。这里以C语言对应的era.h为例。SDK的作用就是便于开发,提供了很多定义好的结构体,以及定义很多angel.dll中的函数,这个angel.dll是ERA提供的一个“桥梁”,里面导出函数可以方便得让我们控制ERA的方方面面。
如果没有提供的SDK,比如VB编程的朋友,可以根据era.h变换成等效的VB代码,一样可以方便得链接ERA平台。本篇的目的是在于介绍插件和SDK,这里介绍使用SDK的第一步,以后的篇幅将逐步解析SDK的各个方面。
#include "Era.h"//包含SDK头文件
using namespace Era; //使用SDK命名空间
extern "C" __declspec(dllexport) BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
ConnectEra(); //调用函数ConnectEra();连接ERA平台
//做你想做的事情
}
return TRUE;
};
基本来说,简单的几步,就可以使用SDK的函数、结构体了。对于VB而言,导出angel.dll的ConnectEra函数后用同样的方法,也可以开始插件的开发了。必须说明的时,不使用SDK也可以开发出插件,SDK只是一个方便得函数接口,而并非必须的,这个视你需要实现的功能而定。
如果你的DLL无法被加载,我立马给你50000WOG币的精神损失费。
真是捡来的娃儿当脚踩!:nianjing: 对了,如果不是提问的帖子,我希望大家不要无意义插楼,这个对不起了,这个帖子我会继续完善下去,为方便查阅,所以希望大家理解。上面我师傅的算了,谁让他是我师傅呢。 原帖由 梦魇骑士 于 2013-7-16 23:02 发表 http://bbs.h3wog.com/images/common/back.gif对了,如果不是提问的帖子,我希望大家不要无意义插楼,这个对不起了,这个帖子我会继续完善下去,为方便查阅,所以希望大家理解。上面我师傅的算了,谁让他是我师傅呢。 你先写好,然后一直粘贴复制,这样就可以避免别人插楼了! VB可以,意思就是JAVA和C也可以了? 当我渐渐淡泊的时候,梦魇你又来催化了
拿vb来搞插件,我看我真受不了;dao;
回复 论坛兴旺玩家受益 5# 的帖子
只要你能做出dll,就可以了。回复 7# 的帖子
话说做出DLL和做出与H3关联的DLL不是那么一码事.看来有空得试试,来验证一下梦魇的描述.
ERA插件编写--插件操作ERM变量
承接上面一部分,这部分讲如何使用ERM中的变量。在插件里面,我们怎么使用v变量、z变量呢?答案是直接操作他们所在的内存。听起来似乎不容易,事实上SDK已经把这些地址给出来并且复制给了C变量,请看era.h以下部分:/* WoG vars */
int* v = (int*) 0x887664; // 1..10000
TErmZVar* z = (TErmZVar*) 0x9271E8; // 1..1000
int* y = (int*) 0xA48D7C; // 1..100
int* x = (int*) 0x91DA34; // 1..16
bool* f = (bool*) 0x91F2DF; // 1..1000
float* e = (float*) 0xA48F14; // 1..100
为了编程不混淆,SDK使用了和erm一样的变量名字,用数组来对应erm变量。譬如说,我们在erm中使用VRv2:S7;让v2变量指为2,对应的,在插件里直接使用v = 7;可以达到同样的目的。同理有一下几个例子:
VRz900:S^fack 007^;-> strcpy(z, "fack 007");//注意给z变量“赋值”要把字符串复制过去
VRv100:S89; -> v = 89;
可见,通过SDK定义好的变量,可以方便的使用和修改各erm变量的值,这样,就可以达到插件和erm的“沟通”。
页:
[1]