精華區beta mud_sanc 關於我們 聯絡資訊
※ 引述《amosdeus (幽素)》之銘言: 底下的函數你必須說明一下,它是寫在哪裡 1) 道具? 2) 房間? : 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: 這個要特別講,random(2) 只有兩個值,0 跟 1,所以 default 就是指 0 的情況。 : shout("XXXX"); : write("XXXX"); : break; : } : return 1; : } : 這是我的程式碼,這樣的寫法有一個問題就是當使用道具的人呼叫出 : int beachscape() 而他又離開這間房間(A)到房間(B)去時,執行的 : 敘述會出現在房間(B),而不是在我規定的房間(A)。 我假設兩種情況 一、你使用道具,道具去呼叫房間的 beachscape,那這個時候 usr=all_inventory(environment(this_player())) 讀出來 的是「使用該道具者當時所在房間的所有物件」。 二、你使用道具,道具內有 beachscape 函數,那同上。 所以不管哪一種,usr 都是指該玩家當時所在房間的所有物件。 換言之,你在 A 房間執行該道具->呼叫 beachscape 函數時, 它讀出來的 usr 自然等於 A 房間的所有物件。 同樣的道具在 B 房間執行該道具->呼叫 beachscape 函數時, 它讀出來的 usr 自然等於 B 房間的所有物件。 this_player() 指的是正在呼叫這個函數的「主體」,因為使 用道具的是你,所以 this_player() = 你。 environment(你)就是讀出你呼叫該函數時所存在的房間(環境) all_inventory(所在房間) 自然就等於讀出所在房間的所有物 件。 : 第二個問題是在 default: 中我希望是用 tell_object 來告訴房間的 : 玩家沒事情發生,但是經過我測試之後 tell_object 是不會被執行的 : 不用 show 的原因是當玩家不在房間(A)還可以收到敘述也是不合理的 : 以上 : 謝謝 : Plain@Sanc 應該是上面 random(2) 的問題。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.227.20