[wizs] weather_d.c 的群播
當處於一般房間時會看到如下訊息..
豆大的雨滴如水銀洩地般的由空中傾洩而下,一道閃電挾著震耳的雷聲落在大地上.
夜色漸深,寧靜的漫漫長夜開始了。
其群播寫法如下...
void show_message(string msg)
{
object *obs,env;
int i,to;
obs=users();
to=sizeof(obs);
for(i=0;i<to;i++)
{
env=environment(obs[i]);
if( !env ||env->query("light") )
continue;
tell_object(obs[i],msg);
}
}
目前很多系統都有設置類似如上的 show_message 函數,
如輪盤、大樂透、拍賣會等。
這種寫法有個缺點,就是不能頻繁呼叫,否則每一次都會
做讀取 users()、每一次都會做 for 迴圈,系統就會處於
一個常態 loading-some 的狀態。
另一個缺點就是,如果 users() 的 size 過大,可能也會
出問題。
目前則有研發出新的群播寫法..
void show_message(string msg)
{
object ob;
mixed usr=users();
foreach(ob in usr)
{
if(interactive(ob) && environment(ob))
ob->add_temp("broadcast_msg",msg);
else
ob->set_temp("broadcast_msg","");
}
}
先把欲群播的訊息設在所有玩家的身上,然後更動玩家的
heart_beat 函數...
if(temp_data("broadcast_msg"))
{
tell_object(me,temp_data("broadcast_msg"));
map_delete(temp_data,"broadcast_msg"));
}
這樣的好處是分散:
一、在 show_message 函數裡頭做的是對所有玩家的群播
訊息設定(只 set).
二、然後讓玩家自己對自己做訊息的 tell_object.
這樣理論上玩家就算 400 人,loading 也不會加重太多,
若是用傳統寫法,loading 就會跟玩家人數成正比。
(雖然用心跳寫法也是會, 但增加幅度不明顯)
Belldandy.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.82.176.179
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
21
49