> 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
嘛,明年應該會繼續改。
最近思考的東西有兩個層面:
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 長這樣: