Re: [wizs]問題請教(十三)

看板mud_sanc (Sanctuary - 聖殿)作者 (幽素)時間18年前 (2007/07/09 18:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/8 (看更多)
※ 引述《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
文章代碼(AID): #16aWiKIP (mud_sanc)
文章代碼(AID): #16aWiKIP (mud_sanc)