[MUD]MUDLIB詳解/MUDOS運行流程/最小MUDLIB/mud檔案結構

來源:互聯網
上載者:User

標籤:

 

現在大部分中文MUD都是在東方故事(esII)基礎上發展起來的,其目錄結構基本一樣, 
也有個別MUD為了標新立異對個別目錄換了個名字以示不同,但其實質沒有什麼變化。 
這個做的最可惡的是xkx,把一個好好的daemon目錄換成了一個不土不洋的kungfu, 
裡邊卻還是skill,condition這些洋名,簡直讓人faint!我實在看不出這種修改有什麼好處, 
除了添麻煩(xkx對一些命令的漢化,什麼cha,du...也是如此)。不過, 
也有一些是為了系統更合理而修改的。 
對MUDLIB目錄的解釋已經有許多版本了,基本也沒什麼區別,下邊是我的解釋, 
以我自己整理的一份MUDLIB為基礎,如果有目錄不同的地方適當貫通就是了。 

/adm 這裡是最基本,最底層的程式,是整個MUD的控制樞紐。 
這個目錄只有admin許可權可以修改。 
/adm/daemons 精靈目錄。精靈是指遊戲中頻繁調用的控制類程式, 
MUD裡各種準系統都是由這些程式控制的。這些程式一般在遊戲一啟動就自動載入記憶體。 
按照unix下檔案命名習慣,這裡的程式多以d.c結尾, 
比如combatd.c就是控制戰鬥的程式。另外由於這些程式調用非常頻繁, 
一般都做了宏定義(查看/include/globals.h),例如/adm/daemons/combatd.c 
定義為COMBAT_D,在其它程式裡可以適用這些宏定義代替這些檔案名稱。 
/adm/etc 系統配置目錄,此目錄定義為CONFIG_DIR 這裡放的是遊戲的系統文檔檔案, 
比如遊戲的歡迎畫面,巫師列表,BAN掉的IP記錄等。 
/adm/obj 這裡只有兩個檔案,但卻是整個MUD最重要的東西。 
master.c:這是MudOS主控物件,也就是整個MUD的總司令。 
simul_efun.c:防真函數載入精靈,這是MUD啟動時第一個要載入的東西。 
所謂efun,是指系統函數,也就是mudos中定義的函數。 
這些函數不必做任何說明可以在MUD的任何程式裡直接調用, 
而且由於他們是預先定義的,也就是mudos早已經知道他們是做什麼的, 
所以比其它在MUDLIB裡定義的函數執行效率要高。但他們的缺點是修改非常不方便, 
對任何一個efun函數的修改必須重新編譯mudos才會生效。因此, 
在MUDLIB中又有了防真函數的定義,也就是simul_efun, 
這些函數的作用跟efun完全一樣,不同的是他們定義在UDLIB中,可以隨時修改, 
但必須重新啟動遊戲才會生效。 
順便講一下一個MUD啟動的過程,MUD啟動的初始化過程分以下幾步: 
1.載入防真函數simul_efun 
2.載入主控物件master,這裡是調用master的create()函數將其載入記憶體。 
3.載入需要預先載入的精靈,這裡調用master的preload()函數, 
需要預先載入的檔案定義在/adm/etc/preload裡。 
4.MUD進入多使用者狀態,允許玩家登入。 
以上過程必須正確無誤的執行完,否則遊戲無法正確啟動。 
master.c和simul_efun.c這兩個檔案只能在遊戲啟動時由mudos自動載入, 
不可以在遊戲中用update的方法載入,而且這兩個物件也不 
允許非ROOT許可權的物件摧毀(destruct)它,因為他們的摧毀就等於遊戲關閉 。 
/adm/simul_efun 防真函數目錄,這裡放的是定義各類防真函數的檔案, 
這些檔案由SIMUL_EFUN_OB(也就是/adm/obj/simul_efun)來載入記憶體。 

/cmds 遊戲命令目錄,這裡放的是遊戲中可以使用的各種命令, 
只有admin才可以修改這個目錄 
/cmds/adm 只有天神(admin)可以使用的命令 
/cmds/arch 只有大巫師(arch)以上才可以使用的命令 
/cmds/wiz 只有巫師(wizard)以上才可以使用的命令 
/cmds/app 只有巫師學徒(wizard)以上才可以使用的命令 
/cmds/imm 只有榮譽玩家(immortal)以上才可以使用的命令 
/cmds/usr 只有普通玩家(player)以上才可以使用的命令 
/cmds/std 所有生物(npc and player)都可以使用的命令命令目錄採用子集格式, 
許可權高的命令完全包含許可權低的命令,比如天神可以使用所有遊戲命令, 
普通玩家只能使用/cmds/usr和/cmds/std目錄下的命令。 

/data 遊戲資料目錄,只有arch以上許可權才可以修改這個目錄 
/data/board 各個留言板的資料 
/data/login 玩家登入資料 
/data/user 玩家檔案,呵呵,這裡記錄的是每個玩家的所有勞動成果 
/data/npc 一些特殊npc的資料,比如商店老闆 
/data/daemon 重要的系統資料,比如emote詞,英漢翻譯詞典 
/data/mail 玩家信件 

/feature 標準繼承函數。只有admin才可以對這個目錄進行修改這些函數是非常重要的, 
是MUD裡各種物件,包括玩家,NPC,物品,房間等的各種功能的標準定義, 
這些函數反映了整個MUD的與眾不同之處,一個好的MUDLIB必然要對這些函數進行最佳化。 
而要設計新的程式,必須對這個目錄所有檔案有所瞭解。 

/obj 系統物件,這是經常在MUD裡被調用的各種物件。 
這個目錄下的物件被複製後跟調用他的物件具有相同的euid, 
也就是說具有相同的許可權,所以,這裡的一個npc如果經admin編譯後複製出來, 
也具有了admin許可權。這點非常重要,有些物件必須具有跟玩家相同的euid才能正常使用 
,比如符紙。而出於安全考慮,這個目錄下的物件不可以隨便複製。 
只有arch以上才可以修改此目錄。 
/obj/board 遊戲中各個留言板 
/obj/npc 一些特殊的NPC 
/obj/sheet 各種符紙 
/obj/weapons 兵器 
/obj/misc 其它亂七八糟的東西,比如信箱等 

/quest 遊戲裡各種任務quest的檔案,此目錄需要wizard以上許可權才可以修改 

/binaries 檔案編譯過程產生的二進位檔案,此目錄ROOT許可權才可以修改 

/d 地區目錄,遊戲的地圖門派和NPC存放的地方。此目錄wizard以上許可權可以修改。 
這裡是整個MUDLIB最簡單最常用的東西,也是玩家可以直接接觸到的東西。 
玩家所呆的任何一個房間都應該對應這個目錄下的一個檔案, 
房間裡每個NPC也都對應一個檔案。這個目錄下存在許多子目錄, 
分別對應遊戲的不同地區(domain)。 
/d/domain/npc 該地區中的npc 
/d/domain/npc/obj 該地區中npc身上的物品 
/d/domain/obj 該地區中的物品 

/data_bak 檔案備份目錄,儲存需要備份的重要資料。admin可以修改 

/include 標頭檔目錄,只有admin可以修改。這裡放的是遊戲中各個檔案所需要的標頭檔, 
其中以下幾個特別重要: 
globals.h:全域定義的標頭檔,這是一個特殊的標頭檔, 
他不需要在任何一個檔案裡被調用,但是這裡定義的所有變數可以在任何一個檔案裡直接使用。 
這裡一般用來定義非常重要的或者許多地方需要調用 
的變數。對這個檔案的修改必須重新啟動遊戲才可以生效。command.h: 
這裡定義的是各個許可權等級所能夠使用的命令目錄,所以,除了admin, 
應該絕對禁止任何人修改此檔案。 
/include/race 種族的標頭檔 
/include/net 網路功能的標頭檔 

/open 系統臨時目錄,ftp登陸目錄,任何人都具有寫入權限。 

/questobj FY3的task專門目錄,存放各個task物品檔案。wizard以上許可權可以修改。 

/u 巫師工作目錄,存放各個巫師開發過程的半成品。 
這裡的子目錄名只能為各個巫師的euid, 
而只有對應euid的人才有對相應目錄的修改許可權。比如一個目錄是lion, 
那麼只有lion這個ID或者比lion許可權高的人 
才可以修改它下邊的內容。 

/clone 物品目錄,存放遊戲中需要經常複製的各種物品,wizard以上許可權可以寫。 
這個目錄下的物品一般被其他地方複製(clone)出來,但他們的euid是固定的, 
不會隨調用它的物件的不同而改變,這就是這個目錄和/obj目錄的最大不同。 
此目錄arch以上等級可以修改 
/clone/armor 裝備 
/clone/drug 藥品 
/clone/fruit 水果,水果跟食物的不同是吃了可以同時加食物和飲水, 
而且有些水果具有養顏美容之功效。 
/clone/liquid 容器,象酒袋茶壺一類 
/clone/money 顧名思義,人見人愛的東西 
/clone/user 玩家物件,包括login.c(link_ob)和user.c(body), 
此目錄只有admin可以修改 
/clone/books 各種秘籍 
/clone/food 吃的 
/clone/gift 各種禮物,一般是好東東 
/clone/weapon 兵器 
/clone/misc 其他雜物,比如屍體,頭顱。 

/daemon 呵呵,這個目錄為什麼叫這個名字我一直沒明白,看下邊的說明吧。 
此目錄只有arch以上可以修改。 
/daemon/skill 遊戲中所有的技能 
/daemon/condition 人物各種狀態,比如中毒,恢複等。 
/daemon/class 這個應該理解為“組織”或“工會”,是ESII從外國MUD裡保留下來的東西, 
不過隨著中文MUD的發展,工會的概念逐漸被淡化,其含義已經跟以前完全不同, 
現在他的意思有點象“身份”,比如道士,和尚,喇嘛,官兵,老百姓。。。。 
個人有個人的身份。很多情況下,這個跟門派類似,但又不完全相同。 
這裡存放的是各種不同身份的人所具有的特殊東西, 
不過現在一般用來存放各種特殊技術的特殊用法(perform) 

/doc 文檔。 遊戲中的各種文字檔,arch以上可以修改 
/doc/help 各種協助檔案 
/doc/efuns 各種系統函數的用法 
/doc/story 各種背景故事 

/log 系統日記,記錄遊戲過程各種重要事件,是巫師處理糾紛和剔除bug的主要依據來源。 
一個好的巫師應該養成經常看系統日記的習慣。本目錄只有ROOT許可權可以修改。 

/p 玩家目錄,這個目錄下內容玩傢具有寫的許可權。主要存放需要玩家修改的內容, 
比如玩家房間,自創武功等。 

/std 標準對象目錄,遊戲中各種標準物件, 
只有admin可以修改遊戲裡其他物件都需要繼承這裡的相應檔案。 
/std/armor 裝備物品的標準繼承,比如衣服,盔甲等 
/std/board 留言板 
/std/char 生物的標準繼承,MUD裡的生物包含兩種:玩家(player)和非玩家( 
npc)他們都需要繼承/std/char/char.c這個對象, 
他們與其他物件的區別是具有心跳(heartbeat)。 
/std/drug 藥品的標準繼承,其實這個現在一般不用了,這部分功能都放到了 
/feature的相應檔案裡,保留這個是為了跟舊的系統相容。 
/std/item 物品的標準繼承 
/std/room 房間的標準繼承 
有人曾問房間和物品到底有什麼區別?說實話,這個問題還真不好說, 
這兩個物件基本結構差不多,也沒有什麼可以區分的特徵。 
現在的常用判斷方法是房間是沒有環境(environment)的,但也不是所有物品 
(包括生物)都有環境,所以,呵呵,這個問題還有待MUD程式的進一步完善, 
現在基本上無法判斷。 
/std/skill 技能的標準繼承 
/std/weapon 武器的標準繼承 
/std/misc 其他物件,比如錢,符紙。 
值得注意的是,/std這個目錄跟一般MUDLIB的結構不太一樣, 
一般MUDLIB並沒有如此歸類存放,大家可以根據自己的認識加以判斷。 

以上是根據我的理解對各個目錄的解釋,未必是權威的說法, 
只是為了讓大家有所認識,如果有什麼錯誤請指正。 
作為剛入門的新巫師,準確理解各個目錄的作用是非常重要的, 
必須知道哪個目錄下的東西是做什麼的,哪個目錄你可以去改,哪個目錄你不能動。 
一般來說,要成為一個合格的巫師,至少要花半月時間來“讀”程式, 
瞭解整個MUDLIB的結構,瞭解各個檔案的作用 
(未必要完全看懂,但至少應該知道他是幹什麼的), 
這樣不至於再以後的程式開放過程中不知道什麼功能該如何?,從而走許多彎路。 
當你瞭解了整個MUDLIB後就可以試著自己寫程式了, 
一般你只能在自己的工作目錄裡寫東西。剛開始不妨試著寫一個簡單的房間, 
然後試著寫一個簡單的npc,然後試著把這個npc放到這個房間裡。。。。。。 
這樣逐漸提高,你很快就成為一個合格的巫師了。
參考資料:烈火西遊 http://218.200.132.6:6666/list.asp?id=248

 

--------------------------------------------

mudos運行流程

今天我看了站上的一些文章,加上查看原程式,把mudos啟動後,程式啟動並執行流程搞清楚了。小弟覺得只要有一個好的mudos,就可寫出新的mudlib 框架。我拿使用者串連來解釋程式的運行流程。

在config.xxx檔案中指出了master和global兩個檔案,這是十分重要的檔案。
mudos啟動後會載入上述兩個檔案(其它檔案也有,但上述檔案為主要 )
進入記憶體,mudos中定義了一些特殊的函數,例如create()、init()等等, 
這些函數都是在特定事件中由mudos自動調用的。
當使用者在port口請求串連的時候:
——mudos自動調用master.c中的connect()函數
——然後connect()函數調用 LOGIN_OB這個物件,[而LOGIN_OB是個物件常量,在global.h中定義LOGIN_OB 的值是"/clone/user/login.c",也就是說connect()調用了login.c這個物件]
——在login.c中有一些特殊函數,如果按照使用者正確登陸的流程,mudos自動調用login.c中logon()這個特殊函數。
——在logon()中由調用LOGIN_D這一物件常量,LOGIN_D在global.h檔案中所定義的值是"/adm/daemons/logind",
——於是 mudos又把logind.c調入記憶體並運行。

我們一般認為mudos在編譯前在它的設定檔案中定義了使用者login的程式 路徑及檔案名稱,
編譯後路徑和檔案名稱不可改,在使用者連入的時候,mudos根據 路徑自動啟動使用者登陸程式。
其實非也,mudos只是一個對mud進行低級支援 的程式。

我們可以利用mudos,完全拋棄已有的mudlib架構,進行新的創作。
這樣 才能使中國的mud種類走向多樣化。

-------------------------------------------=

最小Mudib有多大?

這個最小的是說能驅動MUDOS,能成功Connected.
現在以網上下載的單機專用MUDOS和其配製的config.cfg為標準說明:
先找一個單獨的MUDOS運行,需要設定檔,載入config.cfg...運行後提示:open log/debug.log file failed.OK,根椐配置我們建目錄:/log,再運行,現在提示:The simul_efun file adm/obj/simul_efun.c was not loaded.OK,我們建目錄:/adm/obj,並在obj目錄中建一個空檔案simul_efun.c,再運行,現在是:adm/obj/simul_efun.c line 0: Cannot #i nclude globals.h
adm/obj/simul_efun.c line 1: parse error
No error handler for error: *Error in loading object ‘/adm/obj/simul_efun‘
program: (none), object: (none), ..file: (none)
The simul_efun (/adm/obj/simul_efun) and master (/adm/obj/master) objects must be loadable.
看來現要config.h檔案,根椐設定檔,我們建一個目錄:/include,並在此目錄中加一個空檔案globals.h,再運行:The master file /adm/obj/master was not loaded.,現在我們在obj目錄中建一個空檔案master.運行:No function get_root_uid() in master object; possibly the mudlib doesn‘t want PACKAGE_UIDS to be defined.看來空的master.c不行了,我們在master.c中加上如下語句:string get_root_uid() { return "Root"; }
string get_bb_uid() { return "Backbone"; }
string creator_file(string file) { return "Root"; },現在再運行,OK,MUDOS成功跑起來了.

但現在用zMUD連線connected後就lose了,怎麼辦,現在在master.c中加一如下語句:object connect(int port)
{
     object ob;

     ob = new(__DIR__"user.c");
     return ob;
}.同時在master.c相同目錄中建立一個空檔案user.c,現在運行mudos,並連線,成功...

      現在看看一共用了哪些檔案和目錄?
1. /log
2. /adm/obj/simul_efun.c
3. /include/globals.h
4. /adm/obj/master.c
5. /adm/obj/user.c

其中只有master.c中有內容,其它的都是空的,這5個加起來有多大?237位元組,怎麼樣?

[MUD]MUDLIB詳解/MUDOS運行流程/最小MUDLIB/mud檔案結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.