《新巫師入門手冊》
第一章:觀念篇
■ 內容提要:什么是巫師?怎樣做一個巫師?如何做好一個巫師?
第二章:上手篇
■ 內容提要:最簡單的房間怎么寫?NPC又怎么寫?先看懂一些常用的參數?
第三章:理解篇
■ 內容提要:什么是LPC?什么是函數、對象?只有理解才有利於消化
第四章:見習篇
■ 內容提要:我要工作了,怎么edit?怎么update?又怎么用call?
第五章:補遺篇
■ 內容提要:好好消化變量、函數的意義,完全掌握各種符號的運用。
巫師園地 入門手冊 觀念篇
第 一 章
觀 念 篇
認 識 自 己
--什么是巫師?
巫師是創造者,程序設計師,負責創造玩家眼里的游戲世界。你可以創造任何東西, 這也使得巫師這個位置顯得很重要且需擔負很大的責任。當一個巫師代表你可以在瞬間取一個玩家的性命,對游戲系統造成很大的損害,或是建立一個人間天堂。任何你想得到的都可以做到。
在目前的大陸,專職的巫師是很少見的。這恐怕主要是因為MUD這個游戲還沒有一套成熟的商業運營機制來使它產生經濟效益,並以此養活那位專職的巫師吧!大多數巫師都是走的“玩而優則巫”的道路。很難想像:一個從未玩過MUD的人會有多高的熱情和動力去承擔如此艱巨、而且是無報酬的工作。但並非說玩得好的玩家就一定要去做巫師,有人就是天生的玩家。流行的對於巫師有專職與兼職之說,這是指在一個MUD與兩個或多個MUD擔任巫師之分。我們的觀點是堅決反對兼職巫師的,以下摘錄的一段文字很能代表我們的看法:
--------------------------------------------------------------------
: 對於目前大部分的wiz兼職實在對於大陸泥巴這個freeware 是最大侮辱了
: 我對於巫師的看法就是該誠懇的,勤奮的,付出在自己最熱愛的一個mud
: 而不該去其他的mud尋找所謂的新的創意,或是一個等待開發處女,如果
: 大家的目的是需要提高中國泥巴的整體水平的話,大概你一個單兵作用不
: 大吧,那可需要的是一個整體的力量。
: 兼職的巫師本身就是一種浮華的類wiz ,他們有點技術,熱忠於這個那個的
: mud串門做個嘴片子,本身精力也許很多,有任務也許完成,下網了就也許
: 滿足於自己名片頗多。
: 如果要獲得新的想法,需要在其他mud當巫師才能獲得嗎?那不是成了看別
: 人的工作成果,“啟發“自己的新想法?這...
: 如果覺得另外一個mud比現在所在的mud 更能體現自己的想法思路或風格,
: 那: 堅決的全身心的投入到那個更理想的mud里哪,如果覺得現在呆的mud
: 沒發展了。那呆着也是惹那一身煩嘛!居然有人在自己不喜歡的mud里當
: wiz ,這...
: mud 本身就是體現一個創作群體的思想,現在大家對於mud的觀念特奇怪,
: 做wiz 的等待admin發任務,admin 抱死自己的權利,不去發現wiz們的長
: 處而只知道門派、地圖、daemon的下任務,有技術的wiz抱怨工作簡單、無
: 聊,需要提高的wiz抱怨石頭太硬。這就導致了巫師這個群體成個很官僚的
: 狀況,如果大家真心的做個mud,又何至如此呢。
: 還有就是兼職也導致侵犯某些codes的作者的權利,甚至有人拿着這邊的程
: 序到那邊去申請職務,這...
: 如果大家真心要把自己做的門派,或是得意的程序奉獻給大家,那建議把
: 那些程序放到自己的主頁上呀,好壞自有公論嘛,而且大家在你的主頁上
: 經過討論,或者對你是個更大的提高呢,這樣大家知道是你的程序,覺得
: 保證你的權利。freeware,sigh,到了中國這個福地,什么都變味了,人們
: 換着法子的保護自己署名的權利,更大一群人拿着去掉開發者的署名的程
: 序做開發. 這... 是freeware 的精神嗎?限制巫師兼職根本就不是一種可
: 以用來限制的條件,只是一相情願的願望而已。(有刪改)
※ 來源:·BBS 水木清華站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.54.141]
---------------------------------------------------------------------
--巫師的觀念:
巫師是什么?巫師並不是神,神只是提供我們服務器、提供我們站點的人物,在我們這里,他們被定義為(gods),真正的巫師都是同玩家一樣通過遠程登錄上去的用戶——只是一個擁有較多權限的超級用戶而已。因此本質上也是一種高級的玩家,但他所遵循的原則卻要絕對地高於玩家。
****
爭吵
****
巫師:永遠不要與玩家爭吵。如果你覺得自己錯了,請於第一時間去改正它,第二時間再向玩家說明。要是覺得丟面子的話,就保持緘默吧。如果你覺得自己沒錯,就不要理會,對方再糾纏下去干脆 kickout....有些事情是越爭越越亂、越爭越糟糕。還有一點:你如果上線時手頭有事情要處理或者沒有二十分鍾以上的閑功夫,奉勸你不要現身,隱身處理事情算了。
玩家:永遠不要與巫師爭吵。如果你覺得自己對的,盡可能地去post或mail,如果覺得自己未被重視受到了傷害又不大可能得到補償,你可以拒玩這個站點。如果你發現是你自己錯了......你完了.........
****
要求:
****
巫師:永遠不要對玩家提出要求。如果你覺得確需限制,就直接設計出程序,只要他們在規則的允許之內,任由他們發展。一個好的巫師是完全通過他的程序來實現對世界的調控,而不是言語。話多的巫師工作將會很累很累。
玩家:請不要對巫師提出出格的要求。這是一種很不健康的思想,理論上,玩家與巫師應該是有某種正式的溝通管道,而盡量減少私底下的交易。也就說,巫師應該只是制訂規則、寫區域、管理維護MUD,而盡量減少介入玩家的生活或成長過程。玩家也應該要盡量不要要求不在巫師工作范圍內的事情,最常見的就是向巫師索取仙果、詢問打開暗門的口令、某個秘密人物的所在。這種要求直接導致你在巫師心目中的評價直線下降。如果牽涉到要求改武功、提經驗的地步的話,可能會帶來進行坐黑牢的懲罰。而在此,我們還得指出一點,對於巫師來說“勿以惡小而為之”,最好的辦法就是做一個鐵石心腸的家伙,拒絕一切超越工作范圍的事,否則,你還是去做一個“新手指南”的玩家好了。
****
脾氣:
****
巫師理論上不應該有任何的脾氣,這也許有點不盡人情,但是我們對每一個巫師都這樣建議,上線前深呼吸幾次。一上線先hihi,遇到事情先hehe,實在脾氣上來壓也壓不住時,你干脆就quit再拍桌子跺腳大叫幾聲:“老子再也不做巫師了!”然后心平氣和地再 login進去,巫師當然還得做、程序也還得寫、丑話還得聽。人們不是常說:“我們都有情緒因為我們不是神仙”,哈哈!現在你一在線,你就已經是神仙了。所以........
****
動力:
****
一個純義務的、沒有報酬的工作,初期的那份新鮮勁會隨着沒完沒了的程序、函數而消磨怠盡。因此你得不時地給自己尋找動力。善始善終,巫師應該是程序員屆最能考驗人的工作之一。
****
水平
****
怎么你也得了解一下 MUDOS吧?實在不行,大致有個概念也成。對於 LPC你總弄懂吧?你所工作的MUDLIB不看完也說不過去吧?也許你目前還不行,但你若真的想當一名好巫師,你就得朝這個目標去做。
——巫師權限簡介:
大總管(gods):這個級別的比較特殊,一般是由你服務器所在單位的工作人員或管理人員擔當。嚴格意義上,只有他們是神。神可以什么事都不做,卻可以決定任何事情。不要去向神要求什么?你所要做的事除了溝通就只有祈禱。當然,對於神來說,除了到處goto和參預巫師頻道的討論外,他們也不必要過多的檔案處理權。因為服務器就在他們的身邊,任何制約對於他們來說都是可笑的,“神打了個呵欠,地上就刮了三個月的風暴”.........
天神(admin) :游戲的實際管理人,在游戲中所有事情的最后決定者。事實上他們只是神的使者的意義。天神唯一的限制就是不能(確切說應該是不准)修改 /LOG 下的文件,那里只有真正的神(大總管)才能通過服務器的操作進行刪除。
大巫師(arch):天神的助手,一般都是由熟悉系統架構的人來擔任的。大巫師也是執行多數區域的 QC 的人選。只有一些涉及系統更動的問題,才必須通過天神進行更新操作,大巫師與天神沒有職責上的區別,只有處理權限的不同。
巫師(wizard):寫區域的人, 請乖乖的遵守所有的巫師規則.
巫師學徒(apprentice):練習生。在這個階段,你的工作是先熟悉環境和相關規定。調適一下你的心態,並確實的知道當巫師所負有的責任.
--一些見議:
當巫師好像是在當創造者,任何你想得到的東西都可以通過程序做到。因為這樣,請你動手前務必多想想,先把后果想清楚了再做。如果不幸出了些差錯,也請完完全全地負起責任並承擔后果。永遠記住,你的一舉一動,不論大小,對這個游戲都將造成一些影響,請盡量讓這些成為正面的影響。
善待你的同事並尊重你的上級,巫師級別的划分並不一定是完全反應着能力的高低。而實際上略通編程技巧的人也都知道,一個wizard可以很輕易地把自己改為 admin,而事實上你也別去動這個腦筋。巫師守則的遵守只是靠相互信任與自覺。原理上,用程序我們是可以完成任何事情。系統中的各種防御及記錄體系也都是防君子不防小人的,但是我們不希望在程序中看到巫師物品,即使必須要有,一定要加上對使用的人的權限判斷,我認為有寫巫師物品的時間還不如多設計幾個謎題算了。
認 識 工 作
--在開始制作之前
讓我們大略看一下在LP MUD,即所謂戰斗 MUD中, 世界的構成方式。這個世界是由一個個的對象(object)所組成, 每個對象有一個對應的程序來描述它的特性。在游戲中所見到的每個房間,每個 npc,每個物品,甚至你自己,都是一個object,都是一段程序。
我們首先寫出一段程序來創造出一個全新的對象,然后利用update來更新對象所屬的程序, 再用 clone來實際造出一個可用的對象。在這里所謂更新,就是將硬盤里這個文件編譯后形成一段代碼,這段代碼是存在於內存中的。在MUD中,程序只有進了內存方可執行。因此當你修改了或新寫了一個文件,那只表明你在硬盤上改動或創造了這個文件,你必須做一下update,將它編譯放入內存,你的修改和創造才正式生效。而clone命令其實就是update+move,因為它update的是一個物品或npc,這個物品或npc還需要有地方放。(看起來吃力嗎?沒關系,當你對 updata和clone的操作十分熟悉后,再想想這段話,你就會chat* oh)在系統里, 我們可以制作各式各樣的對象, 但是都可以將之划分在三大類里面: 房間、物品與生物。在制作區域時, 我們習慣將區域放置在根目錄下的/d 目錄。房間的檔案就直接擺在區域的目錄下,生物與物品則擺在這個區域中名為 npc及obj的子目錄中。
--制作的基本品質要求
所有的 MUD都有自己的風格、發展方向、跟程序品質的要求。由於這些東東與程序是否能通常執行關系不大。有時僅僅只是一些個人習慣而已。作為MUD這么一個集體創作的作品,這種習慣就有必要有一個集體性的統一,這種統一大約是隨著主持這個 MUD的admin而異。事實上又由於每個admin對mudlib的了解程度不一,所以對品質要求的深度也不同。以下是我們“無錫 MUD巫師組”對各位新加盟的巫師的品質要求:
****
命名
****
命名的一個基本原則就是簡單直觀。一般我們要求使用中文的拼音,如果其英文名很熟知並確實比拼音短小直觀的情況下,也可使用英文,當然也包括那些已經約定俗成的如:room、eat、food、cloth等。在使用拼音時,要遵循下列要求:
1,請盡量保證發音准確,沒把握請查字典;
2,兩字詞直接連寫,例:大門 damen.c,超過兩字請使用隔斷符號進行間隔,以免出現難以辨讀的情況。
3,隔斷符號分“_”和“-”兩種,它們兩者的區別在於前者兩邊的關系是修飾的、而“-”兩邊之間的關系是並列的。東客房可以寫成dong-kefang或者是kefang_dong,兩者之間的區別相信不需要我再多說了吧。
4,四字詞應在兩字中間用“-”隔開,象wuxidayu應該寫成wuxi-dayu。三字詞請選擇好隔斷的部位。象老管家lao-guanjia就不能寫成laoguan-jia,這些看起來似乎有些羅嗦,但的確是必須養成的一種良好習慣。
此外,命名最好形成統一的規范,不管在哪里當巫師,一定要先仔細看一看那里的大部分文件的命名格式,盡可能地與前面的文件相融合。
****
目錄
****
目錄原則上沒有什么過多的限制,有一些傳統,你可以通過閱讀整個系統的文件來看明白。一般的區域放在/d目錄下,每一區域中下面再包含npc與obj兩級子目錄,用於放置這一區域里的人物與物品,一般不要再增添其它的有關子目錄,而可以教授武功的人物請放在/kungfu/class/下的同名稱的目錄下,我們所要提醒的一點是,在新的區域目錄的設置上要相對合理,里面文件過少,就請合並至相近的一個目錄中,如果太多,也要盡量拆成兩個目錄。以免給日后對該目錄的操作造成不便。
****
程序
****
程序語言相當簡單,但是良好的習慣必須在一開始養成。
1,程序必須縮排整齊,縮排一律用 tab (相當於 4 的空格),雖然縮不縮排無關程式是否能夠執行,但是如果你是一個只求程式執行正確,而不管別人是否容易閱讀,在 Mud這樣一個由多人共同發展程序的環境中將會十分惹人反感。
例:請采用類似
if(...)
{
if(...)
{
...
}
else
{
...
}
}
else if(...)
{
...
}
else
{
...
}
的風格,不要采用
if(...){
...
}
這樣的風格。有人也許會說,我看很多正規的程序員就不這樣子嘛!但是你別忘了,LPC是一種特殊的編程語言,它還有有它特殊的工作環境。一是,它的程序有可能會經過很多的人閱讀與修改,二是它經常要在zmud這樣的客戶端軟件下進行遠程的在線逐行修改,到了那時你就會對這樣的規范體會頗深了。
2,開頭的注釋行並不是可有可無的,最起碼得讓你的同事對這個程序有疑問時知道找誰?並建議是加上編寫和修改的時間。
// 該文件完整的絕對路徑 中文名稱
// 作者完成或者是最修改日期
// 如有對該文件的重要說明,請寫在這一行
3,對於房間的描述應該整齊划一,至少在同一區域下的場景描述都需保持一致。每行控制在57至61個字節之間,建議人物20個字,房間30個字一行。對於人物的描述,出現的信息提示也遵守這種規則。
4,檔案路徑名稱最好和絕對路徑無關,這樣當你的程序在整個目錄被移到另一路徑下后仍然能夠正常運行,為此你可以用 __DIR__ 這個由MudOS提供的巨集定義表示這個檔案目前所在的目錄(__FILE__表示目前這個檔案的檔名),即使移動之后必須做修正,最好也限於某個 .h 檔案。
5,檔案中盡量不要直接調用其它目錄下的 NPC 或 OBJ ,為擴展性着想,至少房間一定要調用自己目錄下的。當然 /CLONE 目錄下的除外,如確需要,請直接在自己的目錄下復制一份。如果確實發現各個目錄對該文件的調用率很大,不妨申請大神直接在 /CLONE 目錄下設置。
6,語言風格也許與寫作的各個人有關,但是我們這里的金庸風格是十分明顯的,什么該有,什么不該有,最笨的方法就是翻翻原著。我們不希望在你創造的區域發現一塊德芙巧克力或者是沖鋒槍。同時我們也希望區域的設計需要有相當的「原創性」,現在俠客行上衍生出的版本非常之多,我們不希望我們巫師只是在這其間東抄一點、西竊一點。能用自己想出來的東西,最好回避跟一些太出名的作品雷同的東西。在制作時,有關的地理、歷史以及相關小說應該是一個好的巫師的必備參考書籍。
7,所有的訊息必須正確而且適當,所謂「正確」是指基干一般常識必須無誤,例如:某人拉開一張桌子,自己看到的是“你拉開了一張桌子”,旁觀的人也能看到訊息,但卻應該是“某人拉一了一張桌”,各有不同。而如果是某人看到桌子心中不由一驚的訊息,旁觀的人就不一定能看到了。所謂「適當」是指訊息出現的地方、訊息的長短、標點符號、顏色、出現時間必須盡量合乎真實世界的情形,例如人物add_action的訊息應該要能適當地表達出動作者的立場,不能有看起來怪怪的感覺。寫作的時候,應該多想想:現實中應該是怎么樣的?
8,景物或物品的設置必須合理,如一株可以爬的樹你可以把它寫成房間的景物,也可以用一個物品來表示樹的存在(可以砍下來帶走),但是一個可以鑽進去的地洞就不應該寫成一個物品,雖然在程序上是可行的,但卻是絕不合式的。
9,人物的強度,也就是它的武功與經驗必須合理,我們的MUD雖然采開放式的屬性系統,但是另一個重點是:NPC和玩家是同一個世界的人,NPC 的作用不能作為它具有變態能力的理由,換句話說NPC的「強」必須有故事背景設定上的理由,比如根據天龍八部小說你可以把少林寺中的一個燒火頭陀設成罕世高手,但這必須要控制在嚴格的情況下需要在游戲中給予足夠的提示。任何應用上的牽強理由而設計的強力NPC會受到最嚴格的檢驗。( 請先參照各門派掌門的強度,作為假設的玩家強度水准上限,NPC沒有特殊理由不應該強過這些人,而且這種強度的NPC應該是十分「少見」的。)一旦由於某種原因你要將某一個存在的NPC調高,你必須要給玩家足夠的提示與聲明。
10、武器裝備的強度必須合理,和NPC相同,強力的裝備也就是寶物應該是十分罕見的,如果沒有適當的故事背景設定,強力的裝備會受到最嚴格的檢驗,而且這些裝備必須是極其罕見的,也要受到一定條件的限制。這里一個例子就是各種雜類的MUDLIB總會在一些好奇的巫師手中出現一些增加1000級的伏魔刀之類的東西,這些東西一旦出現,事實上將會對你(或者是原作者)精心構築的整個MUD的武功系統的否定。
11、區域的大小與其中所含的「機關」必須成正比。在這里我們給出一個數字,如果你的區域每過10個房間,都全是一堆用房間編輯器做出來的改改敘述、名稱和數字的房間、NPC 、裝備或物品,那對於這種陽春區域,我勸你還是自己收回去欣賞、不要作任何通過你上級 QC (也就是對佻的程序進行品質鑒定)的可能性幻想。
此外,還有一些編程原則是必須遵守的:
一、自己定義的函數,在文件開始最好有一個函數原型的定義聲明(聲明的作法就是在文件的開關幾句將這個文件里所用到了自己定義的函數頭寫上,注意:末尾要加分號),每個函數前有一個簡單的說明也是基本的要求(也就是前面加//的注釋行,告訴別人,這個函數是干什么的,是在什么地方調用,如果別人要修改要注意什么)。而一些復雜的地方也最好加上注釋。因為在線解決問題時是經常要查看源程序的。
二、若要完成復雜的功能需要對/d、/kungfu以外的目錄增加或修改文件,需要先征得大巫師的檢查和同意。而在這之前,可以提請巫師組討論,看看有沒有更好的實現辦法。
三、做復雜的物件時,盡可能將一些日后可以通用的功能做成inherit或include,以方便以后的編寫。
四、為兼容性、穩定性考慮,除非迫不得已,不要直接調用你很少看見過的EFUN(就是一些由MUDOS定義的外部函數,你在整個MUDLIB是找不到它們的說明。)。
怎么開始工作,有人說先做起來再說,有人說先看起來再說,我們的意見是,從簡單的房間和人物在編寫開始,最簡單的起步就是找一些相近的自己也能看得懂的程序來改,這樣產生錯誤的可能最小。待涉及到機關與秘密的制作后,再開始全面地讀看MUDLIB的程序,實在看不懂,先跳過去,一直看完,結合我們的中級工作手冊(編纂中),我想接下去的自學歷程應該是十分順利的了吧?
為了使這本手冊最大限度地通俗易懂,我盡量做到決不過早地向大家提及一大堆專業術語,以免嚇跑我們的新巫師朋友,但是......這里,我先提一個,就一個......好不好?我們來理解一個概念--繼承(inherit)。在程序中,繼承的意義就在於把很多東東中間的共性提出來,設置成一些標准物。然后,別的程序就沒有必要再一個個地重復設置,直接繼承它就有了這些特性。繼承共分兩種:一是標准物件,就是具體的東東,比如說:npc(人物)、item(物品)、room(房間);第二種就是標准特征,比如說:F_MASTER(可收徒的)、F_EQUIP(可裝備的)。多用繼承可以大大減輕系統的記憶量,也對我們的工作帶來很大的便利。好,下面我們開始寫程序了。
我們新巫師不會一上手就去開發新的系統程序,先起手寫的大都是一些簡單的房間、物品、人物,這類程序首先必需要繼承一個標准物件,如:房間要 inherit ROOM; 物品要 inherit ITEM; 人物要 inherit NPC; 道理前面已經講清楚了。
接下來可能要碰到一大堆令人頭疼的函數了,不過沒關系,我們先不要去理會它們,做一些簡單的房間呀、人物之類的只要用到一個最基本的函數:create()。create()的作用就是在你寫的這個程序,不管是房間還是東西,當它被制造出來,它就會立刻啟用這一函數,對自己進行一些最基本的設定。函數里的語句格式也很簡單,就是:
set("屬性",某個值);
到底有哪些屬性可以set呢?你可以去找一些程序多看看,也可以問問較資深的巫師。下面為新巫師們列出了一些基本屬性:()里的表示這個屬性的類性。string表示是字符串,int表示是數字型。
房間屬性
"short"(string) 房間的短敘述。
"long" (string) 房間的長敘述。
"item_desc"(string或函數) 房間中個別景物的敘述,格式為:([ <景物名稱>:<景物敘述>, .... ])。其中<景物敘述>可以是字串或 function type。
"exits" (mapping) 房間的出口,包括有門的方向,格式為:([ <出口>:<房間檔名>, .... ])。
"objects" (mapping) 房間中的物品、生物,格式:([ <物品或生物檔名>:<數量>, .... ])。
"outdoors" (string) 房間是否為「戶外」,戶外房間可以看到天色變化與氣候影響。字串的意義表示房間的氣候區,通常和該區域的 domain (即 /d 下的目錄名稱) 同。
"no_fight"(int) 房間是為禁止作戰區域。
"no_magic"(int) 房間是為禁止施法區域。
人物屬性
"id" (string) 人物英文名,這個字可以用來識別玩家,通常 "id" 跟 "name" 都不直接用set() 設定,而是用 F_NAME 中的 set_name()。
"title",
"nickname",
"name" (string) 人物的稱號、綽號、與中文姓名。
"age" (int) 人物的年齡。
"age_modify"(int) 這個數值會在 update_age() 中被加在人物的年齡上,可以是負數。
"jing",
"eff_jing",
"max_jing"(int) 精,當前精,最大精
"jingli",
"eff_jingli",
"max_jingli"(int) 精力,當前精力,最大精力
"neili",
"eff_neili",
"max_neili" (int) 內力,當前內力,最大內力
"qi",
"eff_qi",
"max_qi"(int) 氣,當前氣,最大氣
"shen_type", (int) 神的類型,0是負,1是正
"str",
"int",
"con",
"dex" (int) 人物的天賦,依序分別為膂力、悟性、根骨、身法
"combat_exp"(int) 人物的實戰經驗
"jiali"(int) 表示人物打中別人並加的內力點數。
"family"(mapping) 人物的師承門派等記錄
"skill"(string) 人物的武功
物品屬性
"name" (string) 物品的中文名稱。
"id" (string) 物品的英文名稱。
"long" (string) 物品的詳細描述。
"value" (int) 物品的價值,單位是「錢」(coin)。
"unit" (string) 物品的單位,如:個、把、枝.....
"no_get"(int) 表示物品是否可被撿起來。
"no_drop"(int string) 表示物品是否可被丟棄,如果型態是 string, 則當有人企圖丟棄這個物品時會將該字串用 notify_fail 傳回去。
武器屬性
"skill_type"(string) 這個武器所屬的技能種類,如 "sword"、"blade" 等,要注意在 /d/skill下必須有一個定義該武器技能的物件,否則裝備這個武器戰斗時會有錯誤訊息。
"rigidity" (int) 武器的硬度,當使用武器相斗時,硬度、武器的重量、持用者的力量將會影響武器受損的機率。
"weapon_prop"(mapping) 武器對持用者的狀態影響,通常武器只影響 "damage",這些狀態影響會在武器被裝備時用 add_temp() 加到持用者的 apply 上,並於卸除或 dest時減回來。
一個基本的房間,只要有 short <短敘述> 、 long <長敘述>、 exits <出口>就行了。就象:
void create()
{
set("long", @LONG
房間的敘述.......
LONG
);
set("exits",([
"west" : __DIR__"path3",
]);
在這里__DIR__是什么意思?假如說我們寫的這個房間的文件在/d/city目錄下,那么這個__DIR__就是"/d/city/"也就是“"west":"/d/city/path3"”的意思。在上一章的品質要求里講過,我們提倡采取這樣的寫法,因為這樣寫了以后,不管你這個區域的目錄放在哪里、或者是更名都不會受到影響。接下來,我們可以給這個房間里添一點生動一些的東西,比方說,讓玩家在這里能夠look到什么:
set("item_desc", ([
"景物名稱1" : "景物敘述",
"景物名稱2" : "景物敘述",
...........(可以有很多)
]);
其中景物敘述可以是一句、幾句話,或是一個自定義的函數,這個函數你就寫在后面的某個地方,以根據不同的情況顯示look景物名稱后而出現的信息與效果。所以你可以利用這個功能加以變化,當玩家 look 一個景物時,可能看到敘述,也可能發生一些特殊的事件。
然后下面就再給這個房間加點東西。
set("objects", ([
"物品或生物的檔名" : 數量,
...........
]);
如同前面所提到的,建議采用 __DIR__來編寫你的路徑,而數量則要用整數。
寫到這里,有的巫師有點不滿足,說,我看見有的房間有時某一方向的門是開的,有時又看不到,要使用open door指令打開門才行,這是怎么做呢?這其實也簡單,只不過首先要復習一下前面的繼承概念。因為這個門是房間里的一個特征繼承,需要用到一些在/include/room.h里定義的一些變量,所以要有文件頭記得必須先 #include <room.h>。然后在文件中寫上:
create_door("出口方向", "門的名稱", "進入方向", 預設狀態);
比如說,這里明顯的出口有 west、east 和 up。 而你要讓西邊有一個關上的紅木門,你可以這樣寫:
create_door("west", "紅木門", "east", DOOR_CLOSED);
當玩家進入這個房間時,他會看到:
這里明顯的出口有 east 和 up。
而當他 look west 時,會看到:這個紅木門是關上的。
有關create_door()是如何讓你的房間表現出這樣的特性的,那就要去仔細看看學習它所繼承的/inherit/room/room.c文件了。不過對於新巫師來說,還不必急着去看,只要知道要加上這些語句就可以實現,也就行了。