es2 mudlib 的一大特色是将许多游戏中人物的种族、职业、技能、症状等传统 lpmud 中只有少数 arch
或 admin
级的巫师才能写的东西定义出一个介面,让一般的巫师也有机会写,这种特性我称之为「游戏系统的抽象化」,事实上可以说是企图容纳所有创作游戏者创意的企图。
在
es2 mudlib 中定义一个技能可能比你想像中的简单了好几倍,你所要做的只是写一个称为技能定义物件(skill
daemon)的程式,然后让它 compile
过就可以了。
在我们开始介绍如何写技能之前,必须先让你了解一个观念,就是 daemon 的注册
(registeration),在 es2 中跟游戏制度有关的 daemon 都需要经由向一个 DAEMON_D
注册的程序,而且所有对这些 daemon 的呼叫也都是透过 DAEMON_D 的管理,因为这些 daemon 很可能是经验不如 mud
管理者丰富的新手巫师写的,当这些 daemon 有错误,或者是需要修改的时候,如果对这个 daemon
的引用是分散在各个用到它的程式里,那么修改起来所需要的时间、人力(跟权限)必定不是一般巫师所能负荷的。
好了,我们先从最简单的一个技能开始
....
技能范例:
// example skill daemon
inherit SKILL;
void create()
{
seteuid(getuid());
DAEMON_D->register_skill_daemon("barking");
setup();
}
上面这个程式就是 es2
中一个最简单的技能物件,我想大部份的人可能都会惊讶于它的简单,没错,这个技能物件只是「定义」了这样一个技能的存在,但是它并没有定义任何技能可能会有的「用途」,这样一个技能还没有办法让玩家学习或使用,它只是告诉
DAEMON_D 我们这个物件是提供 barking 这个技能的所有定义,以后当任何程式用到 SKILL_D("barking")
的时候,就是指我们这个物件。
在我们开始替这个技能定义物件加上实际的用途之前,先来看看它和 F_SKILL
的介面,现在请在上面的范例加上下面的函数:
void skill_improved(object me, string skill)
{
}
|