作者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
1F:→ hlead :3的部份,可能写专门的会比较好啦... 04/02 12:36
2F:→ hlead :毕竟以後会用到的机率可能蛮大的... 04/02 12:36
3F:→ hlead :用现有的pre_die可能不够直觉..avert 04/02 12:36
4F:推 justinj :3还有好几个用途的..其中一个是假如打某怪时,剧情是 04/02 17:04
5F:→ justinj :要打输,你却打赢..这样好像不对吧..所以就分成打赢拿 04/02 17:05
6F:→ justinj :这只的装且跑剧情A..打输跑剧情B..这样就可以写多变 04/02 17:06
7F:→ justinj :任务了呀... 04/02 17:06