看板 mud_sanc 關於我們 聯絡資訊
※ 引述《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