<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    [MUD]Mudlib詳解/Mudos運行流程/最小Mudlib

    mud服務器目錄下的文件夾的作用?

    現在大部分中文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的主要依據來源。
    一個好的巫師應該養成經??聪到y日記的習慣。本目錄只有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字節,怎么樣?

    posted on 2011-09-08 16:08 常言笑 閱讀(4658) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产成人A人亚洲精品无码| 亚洲一区二区三区高清不卡| 国产精品免费高清在线观看| 亚洲欧洲国产综合| 色视频色露露永久免费观看| 国产人成网在线播放VA免费| 亚洲免费一级视频| 亚洲午夜福利717| 午夜亚洲国产精品福利| 亚洲国产精品成人久久| 成年美女黄网站18禁免费| 人妻巨大乳hd免费看| 亚洲综合激情六月婷婷在线观看 | 丁香婷婷亚洲六月综合色| 亚洲高清国产拍精品青青草原| 国产精成人品日日拍夜夜免费 | 国产亚洲欧美日韩亚洲中文色| 亚洲成AV人片在线观看| 国产色婷婷精品免费视频| 91精品国产免费久久国语麻豆| 福利片免费一区二区三区| 99久久精品毛片免费播放| 亚洲午夜在线一区| 狠狠亚洲婷婷综合色香五月排名| 免费黄色网址网站| 国产在线精品观看免费观看| 亚洲综合小说另类图片动图| 国产成人亚洲精品青草天美| 免费国产人做人视频在线观看| 国产高清不卡免费在线| 插鸡网站在线播放免费观看| 亚洲中文字幕无码av| 亚洲美女视频一区| 亚洲人成无码网站| 亚洲国产精品无码久久九九| 成人性生交视频免费观看| 久久午夜羞羞影院免费观看| 国产免费牲交视频免费播放| 羞羞网站免费观看| 亚洲日产乱码一二三区别| 亚洲中文无码av永久|