好像以前有提過,不過再提一次也沒差。
/open/cmds/quest/quest_data/quest_data.c 裡面有一個變數:
mapping msg_buf=([]);
宣告為 mapping 代表 key_name 通常是 time() 的字串型態。它
還有一個函數
void add_msg_buf(object ppl,object env,mixed msgs)
{
int i,j,t=time();
j=sizeof(msgs);
while(i<j)
{
undefinedp(msg_buf[""+t]) ? msg_buf[""+t]=({ ({ppl,env,msgs[i]}) }) :
msg_buf[""+t]+=({ ({ppl,env,msgs[i]}) });
t=t+2;
i++;
}
}
也就是說呼叫時不用去在意 time 字串要給多少,它會自己取得,
然後 msg_buf 每一個 time 字串的資料結構是
msg_buf=([time字串 : ({ ({哪個玩家,在哪個地方,會看到什麼訊息}) ,
({哪個玩家,在哪個地方,會看到什麼訊息}) ,
({哪個玩家,在哪個地方,會看到什麼訊息}) , }), ]);
這意思就是說同一個時間,可能存在複數個玩家、於各自所在的地點,
各會看到什麼訊息。
我剛剛新增了一個 questing 呼叫語法:
questing("msg_buf","add",玩家id,({訊息}));
questing("msg_buf","add",玩家id,({訊息1,訊息2,...}));
以 running code 來跑:
==============================
questing("msg_buf","add","laechan",({"測試1","測試2","測試3"}));
==============================
100% 111% 100% > 測試1 1秒後
測試2 2秒後
測試3 3秒後
不使用 questing 的話也可以使用以下的呼叫語法
> cd /open/cmds/quest/quest_data
> call quest_data;add_msg_buf;me;here;({"測試1","測試2","測試3"})
其執行結果是相同的。
wiz 們若有 msg_buf 的需求時可多加利用,我最近對這個就有很重
的依賴需求,它原本只是給任務系統使用,但這樣有點浪費,能拿來
支援其它東西是最好的。
Laechan