|
前几天,我遇到一个发呆的情况,任务地点在星宿海,在击杀完npc后,回去交任务一直路径死循环,最后发呆。
这里详细说说解决的思路,方便各位同学可以参考好自己排查类似的问题。
经排查,原因如下:
go()函数在过程中会设置road.id为目的地:
- function path_cal()
- ......
- road.id = l_dest
- l_path=map:getPath(l_sour,l_dest)
- if not l_path then
- Note('GetPath Error!')
- return false
- end
- return l_path
- end
复制代码
path_consider函数会优先判断road.id,如果有值使用road.id作为起始房间:
- function path_consider()
- ......
- if not sour.id and road.id and map.rooms[road.id] and map.rooms[road.id].name == locl.room then
- sour.id = road.id
- end
- ......
- end
复制代码
说到这里,大家有没有发现问题呢?
任务的流程是,第一步:走到任务地点(go函数),第二步:然后搜索(find函数),第三步:回去交任务(go函数)
搜索结束的房间很大可能不是你的任务地点,交任务的go函数会认为你还在第一步的road.id,计算路径返程,这里地点就存在问题了,而且locate定位函数并不会更新road.id,所以偶尔会发呆。
最后说说我的解决方法:
在任务返回的函数中,先清空road.id,然后locate到房间以后,就会按照搜索最后停止地点返回交任务了。
- huashan_cut=function()
- ......
- road.id=nil
- ......
- end
复制代码
|
评分
-
1
查看全部评分
-
|