作者laechan (小太保)
看板mud_sanc
標題Re: [問題] 問題[捌]
時間Mon Apr 2 10:30:38 2012
※ 引述《justinj (黑旋風)》之銘言:
: 綜合一下以及如果非我能修改的都算進去的話
: 應該有幾個寫法
: (一)某區域只要離開算任務失敗
: 就設定一個room而會一直heart_beat,判斷允許名單上
: 是否有在區域內,沒有的話就任務變數移除。
: 判斷非法進入比較簡單,就沒變數就送回高塔處。
它會發生失誤的情況在於 room 有可能被系統 clean.
(設 pre_clean 也無法百分之百保證不會被清掉)
所以先前我有提到你先想到的方法--放一個 obj 在玩家身上
然後設心跳定時判斷, 基本上是可行的.
(該物品設不可掉落)
另外, 若不是很嚴格的判斷, 還可以借用 weather_d.c 來做
判斷(它基本上每 240 秒判斷一次)。
而打工用的則是玩家的心跳函數,再輔以 time 及房間判斷,
因為最終判斷玩家打工失不失敗,還是在玩家打工的房間做判
斷,這個跟你使用因離開房間(區域)而判斷為失敗的情況不一
樣,所以我先前才提議或許你也可以更改所謂「任務失敗」的
判斷方式。
: (二)只要非區域允許的離開就算失敗
: 這個我是想到修改recall的所在地(recall指令)這樣以後
: 要修改成分區制也比較容易,到時在區域內將此變數(所在地)
: 修成我要的地方就好了。(當然玩家的die,登入也要修)
: 當然die可以用一個有id為pre_die的物件放在玩家身上來代表死亡
: 另一個要修的是return,到時要修放的人及要召回的人的recall
: 變數不一樣的話,就某人不能被return(也許條件可以再放寬,
: 不過那應該可以做成進階,主副牧之間的差別了)
依照你所想要的效果,我個人覺得還是用玩家的 heart_beat
來判斷比較省事,然後再用 weather_d.c 輔助判斷玩家斷線
的情況。
這是因為玩家的 heart_beat 是本來就存在的心跳函數。
然後再讓心跳的判斷具有彈性,例如你可以指定用哪個物件輔
助判斷(如某個已存在的房間裡面的函數),簡單的寫如下..
tmps=(mixed)me->query_temp("cycling_check");
foreach(tmp in tmps)
if(file_exists(tmp))
call_other(tmp,"cycling_check",me)
這意思是說只要玩家身上有 cycling_check 參數,則玩家的
心跳函數就定時去呼叫指定的物件(房間)的 cycling_check
函數。
而 weather_d.c 則是判斷「目前斷線狀態的玩家」,一旦發
現玩家身上有 cycling_check 參數但是卻是斷線狀態的話,
就做底下的動作..
tmps=(mixed)me->query_temp("cycling_check");
foreach(tmp in tmps)
if(file_exists(tmp))
call_other(tmp,"cycling_check_fail",me)
me->delete_temp("cycling_check");
: (三)只要死亡任務就算失敗了
: 當初一直以為要放個obj在玩家身上一直heart_beat,
: 不過事實上不用。
: 就是寫個id有pre_die(或pre_die2)的obj在玩家身上
: 在死亡時會先叫這個東東,所以只要內部做判斷就好了
: 例如判斷,所在物的人的位置是否在區域內(沒有改id再
: ppl->die()或送醫院,物件移除)
這個就是截斷的意思.
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.141.243.37
→ hlead :3的部份,可能寫專門的會比較好啦... 04/02 12:36
→ hlead :畢竟以後會用到的機率可能蠻大的... 04/02 12:36
→ hlead :用現有的pre_die可能不夠直覺..avert 04/02 12:36
推 justinj :3還有好幾個用途的..其中一個是假如打某怪時,劇情是 04/02 17:04
→ justinj :要打輸,你卻打贏..這樣好像不對吧..所以就分成打贏拿 04/02 17:05
→ justinj :這隻的裝且跑劇情A..打輸跑劇情B..這樣就可以寫多變 04/02 17:06
→ justinj :任務了呀... 04/02 17:06