作者laechan (小太保)
看板mud_sanc
标题[wizs] 关於 justin 你以前要的东西
时间Tue Aug 13 14:06:24 2013
> grep -n msg_buf *
[/std/user/body.c]
94: add_temp("msg_buf",msg);
95: if(strlen(query_temp("msg_buf")) > 1900)
97: string t = query_temp("msg_buf");
98: set_temp("msg_buf",t[(strlen(t)-1900)..strlen(t)]);
void receive_message(string cla, string msg)
{
if( in_edit(me) || in_input(me) || data["int_ed"] || data["edit"] )
{
add_temp("msg_buf",msg);
.
.
receive(msg);
}
void receive(string msg)
{ efun:: receive(msg); }
基本上会吐给该玩家的讯息,大多会先经过 receive_message,
然後才会到 receive,所以所谓的「玩家看到某一行讯息」,可
能大多都是 ppl->receive(msg) 或 ppl->receive_message(msg)
的结果。
因此「理论上」,依照分光器的原理,可以将这个 msg 分流出去
,不过个人是反对的,从上面 receive 函数可看出它非常简洁,
这是为了使它具有最高的运作效率。
所以顶多只能动 receive_message,但是它将无法接收所有讯息,
比方你要写内部触发,那通常做法是
void receive_message(string cla, string msg)
{
.
.
receive(msg);
foreach(触发 in keys(要下的指令))
{
if(strsrch(msg,触发))
me->force_me(要下的指令[触发]);
}
return ;
}
所以这其实也是不切实际的做法,换言之,透过外部软体去实作
这样的讯息触发,比在 mud 本身里面做来的好。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53