作者laechan (挥泪斩马云)
看板mud_sanc
标题[wizs] 以 questing 呼叫来设定延迟讯息
时间Mon Jun 24 13:32:54 2019
好像以前有提过,不过再提一次也没差。
/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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.66.104 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1561354377.A.A1A.html
※ 编辑: laechan (114.33.66.104 台湾), 06/24/2019 13:33:08
※ 编辑: laechan (114.33.66.104 台湾), 06/25/2019 09:39:53