ES2 MUD LIB :: 東方故事二(ES2) 天朝帝國 mudlib 瀏覽展示

/doc/build/skill

HOME :: doc :: build :: skill
□ 技能定義物件(skill daemon)

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 的介面

在我們開始替這個技能定義物件加上實際的用途之前﹐先來看看它和 F_SKILL 的
介面﹐現在請在上面的範例加上下面的函數﹕

void skill_improved(object me, string skill)
{
}
HOME :: doc :: build :: skill