作者laechan (小太保)
看板mud_sanc
標題Re: [問題] 問題[捌]
時間Sat Mar 31 21:31:50 2012
※ 引述《justinj (黑旋風)》之銘言:
: (一)
: 如果我要設定一任務在某個區域,如果玩家離開
: 此區域的話,那任務就會失敗。這個要怎麼設?
: 目前玩家離開的方法有幾個:
: 1.recall(主動)
: 2.死亡(被動)
: 3.return(被動+主動)
: 主動的2個還算好處理..問題在於被動的2個..
: 我是有想到一個..但總覺得這樣寫不太好
: 就是設一個obj..然後它會一直heart_beat
: heart_beat裡會判斷當玩家不在區域內時失敗..
這樣應該是可行的,你可參考 /d/spell/magic-cycle_ob.c
的 heart_beat 部份的寫法,它可一次處理多人。
不建議一個玩家就給一個 obj 做 heart_beat check。
: (二)
: 同樣的,如果我要設定玩家只有在過關時才能離開?
: 如果用非區域允許的方法離開就會回到某格。
不建議這樣做,不過以日後的 GI 來說我可能會這樣做
也說不定(雖然有別的方法而且也已經實行了),GI就是
不允許玩家用非法的方式脫離,若是我,我的做法比較
簡單,就是改小滷蛋那一格,讓玩家一進到 recall 點
就自動判斷玩家是否為非法脫離。
不過其實要防堵也很簡單,只要把玩家所有可能脫離的
方法都列入考量即可。
至於 GI 島內則是所有房間均會判斷玩家是否為非法入
侵(因為繼承同一個根樣本物件)。
: (三)
: 然後最後一問題,一樣在某區域內,如果只有死亡
: 才算任務失敗,而recall,return 都不算失敗的要怎麼寫?
改玩家的 die 函數,我以前有說過,只要有需要都可
提出申請,能寫就會寫入,不能寫入就會跟你說原因.
以上面為例,通常我的做法如下..
env=environment(me);
if(env)
if(function_exists(env,"die_check"))
env->die_check(me);
上面的意思是若使玩家陣亡的房間有 die_check 函數
,則玩家 die (或爆水晶) 時就會去呼叫它。
另外,也可以做成截斷式寫法..
if(env)
if(function_exists(env,"die_check"))
if(env->die_check(me)>0)
return 1;
這意思就是說若回傳值 >0 「陣亡或爆水晶就被中止」
純粹看有沒有需要。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.246.36.192
推 justinj :了解...不過1的區域如果很大還可以用cycle那個嗎? 04/01 10:13
→ laechan :可,類似寫法,不過cycle_ob比較不怕房間reborn 04/01 12:12
→ laechan :心跳物件除非放在玩家身上不然都可能被reborn 04/01 12:12