Re: [閒聊] tmi2_v3_改 目前還缺什麼?

看板mud (網路地下城/文字遊戲)作者 (小太保)時間11年前 (2014/06/15 08:56), 11年前編輯推噓5(502)
留言7則, 1人參與, 最新討論串6/6 (看更多)
※ 引述《tenyfish (何時才有發言權?)》之銘言: : 就我看了一下檔案內容及說明文,幾點回饋: : (以一個入門者的觀點來講) : 1. 說明檔 : 十分詳細,函數及變數都有標出來, : 我個人會建議,把"特別系統"的說明分成一個文件 : ->相關檔案 : ->修改會影響的其他系統 : ->遊戲內相關指令 : 而.h裡面直接註解說明宣告(我發現你vobj.h有做了) : .o裡面範例註解每個欄位 如果確定會寫系統的說明文件,那麼 .h 檔的註解就不會寫得 太詳細。一般會先寫完系統才寫說明文件,若在寫系統的過程 中耗費太多時間在註解上,會影響系統的撰寫。 註解一般是我寫給自己以及 more 的人加減參考用的,因為如 果系統沒有一氣呵成完成,隔幾天後我可能會忘記一些重要的 段落,註解的用意就是避免我忘記那些段落,或是我認為那是 很重要的段落這樣,例如 vobjd.c 裡面有一段.. void set_ob_data(string keyname,string tmp) { mixed tmps=explode(tmp,";"); int i,j=sizeof(tmps); string tmp2; mapping ob_data=([]),keydata=([]); // ({"名稱","編號","單位","種類","敘述",價格,攜帶量,能否交易,能否販售}) if(j>0) ob_data["name"]=tmps[0]; 標亮綠色那一段就是很容易忘記其順序與代表的意義,才會註 解在那邊。 至於 .o 檔要註解....很困難,但我會在說明文件裡面補上欄 位說明,並請使用者與系統檔對照。 我也會在同一說明文件裡面加上「系統的建立、使用及移除」 一項,說明建立系統的過程,以及哪些東西會使用到這個系統 ,以及怎麼使它無效化。但以 chinesed.c 來說其實我就不可 能建議使用者「移除」它,因為太多東西都跟 chinesed.c 有 關,在這情況下在「建立」與「使用」上我會講得比較詳細, 而這其實就是建議使用者「頂多修改它就好而不要移除它」, 「如果真的要移除它,那乾脆連 tmi2_v3_改 也一起移除」。 : 2. 關於LPC入門者 : 以DS的方法是,他Q&A建議你以非wiz身份完成一些範例任務 : 並在中間觀察相對應檔案的內容,了解room的設定 : 然後自己設計自己的一個區域和任務,它的文件有一些lpc教學 : 像是ob->的用法之類的 Spock@FF 以前有寫了一系列的 LPC 使用教學,寫那些是很累 的,而且看完後能不能懂、懂了是否就因此會了,都是因人而 異。 LPC 教學也不是 tmi2_v3_改 應該包含的東西,從「改」這個 字就可以知道,如果說 tmi2_v3 原生就有 LPC 教學相關,那 麼 tmi2_v3_改 就會有,反之,tmi2_v3 本來就沒有這東西的 話,tmi2_v3_改 要有就得花時間新增。 我也不建議完全沒 LPC 基礎的人架 tmi2_v3_改,那太花時間 ,而且違背我釋出 tmi2_v3_改 的本意─我不希望拿它架站的 人必須花很多時間才能架出一個站。對於一個完全沒基礎的人 來說,tmi2_v3_改 跟 tmi2_v3 事實上是一樣的東西。 所以我還是比較建議有 LPC 底子並實際當過 wiz 的人,才較 適合使用 tmi2_v3_改 來架站。花時間寫 LPC 教學文件是 ok 的,但以重要性及優先度來說它並非我現階段的優先選項,而 且我以前也寫過,根據我自己對自身的瞭解,我常常寫到一半 就突然不寫了。(那真的很煩..) : 3. 關於一些較常見的系統 : 可以以"參見XXX mud 某系統使用" : 例:一開始先建議使用者體驗Sanc並且使用哪些功能 : 畢竟說明文件是開發工作上很花心力的部份 我之所以沒說出「如果對當 wiz 有興趣,sanc 也歡迎大家來 當 wiz」這樣的話,是因為有前車之鑑,我曾收過一個 wiz, 結果他一來就自己四處 more 導致「不該看的也看了」,然後 就產生誤解,例如他看了某個房間: #include "mudlib.h" inherit ROOM; . . 根據 #include 規則當使用 " " 時,它會先找物件所在目錄 下有沒有 "mudlib.h",沒有的話才去 /include 目錄下找, 所以這房間是可 update 的,但是它的 #include 寫法是錯誤 的,對一個來之後想自己 more 的 wiz 來說就會令他產生誤 解,認為房間就是要 #include "mudlib.h"。或是: void init() { add_action("push_xxx","push"); } int push_xxx(string str) { if(!str || str=="") { write("你要 push 什麼?\n"); return 1; } 正確應該是要 return notify_fail("你要 push 什麼?\n"); 諸如此類的東西非常多。 sanc 存在太久規模也太大了,導致 sanc 並沒有真正適合新 手 wiz 的教學環境(最大的原因是因為我自己很懶)。 但是 tmi2_v3_改 就不一樣了,如果我以後用 tmi2_v3_改 架 站的話,我就歡迎完全沒基礎的人來當 wiz,因為我不必擔心 他四處 more 會看錯什麼、誤會什麼,所有的 code 也都會公 開,並歡迎已架站的人引用。 : 4. 以我自己開發的需求來說,這版有map或wizmap的功能嗎 如果是指指令 map 的話,tmi2_v3_改 有塞一個我在 2001 年 寫的 /cmds/std/_gps.c 指令: > map <= 透過 global_aliases 的設定 map = gps $* GPS 衛星定位系統 目前所在位置: [水池廣場] | 口─口 | 口─口 | 口 口 口 | | | 口──口─口─口─口─口 | | | 口 口 口 | 口 | 口─口 | 只要是超過 10 年的東西,很容易看到一個「特色」就是我很 少用宣告 mapping 的方式去儲存資料,而多半是把 mapping 資料 "set" 到物件本身,例如: if(mark==1) set("pos/"+x+"#"+y+"#",HIC"⊕"NOR); else if(mark!=1 && env_name==base_name(home_env)) { set("pos/"+x+"#"+y+"#",HIC"⊕"NOR); return 1; } else if(query("pos/"+x+"#"+y+"#")) set("pos/"+x+"#"+y+"#",HIC"口"NOR); 所以 /cmds/std/_gps.c 基本上也算是會造成誤解的存在,但 因為我在改 tmi2_v3 的過程中需要它,所以才暫時放上去。 (所以那個檔才沒有 // laechan@sanc ... for tmi2_v3_改, 相同的情況還有 /cmds/std/_note.c,都是很早以前寫的,但 note 在 2005 有經過改版,情況就比 gps 好一點) 如果要重寫一個新的...老實說我看過別的 mud 也有這東西, 它們指令的執行結果,比我寫的好多了,因為我沒受過程式的 正規訓練,有受過正規訓練的人對「遞迴」的使用會更得心應 手,沒受過訓練如我「反正寫出來能用就好了管它那麼多」。 (包括 findmob 也是,justinj@sanc 寫的也比我寫的好) 不過如果你就是指 map 這個指令的話,我可以花點時間重寫 一個新的,但有一點必須說明的是,map 的最大弱點就是無法 正確顯示「exits 設定為傳統迷宮類型的區域」,例如: 往002←001-002→往001 迴圈式出口設計 所以實際上 tmi2_v3_改 的 map 是與其它 mud 不同的,它是 一種新的 map,在目前的 sanc 也已實裝,底下是 demo: http://imgur.com/QBaTwVG.jpg
這個才是我理想中的 map,也是 tmi2_v3_改 會內建的東西, 但即便如此它還是有包含傳統的顯示方式,這個 _gps.c 指令 裡面就有: if(!map_d) if(catch(map_d=find_object_or_load("/adm/daemons/map_d"))); if(map_d) if(tmps=map_d->get_path_and_num(base_name(home_env))) { map_d->show_maps(tmps[0],tmps[1]); return 1; } map_d 就是用來管理類似上面那種地圖的,如果所在位置符合 map_d 所管理的那種新型態區域,它就做 show_maps 的動作, 不符合時就顯示傳統的 map 型式。 現階段 tmi2_v3_改 是沒有 /adm/daemons/map_d.c 的因為還 沒實裝到那裡。 LAechan -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.26.184.223 ※ 文章網址: http://www.ptt.cc/bbs/mud/M.1402793807.A.E41.html

06/15 10:06, , 1F
2不用寫,給個學習方向就好,資源很多
06/15 10:06, 1F

06/15 10:12, , 2F
3我指的是做一個玩家體驗一些功能
06/15 10:12, 2F
那 4 指的是就是上面說的 map 嗎? 對於 LPC 學習的部份我舉 annihilator 大大以前曾提過的事情, 他以前曾提到他在寫 es2 mudlib 時,曾考慮要拿掉 set, query, add, delete 等等「沒效率」的做法,這跟我曾舉例的「為什麼我 有時不選擇走高速公路,而選擇走快速道路」的例子類似。 因為有諸多考量。 考量之一就是鑑於當時的 wiz 大多熟悉 set/query/add/delete的 方式,而且是已經很熟悉了,考量到這些人希望他們可以比較容易 入門 es2 mudlib,所以 annihilator 才保留了這些呼叫方式。 那所謂 LPC 的入門學習,究竟是要從「寫物件開始」還是「從正 規的程式語法開始學起」?這沒有定論。從前者學起就是會看到一 堆 create()、init()、set、add_action、....,我自己就是從這 些開始學起,卻導致不愛看說明文件的我花費了異常多的時間才開 始用到 mapping、mixed 等變數,以及 sscanf、member_array 等 函數,而在我使用到這些變數之前我已經寫了超多的物件,造成了 超多難以挽回的情況。 那從正規的程式語法學起呢?那也不適合我,因為我既不愛看說明 文件,也沒有受過正規的程式語言訓練,但是從正規學起有個好處 ,就是有程式概念的人寫出來的物件,會比較具邏輯性,運作效率 也較好,底下的差異就是例子 set("exits/north",__DIR__+"002"); set("exits/south",__DIR__+"003"); vs set("exits",([ "north":__DIR__+"002", "south":__DIR__+"003", ])); (後者的執行效率較好) 所以其實我也不想(也不能)建議一個初學者應該從什麼角度進入到 LPC 的世界,根據歷史經驗,通常是會建議從寫物件開始,就如同 你上面也提過的(大家的想法其實差不多),建議使用者一邊觀察程 式的執行結果,一邊 more 與物件內的程式段落對照,這也是我一 開始的學習方式,它的效果很好,而且也容易參考仿照。 但是它對於「學習 LPC」幫助不大,除非是像西域奇人番僧一樣, 一直修練外功的他居然可以另闢蹊徑,由外而內,內功居然也因此 練到異常強的境界,但是這種人是很少的,至少我沒看過光是只寫 區域、怪物、武防等物件,就能寫到能改 mudlib 的人。 http://www.ptt.cc/bbs/JinYong/M.1381937085.A.630.html 至於玩家體驗,也就是 demo 的部份,則確定是會有的。我的想法 比較簡單,就是實際拿 tmi2_v3_改 架一個 mud,再開放 cd、ls 、more 等指令給「一般玩家」,然後做出足具示範性質的區域, 則有興趣的玩家自然就可藉著 more 與實際執行後的結果,瞭解一 些基本的東西它是怎麼 work 的,關鍵在於一些細節的做法。 (以前好像也有人架過類似的,好像叫大神小站) 而現階段則是透過逐步釋出的方式,讓有程式底子、也有興趣的人 可以先看看裡面有什麼新東西。 總之還是要謝謝你,這類的反饋對 tmi2_v3_改 的釋出非常重要, 這也是我一直強調的,我很需要反饋的意見的原因。

06/15 10:19, , 3F
然後這mapd滿像重生的世界
06/15 10:19, 3F
大家的想法都差不多。 ※ 編輯: laechan (114.26.184.223), 06/15/2014 10:40:52

06/15 20:19, , 4F
那我最近改來研究Tmi2好了
06/15 20:19, 4F

06/15 21:37, , 5F
問一下tmi2原來的runmud沒用了嗎
06/15 21:37, 5F

06/15 21:46, , 6F
成功以admib登入 建議移除原文說明
06/15 21:46, 6F
可以先看一下 mud 目錄內的修改日誌.txt,先參考最初修改的 前三天左右大概改了什麼。我一般沒必要不會刪除 tmi2 原本有 的東西,用新的東西覆蓋時也多半都會於修改日誌裡註明。 因為這是 tmi2_v3_改,不是完全我原創的,我也打算在釋出時 使用含有 "tmi2_v3" 的名稱,但是在釋出前我一定會盡量把這 個版本用不到的東西,都集中到一個目錄內分類存放,讓使用者 在主要目錄盡可能不會看到過時的、沒必要存在的東西。 (至於拿到釋出版本的使用者要怎麼做,我就不干涉了) ※ 編輯: laechan (1.165.194.160), 06/15/2014 22:58:58

06/15 23:28, , 7F
我照原生的runmud.bat跑後來才發現..
06/15 23:28, 7F
文章代碼(AID): #1JdEzFv1 (mud)
文章代碼(AID): #1JdEzFv1 (mud)