看板 mud 關於我們 聯絡資訊
嘛,明年應該會繼續改。 最近思考的東西有兩個層面: 1.生物屬性值 2.板模 所謂生物屬性值是說,例如我想架的 mud,我希望它有 hp/sp/pp 三種數值,那比較合理的想法就是,既然我同時也是 tmi2_v3_改 的修改者,我自然會在 tmi2_v3_改,加上這三個屬性值,但是其 它拿到 tmi2_v3_改 的人,他可能只希望他的 mud,有 hp/sp 就 好,不要有 pp。 那麻煩了,因為對一個已寫了 hp/sp/pp 的 mudlib 來說,拿這 一份去改為只有 hp/sp 的 mud,得改動不少地方。 (反過來也一樣,但新增畢竟比減少簡單一點) 是以這裡就帶出一個直覺的做法: 少用 query("xxx"),多用 query_xxx 的函數讀取法。 事實上前者也不是不行(在 user.c 裡面針對 query 做判斷式), 但後者最大的好處,是給修改者較大的修改及擴充彈性。 而且使用函數名,在 win 下的最大好處就是可透過 win 的搜尋 功能,直接就能搜出到底哪些 .c 檔有寫到 query_xxx,將來要 做統一的修改時把這些檔案搜出來,一次修改即可。 然後以上面為前提,則必然需要一個用來繼承的 .c 檔,統一宣 告這些 query_xxx 函數,來讓 user.c、monster.c 等繼承,或 是更乾脆一點寫成 simul_efun。 這個明年再決定。 再來,所謂的板模是說,例如 sanc 風格的 who 長這樣: > who ζ TMI-2 Win32 ζ 現在時刻: 12/20 10:03(四)(已執行: 15分 49秒) ────────────────────────────────────── 線上的玩家: ────────────────────────────────────── 線上的巫師: *Laechan ────────────────────────────────────── 共有 1/1 位玩家在 TMI-2 Win32. (斷線狀態: 0 位) 但是 casamia 的 who 是長這樣 > who2 [冒險者] 13級 人類 0 Laechan 你看到 1 位玩家進入遊戲. 板模的常見做法,是先將板模讀進來: if(!module_str || module_str=="") module_str=read_file(THIS_CMD_MODULE); 然後是這裡: str=sprintf(module_str, ppl->query_hp(), ppl->query_sp(), . <= 看板模裡頭有多少 %s, %d, .. . 依序放進所需的參數 . ); str=COLOR_D->get_color(str); <= 這樣就可以使用 $HIW$ 等顏色字串 這樣做的好處是,常用指令的各個板模,可放在同一個目錄下, 方便修改及管理。缺點就是,例如說 sanc 的 who 是只讀取玩 家的 cap_name 然後每 6 個 id 一列,像這種在板模內可能只 有一行: $CYN$──────────────────────────────────$NOR$ 線上的玩家: %s $CYN$──────────────────────────────────$NOR$ 然後修改者得為這個 %s 寫一個處理用的函數: string who_string() { string tmp; mixed usr=users(); object ppl; foreach(ppl in usr) . . return tmp; } 當然 who 的例子可能複雜了些(因為是讀取全部玩家的資料), 但這代表了如果今天要顯示的是一個不定size的 mapping 或是 array 的資料時,就得自訂函數來應付板模化的讀取方式。 (這些問題在 guild 顯示玩家已加入公會、或是 skill 顯示玩 家已習得技能等指令上面會特別明顯,都得靠自訂函數) 那麼,板模化有沒有必要? 我認為板模化還是有其價值,因為初期把指令的顯示結果寫得 太陽春的話,對拿到這份 mudlib 的人來說,它要改的東西就 會很多,反之,如果有提供大部份指令的顯示板模,那初期至 少修改者可以只改動板模跟指令裡頭 sprintf 的地方,就能 達到個人化顯示風格的目的。 以上兩個,會列入明年初的修改重點。 -- 『無窮的宇宙,無盡的時空,無限的可能,與無常的人生之間 的永恆矛盾,從倪匡這顆腦袋中編織出來。 』 ──金庸評倪匡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.106.224 ※ 文章網址: https://www.ptt.cc/bbs/mud/M.1545275347.A.8AD.html ※ 編輯: laechan (122.117.106.224), 12/20/2018 11:11:12