作者amosdeus (幽素)
看板mud_sanc
標題Re: [wizs]問題請教(十三)
時間Mon Jul 9 18:16:33 2007
※ 引述《airkiss (空中之吻)》之銘言:
: ※ 引述《hlead (希多)》之銘言:
: : 問題一:
: : 能讓shout所顯示的話,
: : 限制在..存在於這區域的人才看的到嗎?
: : 或者有別的寫法?
: : 反正就是如果出現一段訊息,
: : 然後那段訊息只會讓現在 在這區域的人看到。
: 這個問題要決定於區域的定義
: 若是區域只有一個room , 那麼呼叫 tell_object(room,"something you want to say");
: 則該房間內的mob/player 都會收到這個訊息
: 若是定義成要某個自寫的區域生效的話
: 就需要用點技巧才行
: 比如在區域入口前, 將每個進入該區域的player寫一個暫定變數
: 假定是 this_player()->set_temp("area_shout",1);
: 離開區域時, 需要將this_player()->delete_temp("area_shout");
: 那麼你就可以用下列的方法, 使得只有在區域內的人收到訊息
: mixed objs = users();
: object ppl;
: foreach (ppl in objs) {
: if(interactive(ppl) && ppl->query_temp("area_shout")) {
: tell_object(ppl,"something you want to say");
: }
: }
: 缺點是玩家要離開該區域的方法有很多種, 比如斷線, 離線, recall, 掛點
: 都要在這些事件發生時, this_player()->delete_temp("area_shout")
: so..這種作法只能用於短暫或是寬鬆的判定條件
: 上述這種問題, 可以提供給admin, 由admin主導將此東西標準化
: 那麼wizards 就可以直接呼叫使用即可
問題:
int beachscape()
{
mixed usr=all_inventory(environment(this_player()));
object ppl;
int r;
r=random(2);
switch(r)
{
case 1:
foreach(ppl in usr)
{
if(!userp(ppl)) continue;
if(!interactive(ppl)) continue;
tell_object(ppl,"....");
}
break;
default:
shout("XXXX");
write("XXXX");
break;
}
return 1;
}
這是我的程式碼,這樣的寫法有一個問題就是當使用道具的人呼叫出
int beachscape() 而他又離開這間房間(A)到房間(B)去時,執行的
敘述會出現在房間(B),而不是在我規定的房間(A)。
第二個問題是在 default: 中我希望是用 tell_object 來告訴房間的
玩家沒事情發生,但是經過我測試之後 tell_object 是不會被執行的
不用 show 的原因是當玩家不在房間(A)還可以收到敘述也是不合理的
以上
謝謝
Plain@Sanc
--
咽咽學楚吟 病骨傷幽素 秋姿白髮生 木葉啼風雨
燈青蘭膏歇 落照飛蛾舞 古壁生凝塵 羇魂夢中語
【 傷心行 李賀 】
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.127.98.55