[wizs] 以 questing 呼叫来设定延迟讯息

楼主: laechan (挥泪斩马云)   2019-06-24 13:32:54
好像以前有提过,不过再提一次也没差。
/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

Links booklink

Contact Us: admin [ a t ] ucptt.com