在fluffos中增加自定义efun的方法(附数据库自定义efun)

游戏驱动fluffos中提供的系统函数是efun,而我们游戏LIB中自己实现的系统函数是sefun,对可以用sefun解决的问题,本人推荐用sefun,毕竟efun已经太多了,虽然efun的运行效率要远高于sefun,但目前服务器的性能已经很好了,用sefun并不会慢多少,影响不了什么游戏性能,特别是对开源的LIB来说,用默认配置编译的驱动运行游戏能保证更好的兼容性。

不过,如果的确需要增加一些自定义的函数到驱动怎么办?下面简单的介绍一下在fluffos驱动中增加自定义efun的方法。

fluffos驱动的主要代码是在src目录中,驱动提供的efun都是通过包(package)的方式增加,位置在src/packages目录下,假如我需要增加一个efun string cwarp(string input, int width, int prefix),需要以下步骤:

  1. src/packages/ 目录中新建一个目录 mudren
  2. mudren目录中增加一个LPC函数原型文件mudren.spec,在文件中声明cwarp()函数的原型:
    string cwarp(string, int|void, int|void)

    示例自定义efun函数第二和第三个参数可以是intvoid类型,void意思是这个参数是可选的,函数返回值是string类型。

  3. mudren目录中新增函数的代码实现文件mudren.cc,需要注意的是,文件开头要包含package_api头文件:
    #include "base/package_api.h"

    具体函数名称需要f_efunction_name() {}的格式,如:

    void f_cwarp(void)
    {
    // cwarp efun 代码
    }

    代码可以使用C或C++语言,有特定的要求,具体代码可以参考src/packages目录下的其它文件的实现方式。

  4. mudren目录中新增CMakeLists.txt文件,参考内容如下:
    if(${PACKAGE_DATABASE})
    add_library(package_mudren STATIC
            "mudren.cc"
            )
    endif()

至此,自定义efun增加完成,在编译时我们用cmake -DPACKAGE_MUDREN=ON ..来生成makefile,编译的驱动就有我们自己实现的efun,同时驱动会新增一个宏定义:#define __PACKAGE_MUDREN__

以上示例中我们定义的包mudren只演示用,可以根据自己的需要取任何不冲突的英文名称。


最近有网友问我怎么在驱动中增加自定义的set、addn、query等数据操作相关efun,用来驱动特别的MUD。

这里提供已经写好的包package_database,下载后直接解压到fluffos源码的src/packages目录中,在编译时使用以下指令引入包:

cmake -DPACKAGE_DATABASE=ON ..

在游戏中对需要使用数据资料存取的对象,只需声明以下全局变量并初始化:

// 存档数据
private mapping database = allocate_mapping(0);
// 暂存数据
private nosave mapping temp_database = allocate_mapping(0);

然后就可以直接使用相关efun操作对象数据的增删改查了,相关efun原型如下:

mixed set(string, mixed, void | object);
mixed set_temp(string, mixed, void | object);
mixed query(string, void | object);
mixed query_temp(string, void | object);
mixed addn(string, int, void | object);
mixed addn_temp(string, int, void | object);
void delete(string, void | object);
void delete_temp(string, void | object);

如果你对自己编译驱动有困难,请参考以下教程:

或者在此下载本站提供的已编译好的专版驱动:

京ICP备13031296号-4