精華區beta mud 關於我們 聯絡資訊
現在開始創建一個新角色. 1.登入自己的 mud. 2.輸入一個 id, 例如我是輸入 laechan, 然後按 y. 3.這時會出現一個給新玩家的訊息, 這個訊息存在 /adm/news/nplayer_intro 4.輸入密碼, 然後再輸入一次做為確認 5.選性別(我選 male), 選種族(我選 human) 6.輸入 email, 輸入 [email protected] 就行了 7.輸入 real name, 隨便輸入(像我是輸入 laechan) 然後就可登入一開始的登入用房間 /d/TMI/rooms/quad.c more here 就可以看到該房間的檔案, data here 則可以看到 這個房間的物件資料, LPmud一般是.. exits: 出口, mapping 格式, key name 是方向, 接的是房間檔名 light: 房間亮度 long: 房間長敘述 short: 房間名 所以你可以用編輯器把這個房間改一改, 這樣你的 mud 就有了 一個最起始的登入用房間. 再來的話,cd /adm/daemons, 下 ls 指令, 你會看到一些檔案, 處理方才登入程序的檔案有兩個.. /adm/daemons/logind.c // 一般登入用檔案 /adm/daemons/newuserd.c // 新玩家專用檔案 它的意思就是,如果你是舊玩家,那從你進行登入、到成功登進 mud 的起始房間,大抵上都是由 logind.c 處理。 但如果 logind.c 判斷到你是未註冊的新玩家,它就會請 newuserd.c 來協助處理你的帳號新增流程(就是選性別, 種族那邊). 然後 data me, 你就可以看到自己的一些 data 資料, 一般欄位 是這樣的.. armor : 用來儲存你穿上裝備後的 armor 值資料. 比方某防具      shield 設定防御值 60, 那你裝備上它之後就是 armor["shield"]=60 capacity : 負重最大值, 基本上每一件物品都有 mass 重量設定, 總重不能超過這個 capacity 值. cwd : 代表你現在按 cd. 指令會看到的目錄名(也就是你目前       所處的工作目錄  gender : 就是你的性別 id : 比方我選的 name 是 laechan, 那 id 這個欄位就是 ({"laechan"}) ip : 登入 ip. 因為我是 telnet localhost 5000, 所以 ip 欄位看到的就是 "127.0.0.1" 代表我是本地登入 last_location: 你上一個所處的房間在哪裡(wiz 指令 back 用的) mass : 一般人物重量 max_sp : sp(精神力, 魔法力)的最大值 npc : npc 識別. 因為我是玩家不是 npc, 所以 npc = 0 race : 就是你的種族 reply : 若有玩家 tell 你什麼, 然後你 reply 回他, 回他的 訊息就會儲存在這個欄位 stat : 玩家的屬性數值, TMI-2 目前定義了幾種數值 ([ "dexterity" : 17, "strength" : 13, "intelligence" : 16, "constitution" : 15 ]) time_to_heal: 幾秒自我回復一次, 通常這個是由 /std/user.c 的 heart_beat 函數控制 weapon1 : 第一武器 weapon2 : 第二武器 . . . 一開始的資料欄位都是很單純的. /cmds/std 則收集了一般玩家可以下的指令, 常見的 score, look, alias, get, drop, passwd, i(inventory) 等都在這裡, LPmud 一 般的分法如下... /cmds/adm 管理者才能下的指令 /cmds/file 一般巫師可以使用的檔案類指令 /cmds/ghost 玩家變成 ghost 狀態(比方陣亡時)可以用的指令 /cmds/object 與物件相關的指令(如物件移動的 gate) /cmds/std 一般玩家可以使用的指令 /cmds/wiz 權限層級為 wiz 時可使用的指令 /cmds/xtra 權限層級為 elder wiz 時可使用的指令 定義權限的地方則放在 /adm/news/groups 檔案內, more 他可以 看到幾個東西 (root) cratylus (admin) (root):cratylus (adminaccess) (admin) 也就是說這個 mud 的最高管理者(root)它設定為 cratylus, 我 只要將它改成 laechan, 那我就是我自己 mud 的最高管理者. 再來管理者區(admin)的 (root):cratylus 它的意思, 就是root 當然是管理者的一員, 用 (root) 就代表把 root 區的所有人都 納進來的意思, : 則是分隔號. 除此之外我亦把 cratylus 也設 為管理者的意思. 而在這個 mud 裡頭, adminaccess 則是更次一級的管理者的意 思. 像聖殿的分法就是 root、adm_c、adm、deep、wizard 分法可以照自己的意思, 不過剛開始都先 follow 它的預設值即 可. 所以你只要把自己的 id 加進 root 區, 然後重開 mud, 這 樣你的角色就會自動變成最高級管理者, 接下來我們對我們的人物下 save, 再 quit, 則你的玩家檔案會 被存在 /data/std 目錄下, 有兩個檔案.. /data/std/connection/l/laechan.o // 儲存登入用資訊 /data/std/user/l/laechan.o // 玩家資料的實際儲存檔 底下是在 connection 目錄下的 laechan.o 檔 #/std/connection.c name "laechan" password "doeaeo`f!jehbnbo`nchhfgndd`fbggnhmfndjnji" body "/std/user" email "[email protected]" real_name "laechan" ip "127.0.0.1" wizard 1 last_on 1311905037 password 即密碼的部份, 它儲存的是已編碼過的. 接著用編輯器打開 user 目錄下的 laechan.o, 然後找一行 "PATH":"/cmds/std:/cmds/object:/cmds/xtra:/cmds/file:/cmds/wiz" 這一行就是你登入 or 創造角色時, 系統自動配給你的 「你可以執行指令的範圍」 所以雖然一開始創建的角色不是 wiz,卻可以執行 wiz 指令,原因 就在於系統有把 wiz 區的指令配給你的緣故。 這是因為 /adm/daemons/newuserd.c 自動幫你做了 set("wizard",1); 的動作的緣故. /adm/daemons/newuserd.c static void get_real_name(string rn, object user, object body) { . . . #ifdef AUTO_WIZHOOD user->set("wizard", 1); write("AUTO_WIZHOOD="+identify(AUTO_WIZHOOD)+"\n"); body->set("PATH", AUTO_WIZHOOD); write("\t[You have been granted automatic wizard status]\n"); #endif /* AUTO_WIZHOOD */ . . } 中間那一段是說如果 /include/config.h 有定義 AUTO_WIZHOOD 的話,就執行 #ifdef ... #endif 之間的東西 user->set("wizard", 1); 設 wizard 標記 body->set("PATH", AUTO_WIZHOOD); 設 AUTO_WIZHOOD 到 PATH 但是 /include/config.h 所 #define AUTO_WIZHOOD 的東西卻是 空的(undefined), 既然是空的為何會執行上面? 原因很簡單, 因為就算是空的「仍然 #define 了 AUTO_WIZHOOD」, 所以 #ifdef AUTO_WIZHOOD 它就判斷為真. 這時候, 雖然 PATH 是空的, 可是因為有 wizard 參數, 玩家在登入 時就會再呼叫 /std/user.c 的 init_commands 函數 /std/user.c static void init_commands() { string path; add_action( "cmd_hook", "", 1 ); path = query("PATH"); if (!path) { if ( wizardp(this_object()) ) path = NEW_WIZ_PATH; else path = USER_CMDS; set("PATH", path, MASTER_ONLY); } } 所以只要把 newuserd.c 的 #ifdef ... #endif 把他們整個 /* */ 掉, 就不會雞婆地把每個新創的玩家角色都設為 wiz 了。 到這裡至少.. 一、你已經可以新增管理者角色. 二、每個在你 mud 新增的角色, 其權限就只會是玩家. 三、你已經知道如何改登入畫面、及玩家一開始登入的房間環境. 四、你也可以試著簡化 newuserd.c 的流程, 比方如果你的 mud 不需要玩家輸入 email 跟 real_name 的話, 那就可以讓 newuserd.c 跳過這兩個輸入流程. Laechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.83.16.91