我个人感觉FluffOS虽然是游戏驱动,但本身也是LPC语言的解释器,做为一门编程语言的解释器,要尽可能的轻,只提供核心功能和开发者不好模拟的功能函数,而能通过已有系统函数模拟的功能就不要再增加了,对非通用又不好模拟的方法,开发者自己实现并重新编译就行,不要把标准版驱动搞的太重了。毕竟到现在FluffOS中有近400个efun,这数量之巨大,也造成了很多efun并没有有效利用。
虽然吐槽驱动自带的efun太多,但是既然已经内置了,那还是尽量利用,不要重复造轮子,当然,这不怪大家没有用,只因驱动一直加。下面以炎黄MUD和自己看过的部分LIB的源码为例,看看我们重复造了多少轮子。
取数组随机元素
在游戏开发中,我们有太多情况需要取数组随机元素了,如:从奖励列表中随机获取一种奖励玩家,从敌人列表中随机选择一个发动攻击……,在大多数LIB中,对这个都是用以下方式实现的:
string *ob1_list = ({
"/clone/fam/etc/va1",
"/clone/fam/etc/va2",
"/clone/fam/etc/va3",
"/clone/fam/etc/va4",
"/clone/fam/etc/va5",
"/clone/fam/etc/va6",
});
string gift = ob1_list[random(sizeof(ob1_list))];
关键代码“ob1_list[random(sizeof(ob1_list))]”,先取数组元素个数,再取随机下标值,最后取出这个元素。在FluffOS中已经内置了一个外部函数:element_of,用来取数组随机元素,以上代码直接改成string gift = element_of(ob1_list);就够了。
而且在游戏开发中我们也应该养成习惯,对这种常用的代码片断,如果驱动没提供相关efun,直接自己写个sefun实现代码复用,而不是一直写这么长的代码,如:
#ifndef FLUFFOS
mixed element_of(mixed *arr)
{
return arr[random(sizeof(arr))];
}
#endif
字符串转数字
这也是在游戏开发中用的很多的需求,常用的方式是sscanf处理,或者自己写一个模拟外部函数atoi,如:
int atoi(string str)
{
int v;
if (!stringp(str) || !sscanf(str, "%d", v))
return 0;
return v;
}
实际上直接使用to_int这个外部函数就够了,这个函数除了可以把浮点数转为整数,也可以直接把字符转转为整数,如:to_int("123")、to_int("123abc")都返回整型数字123。