ES2 mudlib 規格文件 (2.1.4 Draft)

Copyright © 2002 Minxin Zhang <annihilator@muds.net>

目錄結構

以下列出的是 ES2 mudlib 根目錄下標準的子目錄結構,以及簡短的說明。

/adm 儲存由系統管理者所管理的程式與資料檔。
/std 儲存標準物件的程式碼。
/obj 儲存通用物件的程式碼。
/feature 儲存物件特徵的程式碼。
/daemon 儲存遊戲制度精靈的程式碼。
/d 儲存開放區域的程式碼。
/cmds 儲存全域性使用者指令的程式碼。
/include 儲存系統表頭檔。
/doc 儲存說明文件文字檔。
/data 儲存使用者帳號、物件資料。
/u 儲存巫師工作目錄。
/log 儲存系統日誌。

系統函數 (Simul-Efuns)

以下列出的是 ES2 mudlib 目前定義的 simul-efun 及扼要的用途說明。

chinese_number 傳回中文格式的數字如「一百三十六」等。
chinese_period 傳回中文時間的表示法如「一小時三十六分」等。
to_chinese 傳回一個英文詞彙的對應中文名稱。
break_chinese_string 將一個含有中文的字串依照指定長度斷成數行。
currency_string 傳回中文錢的表示法如「三兩銀子又十二文錢」等。
cat 將一個檔案的內容顯示給 this_player()。
log_file 將一段文字寫入指定的日誌 (log) 檔。
assure_file 檢查並建立一個檔案路徑中所有的目錄。
base_name 傳回物件的真正檔名 (去掉物件流水號)。
gender_self 傳回指定性別的中文第二人稱。
gender_pronoun 傳回指定性別的中文第三人稱。
getoid 傳回物件的流水號。
file_owner 傳回指定檔案的擁有者 (巫師) 代號。
creator_file 傳回指定檔案的建立者 UID,用來設定物件被建立時的權限。
destruct 覆蓋 efun 中的 destruct,作各種檢查。
users 覆蓋 efun 中的 users,作各種檢查。
livings 覆蓋 efun 中的 livings,作各種檢查。
objects 覆蓋 efun 中的 objects,作各種檢查。
exec 覆蓋 efun 中的 exec,作各種檢查。
user_cwd 傳回指定巫師目前的工作目錄 (實作錯誤)。
user_home 傳回指定巫師的 home 目錄。
user_path 傳回指定巫師的 home 目錄加上 '/'。
user_data 傳回指定使用者的人物存檔檔名。
login_data 傳回指定使用者的帳號存檔檔名。
mail_data 傳回指定使用者的郵件信箱存檔檔名。
resolve_path 傳回展開 '.' 與 '..' 表示法的路徑名稱。
wiz_level 傳回指定使用者的巫師等級。
wizhood 傳回指定使用者的巫師等級名稱。
wiz_level 傳回指定使用者的巫師等級。
ntime 傳回 ISO-8601 的日期時間表示法。
snoop 覆蓋 efun 中的 snoop,作各種檢查。
message_vision 將訊息加上人稱變化,顯示給多個對象。
tell_object 利用 message efun 提供與早期 MudOS 的相容 efun。
tell_room 利用 message efun 提供與早期 MudOS 的相容 efun。
shout 利用 message efun 提供與早期 MudOS 的相容 efun。
write 利用 message efun 提供與早期 MudOS 的相容 efun。
say 利用 message efun 提供與早期 MudOS 的相容 efun。

系統表頭檔 (Include Headers)

表頭檔位於 /include 目錄下,以下列出 ES2 目前使用中的表頭檔。

<action.h> 定義人物特徵 F_ACTION 所使用到的巨集符號。
<action.h> 定義人物特徵 F_ACTION 所使用到的巨集符號。
<ansi.h> 定義 ANSI 色彩/游標控制碼的巨集符號。
<armor.h> 護具類物件的標準表頭檔,含護具類物件的繼承定義。
<attack.h> 定義人物特徵 F_ATTACK 中宣告的函式原型。
<attribute.h> 定義特徵 F_ATTRIBUTE 中宣告的函式原型與巨集符號。
<char.h> 定義人物特徵 F_* 巨集符號。
<combat.h> 定義人物特徵 F_COMBAT 所使用到的巨集符號。
<command.h> 定義指令系統所使用到的巨集符號,以及預設指令搜尋路徑。
<condition.h> 定義人物特徵 F_CONDITION 所使用到的巨集符號。
<condition.h> 定義人物特徵 F_CONDITION 所使用到的巨集符號。
<config.h> 定義 ES2 mudlib 系統組態,與開啟/關閉某些選擇性功能的符號。
<copyright.h> ES2 mudlib 著作權聲明的表頭檔。
<daemon.h> 定義精靈物件 *_D 的巨集符號。
<dbase.h> 定義特徵 F_DBASE 所使用的巨集符號。
<explore.h> 定義利用使用者特徵 F_FLAG 紀錄使用者探險點數的檢查點所使用的巨集符號。
<function.h> MudOS 的函式指標所使用的巨集符號 (根據 MudOS 定義)。
<globals.h> ES2 mudlib 的系統預設表頭檔。
<intermud.h> Intermud 通訊協定相關的巨集定義。
<item.h> 一般物件的標準表頭檔,含一般物件的繼承定義。
<localtime.h> MudOS 的 localtime efun 所使用的巨集符號 (根據 MudOS 定義)。
<login.h> 有關玩家身分驗證、人物創造的組態設定。
<move.h> 定義特徵 F_MOVE 所宣告的函式原型。
<mudlib.h> 有關 ES2 mudlib 的版本資訊等巨集定義。
<name.h> 定義特徵 F_NAME 所宣告的函式原型。
<obj.h> 定義通用物件的位置。
<origin.h> MudOS 的 origin efun 所使用的巨集符號 (根據 MudOS 定義)。
<race.h> 遊戲中與種族相關的巨集符號。
<room.h> 房間類物件的標準表頭檔,未包含繼承定義。
<runtime_config.h> MudOS 的 get_config efun 所使用的巨集符號 (根據 MudOS 定義)
<score.h> 定義人物特徵 F_SCORE 所宣告的函式原型。
<skill.h> 定義人物特徵 F_SKILL 所宣告的函式原型。
<socket_err.h> MudOS 的 socket 族群 efun 所使用的巨集符號 (根據 MudOS 定義)。
<statistic.h> 定義特徵 F_STATISTIC 所宣告的函式原型。
<team.h> 定義人物特徵 F_TEAM 所宣告的函式原型。
<type.h> MudOS 的 typeof 運算傳回值的巨集定義 (根據 MudOS 定義)。
<user.h> 定義使用者特徵的 F_* 符號,以及一些相關組態設定。
<weapon.h> 武器類物件的標準表頭檔,含武器類物件的繼承定義。

物件特徵 (Feature Objects)

物件特徵是 ES2 mudlib 異於其他 mudlib 的最主要特色,在 ES2 mudlib 的設計哲學中,一個物件分析到最後,就是一群物件特徵的聚合體

ES2 mudlib 在物件特徵的目錄下,另外細分幾個族群,分列如下:

具有屬性 /feature/attribute.c
具有計量值 /feature/statistic.c
具有資料庫 /feature/dbase.c
具有自動釋放功能 /feature/clean_up.c
具有唯一性 /feature/unique.c
可以被飲用 /feature/drink.c
可以被裝備 /feature/equip.c
可以被食用 /feature/food.c
可以被移動 /feature/move.c
可以被看見與指名 /feature/name.c
可以被儲存 /feature/save.c
可以被研讀 /feature/study.c
人物特徵
 能夠攻擊 /feature/char/attack.c
 能夠使用指令 /feature/char/command.c
 能夠計算貨幣 /feature/char/finance.c
 能夠接收訊息 /feature/char/message.c
 能夠學習技能 /feature/char/skill.c
 能夠進行持續性動作 /feature/char/action.c
 能夠維持戰鬥狀態 /feature/char/combat.c
 能夠受輔助/不良狀況效果影響 /feature/char/condition.c
 能夠建立師徒關係 /feature/char/master.c
 能夠提升等級、經驗 /feature/char/score.c
 能夠組織隊伍 /feature/char/team.c
使用者特徵
 能夠儲存 alias /feature/char/alias.c
 能夠儲存物品 /feature/char/autoload.c
 能夠編輯文字 /feature/char/edit.c
 能夠紀錄事件旗標 /feature/char/flag.c
 能夠使用 pager /feature/char/more.c
護具類物件特徵
 盔甲類 /feature/armor/armor.c
 衣物類 /feature/armor/cloth.c
 鞋類 /feature/armor/feet.c
 戒指類 /feature/armor/finger_eq.c
 手套類 /feature/armor/hand_eq.c
 頭盔類 /feature/armor/head_eq.c
 護腿類 /feature/armor/leg_eq.c
 項鍊類 /feature/armor/neck_eq.c
 腰帶類 /feature/armor/waist_eq.c
武器類物件特徵
 斧類 /feature/armor/axe.c
 刀類 /feature/armor/blade.c
 鈍器類 /feature/armor/blunt.c
 匕首類 /feature/armor/dagger.c
 針類 /feature/armor/needle.c
 槍類 /feature/armor/pike.c
 杖類 /feature/armor/staff.c
 劍類 /feature/armor/sword.c
 鞭類 /feature/armor/whip.c

標準物件 (Standard Objects)

標準物件主要提供區域建造者物件的基礎原型,區域建造者經由「繼承」這些 標準物件來撰寫區域內的物件。ES2 mudlib 在標準物件目錄下另外細分幾個 族群,分列如下:

留言板物件 /std/bboard.c
人物狀況定義物件 /std/condition.c
技能定義物件 /std/skill.c
貨幣物件 /std/money.c
種族類物件
 類人種族 /std/race/humanoid.c
人物類物件 /std/char.c
 非玩家人物 /std/char/npc.c
房間類物件 /std/room.c
 錢莊 /std/room/bank.c
 當舖 /std/room/hockshop.c
 當舖儲藏室 /std/room/hockshop_storage.c
 客棧 /std/room/inn.c
 旅行點 /std/room/journey.c
物品類物件 /std/item.c
 可合併物品 /std/item/combined.c
 容器物品 /std/item/container.c
 液態物品 /std/item/liquid.c
 藥材 ?? /std/item/pharmacy.c
 原物料 /std/item/reagent.c

另外有一類介於標準物件與通用物件之間的重要物件,因為物件權限的規劃, 被安排放在標準物件的目錄下,這些物件包括:


精靈物件 (Daemons Objects)

精靈物件是指遊戲系統中一些用來提供某些功能,但是並不具備實體的抽象物件, 這些功能並不專屬於某幾種物件,也不依存某些物件而存在。 它們的角色類似神話中掌管大自然的火之精靈、光之精靈等,因此而得名。

精靈物件主要分為兩類,第一類位於 /adm/daemons 目錄下,為具有 ROOT 權限 的系統精靈;另一種位於 /daemon 下,為具有 MUDLIB 權限的遊戲制度精靈。

目前 ES2 的系統精靈包括:

指令代換精靈 /adm/daemons/aliasd.c 負責提供系統通用 alias 給所有使用者。
頻道精靈 /adm/daemons/channeld.c 負責提供所有通訊頻道如 chat、wiz、rumor 等。
人物精靈 /adm/daemons/chard.c 負責設定、檢查、人物的狀態,包括死亡、復活等。
中文精靈 /adm/daemons/chinesed.c 負責處理中、英文對照,以及一些與中文相關的功能。
家族精靈 /adm/daemons/cland.c 負責管理所有玩家間的持久性組織。
指令精靈 /adm/daemons/cmd_d.c 負責管理玩家指令的搜尋與執行。
戰鬥精靈 /adm/daemons/combatd.c 負責所有戰鬥的進行。
制度精靈 /adm/daemons/daemond.c 負責管理第二類制度精靈的登記、查詢、呼叫。
情緒精靈 /adm/daemons/emoted.c 負責管理、執行所有的情緒指令。
裝備強化精靈 /adm/daemons/enhanced.c 負責裝備的隨機強化。
使用者查詢精靈 /adm/daemons/fingerd.c 負責處理並執行 finger 指令。
連線精靈 /adm/daemons/logind.c 負責管理使用者連線登入、創造人物、斷線、重新連線等。
自然現象精靈 /adm/daemons/natured.c 負責管理天氣變化與遊戲中的自然現象。
系統效能精靈 /adm/daemons/profiled.c 負責監控、統計系統效能。
權力精靈 /adm/daemons/securityd.c 負責管理所有物件對檔案系統的讀寫權、以及某些 efun 的使用權。
郵件精靈 /adm/daemons/smtpd.c 負責管理使用者間互相寄送郵件的功能。
身分識別精靈 /adm/daemons/userid.c 負責網路使用者身份識別。
虛擬物件精靈 /adm/daemons/virtual.c 負責管理虛擬物件的產生。

制度精靈主要隨各 MUD 遊戲設計不同而異,目前 ES2 所使用的制度精靈有以下幾類:

種族精靈 位於 /daemon/race 目錄下
職業精靈 位於 /daemon/class 目錄下
技能精靈 位於 /daemon/skill 目錄下
狀態精靈 位於 /daemon/condition 目錄下
留言板物件 位於 /daemon/board 目錄下

指令物件 (Command Objects)

指令物件唯一的用途是用來提供使用者執行指令,這些物件的特色是:具有 ROOT 權限,但是在執行指令時,通常會降低為和執行指令的使用者相同的權限。

目前 ES2 mudlib 將指令物件依照使用權限高低分為以下幾類, 權限較高的使用者可以使用權限較低者全部的指令。

大神指令 位於 /cmds/adm 目錄下
大巫師指令 位於 /cmds/arch 目錄下
巫師指令 位於 /cmds/wiz 目錄下
實習巫師指令 位於 /cmds/app 目錄下
見習巫師指令 位於 /cmds/imm 目錄下
玩家指令 位於 /cmds/usr 目錄下
一般指令 位於 /cmds/std 目錄下

以下是 ES2 目前所有的通用指令: (不含由物件、房間、職業、種族所提供的特殊指令)

chpass 大神 設定除了大神以外,任意使用者的密碼。
shutdown 大神 立即關閉遊戲伺服器,如果你用一個自動重新啟動的 shell script 跑 neolith,這個指令也可以用來立即重新啟動 MUD。
callouts 大巫師 列出所有物件待執行的 callout 函數。
chinese 大巫師 中文精靈的管理工具,可設定中英文對照。
cleanup 大巫師 對所有物件呼叫自動清除 (clean_up) 函式。
force 大巫師 強迫另一位使用者執行指定的指令。
heal 大巫師 完全恢復一位使用者的健康狀態。
overview 大巫師 檢視系統一些物件的統計資料。
possess 大巫師 附身在指定的 NPC 物件。
promote 大巫師 提升/降低指定使用者的巫師等級。
purge 大巫師 刪除指定使用者的帳號
reboot 大巫師 啟動系統正常的重新啟動程序,開始倒數計時,並發出訊息警告所有使用者。
rehash 大巫師 更新指令搜尋快取。
reset_okip 大巫師 設定指定使用者的登入 IP 地址檢查。
restore 大巫師 取回指定使用者的人物備份檔。
resurrect 大巫師 將指定使用者從死亡狀態復活。
slay 大巫師 直接殺死指定的使用者或生物。
wizlock 大巫師 設定/取消非巫師的使用者登入限制。
analyze 巫師 顯示並分析指定使用者或生物的狀態與能力。
call 巫師 呼叫指定物件的指定函式。
cat 巫師 列出指定檔案的內容。
cost 巫師 計算執行某一指令所需要的微指令 (instruction) 數。
daemon 巫師 制度精靈的查詢/管理工具。
exile 巫師 立即驅逐指定的玩家,並且禁止上線一段時間。
ff 巫師 查詢某一函數在物件中,函數定義所在的檔名。
ilist 巫師 顯示指定物件的繼承樹。
info 巫師 顯示指定物件的內部狀態。
invis 巫師 開啟/關閉巫師隱形狀態。
localcmds 巫師 顯示巫師目前由身上物件與所在房間提供的所有指令。
qload 巫師 顯示系統目前的負荷。
quiet 巫師 設定/取消指定使用者在公共頻道上的發言限制。
snoop 巫師 監聽指定使用者所收到的訊息。
summon 巫師 立即將指定使用者移動到巫師所在的地點。
tail 巫師 顯示指定檔案的最後幾行。
userid 巫師 用身分識別精靈查詢使用者身份。
cp 實習巫師 拷貝指定的檔案。
edit 實習巫師 編輯指定的檔案。
home 實習巫師 立即移動到自己的工作室或巫師公會。
mkdir 實習巫師 建立一個子目錄。
mv 實習巫師 移動 (更名) 指定的檔案或子目錄。
rm 實習巫師 刪除指定的檔案。
rmdir 實習巫師 刪除指定的子目錄。
cd 見習巫師 改變工作目錄。
clone 見習巫師 複製指定的物件。
dest 見習巫師 摧毀指定的物件。
edemote 見習巫師 編輯情緒指令。
goto 見習巫師 立即移動到指定的房間或指定的使用者身邊。
home 見習巫師 立即移動到自己的工作室或巫師公會。
items 見習巫師 顯示身上或房間中物品的真實名稱。
ls 見習巫師 顯示工作目錄或指定目錄的內容。
mem 見習巫師 顯示系統或指定物件所佔用的記憶體量。
more 見習巫師 以分頁方式顯示指定檔案的內容。
pwd 見習巫師 顯示自己的工作目錄與工作檔案。
status 見習巫師 顯示系統使用記憶體的統計資料。
update 見習巫師 重新載入指定的物件,或更新使用者物件。
where 見習巫師 尋找指定的物件,或列出所有使用者的位置。
which 見習巫師 顯示提供某一指令的物件檔名。
whoami 見習巫師 顯示自己目前的權限。
abandon 玩家 放棄學習指定的技能。
alias 玩家 設定/查詢指令替代功能。
backup 玩家 備份人物存檔。
balance 玩家 查詢銀行帳戶餘額。
ccmd 玩家 幫派指令。
chfn 玩家 修改自己的電子郵件、簽名等個人資料。
cls 玩家 清除螢幕。
describe 玩家 設定自己的人物描述。
disable 玩家 將指定的技能設定為不使用。
enable 玩家 將指定的技能設定為使用。
estimate 玩家 評估指定對手的戰鬥能力。
finger 玩家 查詢離線使用者。
gain 玩家 查詢技能進步的狀況。
help 玩家 查詢說明文件。
hp 玩家 顯示人物生命點數。
identify 玩家 鑑定物品。
ignore 玩家 用來關閉所有來自指定使用者的 tell 訊息。
inventory 玩家 顯示人物身上攜帶的物品。
keep 玩家 將指定物品作上記號,以免不小心丟掉或賣掉。
localtime 玩家 顯示伺服器所在地的時間。
nick 玩家 設定自己的綽號。
okip 玩家 設定允許登入 IP 地址的檢查。
option 玩家 設定一些關於顯示訊息的開關。
order 玩家 命令自己的寵物、嘍囉做某些事情。
passwd 玩家 修改自己的密碼。
praise 玩家 讚揚其他的使用者。
quit 玩家 結束連線離開遊戲。
save 玩家 將人物資料存檔。
score 玩家 顯示人物屬性、經驗值等資訊。
semote 玩家 顯示情緒指令列表。
skills 玩家 顯示人物的技能。
suicide 玩家 自殺、刪除人物帳號。
time 玩家 顯示遊戲世界目前的時間。
to 玩家 輸入含有換列字元的命令。
tune 玩家 關閉指定的頻道。
undescribe 玩家 刪除人物的描述。
uptime 玩家 顯示伺服器執行的時間。
version 玩家 顯示 MUD 所使用的伺服器名稱與版本。
visitor 玩家 顯示 MUD 的使用者人次統計。
who 玩家 顯示所有使用者的列表。
wimpy 玩家 設定自動逃跑的參數。
wizlist 玩家 查詢巫師團隊的人員名冊。
acquire 一般 向其他人物學習技能。
apprentice 一般 向其他人物拜師學藝。
ask 一般 向其他人物詢問問題。
backstab 一般 對其他人物發動偷襲。
berserk 一般 對其他人物發動狂暴攻擊。
buy 一般 向其他人物購買物品。
cast 一般 施展法術。
charge 一般 指定戰鬥中優先攻擊目標。
close 一般 關閉門窗等。
conjure 一般 施展法術。
drink 一般 喝飲料。
drop 一般 丟棄物品。
eat 一般 吃食物。
emote 一般 作動作。
enter 一般 進入特定場所。
exert 一般 使用內功。
fight 一般 向其他人物提出比試的要求。
fill 一般 將容器注入液體。
follow 一般 設定人物自動跟隨其他人物一起行動。
get 一般 從地上或其他容器中撿起物品。
give 一般 將身上的物品給予指定的人物。
go 一般 往指定的方向移動。
guard 一般 設定人物保護的對象。
halt 一般 終止戰鬥或正在進行的活動。
kill 一般 開始以殺死對方為目的的戰鬥。
lock 一般 使用鑰匙將門鎖上。
look 一般 檢視物品或週遭的環境。
open 一般 開啟門窗。
perform 一般 使用招式。
put 一般 將物品放進容器。
remove 一般 卸下裝備。
reply 一般 回答來自其他玩家的 tell。
say 一般 說話,讓位於同一房間中的人物聽到。
search 一般 在所在的環境搜尋特定的物品。
shout 一般 大吼大叫,讓所有其他玩家聽到。
sneak 一般 嘗試以不引人注意的方式,向指定的方向移動。
steal 一般 嘗試向指定的對象偷竊。
study 一般 從特定物品上學習技能。
team 一般 和其他人物組織隊伍。
tell 一般 傳送訊息給指定的使用者。
unlock 一般 用鑰匙開門。
unwield 一般 卸下武器。
wear 一般 穿上裝備。
whisper 一般 和指定對象耳語。
wield 一般 使用武器。