※ 引述《amosdeus (幽素)》之銘言:
: 問題:我想設置只要有玩家在就會不斷產生效果的房間,玩家離開就消失
: 比如毒好了,只要玩家在房間內就會不斷中毒而不是只中一次毒在
: 進入下格房間才會再中的哪一種。
: 以上
: 謝謝
: Plain@Sanc
有三種做法,一種是在 heart_beat 函數中寫,一種是寫在
毒物中,一種是寫在房間中使用房間控制。
理論上,房間的比較容易,但是需使用 call_out 語法,在
這種情況下必須設定中止判斷。
int room_check_poison(); // 事先宣告
void init()
{
object ppl;
if(!userp(ppl)) return ;
if(query("callouting")) return ;
set("callouting",1);
// 進房間的是玩家, 且房間沒有在執行 callout 時才觸發
check_poison();
return ;
}
void room_check_poison()
{
object ob=this_object();
mixed usr=all_inventory(env);
int i;
// 此時 ob 已經用不到了, 底下另做它用
foreach(ob in usr) // 此時 ob 給 foreach 用
{
if(userp(ob))
{
// 看要讓玩家怎麼中毒, 寫在這裡
}
else
i++; // 累加 usr 中非玩家的數量
}
if(i==sizeof(usr)) // 非玩家數量=房間物件總數時
{
delete("callouting",1);
remove_call_out("room_check_poison"); // call_out 中止
return ;
}
call_out("room_check_poison",看要設幾秒寫在這裡);
// 那麼 n 秒後它就會再呼叫一次 room_check_poison
// 形成呼叫的迴圈
return ;
}
這樣寫的好處是...
一、一群玩家進入房間時,只有第一個會使 init 函數去呼叫
room_check_poison,其它人不會;非玩家則不會去呼叫該
函數。
二、只要呼叫了 room_check_poison 後,房間的全部玩家都會
中毒,非玩家不會。
三、房間中的玩家只要全部消失在該房間,call_out 即中止;
部份玩家離開房間後,這些玩家中毒的情況就會解除,而
留在房間的玩家則繼續中毒。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.231.123.198