[wizs] 關於 justin 你以前要的東西
> 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
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
31
60
706
1406