精華區beta mud_sanc 關於我們 聯絡資訊
※ 引述《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