作者laechan (打死不投马冏,李系咩安抓)
看板mud_sanc
标题Re: [wizs]问题请教(十四)
时间Wed Jul 18 10:28:08 2007
※ 引述《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