精華區beta mud 關於我們 聯絡資訊
The following is I ftp from ES's ftp long before (1/21) maybe have some help for us to know what is LPmud ! 有關「東方故事」與 LPmud 之概念性介紹 By Annihilator 11-03-93 何謂 LPmud﹖ ------------ LPmud 是一種「多人角色扮演網路遊戲」﹐也就是各位所熟知的 MUD。 東方故事 是建立在目前國際上最普遍、最廣為使用的 LPmud 系統上( 目前 Dikumud 和 Ambermud 有逐漸三分天下的趨勢 )。 LPmud 最早是由兩個老外﹐一個名字以 L 開頭﹐另一個以 P 開頭﹐所設計的並因而得名。 LPmud 和 Dikumud 樣是一種以戰鬥、冒險、解謎為主題的 mud﹐這一類的 mud 目前是最普遍的。LPmud 的歷史比較早﹐變化也可算是所有 mud 中最多的﹐世 界上找不到任兩個 LPmud 看起來是完全一樣的。 driver 與 mudlib ---------------- LPmud 最主要由兩個部份構成﹐一個稱為 driver、另一個稱為 mudlib。 driver 就是 mud 的可執行檔﹐你必須在作業系統下編譯、連結﹐然後執行。 不過光有 driver 是無法執行 mud 的﹐lpmud 系統的特色是「資料與程式分離」﹐ 你必須有一個 mudlib 讓 driver 去執行﹐mudlib 照字面看是 mud library 的 簡寫﹐主要是由一大堆的 LPC 程式碼組成﹐由於這些程式碼完全是以文字檔的形 式儲存﹐你在 mud 執行當中隨時可以查看其內容﹐又由於這些程式碼不需要經過 編譯、連結﹐所以在 mud 執行當中你隨時可以修改它的內容﹐並且可以在線上隨 時將修改後的程式碼載入記憶體執行。這點和 Dikumud 的 area 資料檔作用方式 不同﹐Dikumud 只在 mud 剛啟動時將所有資料讀進來﹐而 lpmud 的作法是只把 用到的資料讀進來﹐然後隨時視需要而載入不同的程式碼以結省空間。 lpmud 的 driver 通常為了效率與功能﹐寫得十分複雜而且用到的技巧與系統呼 叫均十分艱深( driver 裡面包含一個 LPC 的 compiler、網路 socket 的處理﹐ 以及一堆記憶體管理的程式 )﹐最要命的是幾萬行的 C 語言原始碼中註解不多 又不易了解﹐所有的 mud 通常是敬鬼神而遠之──不敢更動它的程式碼。 所幸 lpmud 的精髓部份是在 mudlib 的部份﹐所有 mud 中有關遊戲的部份﹐包 括制度、屬性、種種和遊戲有關的東西都是由 mudlib 決定的﹐也就是說﹐你不 需要去修改 driver 就可以作出大部份你想像得到的東西。 PS: 目前「東方故事」用的是 MudOS 0.9.18 的 driver﹐這個版本的 driver 可以算 是第四代的 lpmud driver﹐目前國際上常見的 driver 還有 lpmud 3.1.2 和 Amylaar driver。 MudOS 的特色是速度快﹐節省記憶體﹐而且是目前國際上新一 代 lpmud 採用最多的的 driver﹐不但新的 lpmud 「市場佔有率」最高﹐就連許 多舊有的 mud 大站也紛紛將它們的 driver 換成 MudOS﹐其中還包括有不少台灣 玩家的 Kingdoms、Genocide。 「東方故事」的 mudlib 是以 TMI-2 1.1 的「發展用」mudlib 為基礎所建立的﹐ 一個完整的 mudlib 如果從一無所有、白手起家開始建﹐是會累死「神」的﹐因 此國際上一群有經驗的 lpmud 「巫師」們﹐湊在一起開了一個 lpmud 叫作 TMI ( The Mud Institution )﹐這個 mud 的目的不是讓玩家玩﹐而是讓一群來自世 界各地的巫師們聚在一起﹐集合大家的智慧寫 mudlib 用的。對 TMI 有興趣的人 可以 telnet 129.10.11.53 5555 試試﹐如果你不熟 lpmud﹐最好用 guest 進 去﹐因為新造人物一進去就被昇為巫師﹐整個 mud 房間也不多﹐和其它 mud 有 很大的不同。 巫師( wizards ) --------------- 在 LPmud 中﹐一般玩家昇到最高級之後﹐並不是就沒事幹了。大部份的 lpmud 允許玩家成為 wizard﹐中文的意思是「巫師」。巫師並不是玩家﹐這點是所有 的 lpmud 一致強調的一點﹐就像 Dikumud 中的 immortal 一樣﹐巫師具有許 多一般玩家沒有的能力﹐就某方面來說﹐甚至比 Dikumud 中的 God 還強﹐例如 巫師可以無中生有造出一隻怪物或一把劍﹐而 Dikumud 中的 God 除了 load 原來就已經存在的物品或怪物﹐就必須修改 area 檔然後把 mud reboot 才有可 能。 巫師的能力來自於 lpmud 中的線上編輯系統﹐一個巫師可以在其它玩家進行遊戲 的同時﹐修改 mudlib 的內容。也就是說﹐房間、怪物甚至整個 mud 的制度、屬 性都可以在不經由 reboot 的情形下進行修改或擴充。 巫師通常可以利用系統內建的文書編輯器撰寫或修改 LPC 程式碼﹐細節在此不多 作討論。 LPC --- 所謂的 LPC 程式碼事實上就是 C 語言的程式碼﹐就如同平常我們說 Borland C﹐ Turbo C 一樣﹐LPC 名稱的來源想必大家也猜得到( 一個姓 L 另一個姓 P )。 LPC 的語法和 C 「完全一樣」﹐甚至更簡單。不過如果你沒有學過 C﹐最好不要 學 LPC﹐以免被它極端 user friendly 的架構慣壞了胃口。 LPC 是一種「物件導向」的程式語言﹐你並不能用 LPC 寫出一個完整的程式﹐只 能用它來定義物件( object )﹐所謂的物件就是組成 LPmud 世界的基本單位﹐在 mud 中一個房間、怪物、武器、藥水... 都是物件﹐這些物件都是用一個 LPC 寫成的程式碼定義的﹐你在 mudlib 中看到的一大堆 *.c 的檔案就是一個個物件 的定義。 用 LPC 寫成的程式碼並沒有一個叫作 main() 的程式入口﹐這也是你無法用 LPC 寫一個完整程式的原因。這些物件的程式碼中通常會有一些內定的函數名稱﹐當 系統遇到特定狀況﹐如: 有人從地上撿起一個物品﹐driver 或其它 mudlib 中的 物件就會去 call 這個函數﹐只要你在物件中定義了這個函數﹐就會執行到函數 的內容。只有少數幾個函數名稱是由 driver 規定的﹐大部份要視不同的 mudlib 才知道要定義哪些函數。 物件( Objects ) --------------- 在介紹物件之前﹐先簡單地介紹一下 driver 處理 mudlib 中資料的方法﹐當系 統( driver 的執行檔 )一開始執行﹐它會將幾個 mud 中必備的物件從 mudlib 中載入到記憶體中﹐( 並不是直接載入 LPC 程式碼﹐而是先「編譯」成一種類似 組合語言的中間碼﹐這是 driver 內部運作的細節﹐知道有這麼回事就好﹐不必 深究 )然後就開始等待玩家或巫師上線。在第一個人連線進來之前﹐mud 中所有 的房間、怪物等物件都不會被載入或編譯。 當玩家連線之後﹐那些跟玩家有關的物件才會一個一個的被 driver 載入。物件 被載入之後﹐若是有一段時間不曾被任何玩家使用到﹐如一個房間很久沒有人經 過﹐driver 就會將它清除掉以節省記憶體。 前面曾提到過﹐一個物件的載入必須經過 driver 的「編譯」﹐也就是將 LPC 的 程式碼轉換成它內部的儲存形式﹐在編譯過程中﹐若是發生了錯誤﹐如少寫一個 分號等﹐mud 並不會 crash 掉﹐而會告訴你錯誤訊息( 甚至錯在第幾行 )。