※ 引述《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