ltblue
发表于 2015-5-27 13:32:17
感觉你被带到沟里了。
你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。
那么, ...
jarlyyn 发表于 2015-5-27 11:46 AM http://pkuxkx.com/forum/images/common/back.gif
终于碰到高玩啦,多谢
你是玩js的,我首次接触lua,所以水平很差(其实,所有脚本语言都不会,只是听说lua比较简单,现学现用啊)
虚拟机vm什么的,不懂,不过估计也超出我的能力,不考虑先
/callback事件是指什么意思?
我现在有个wait.regexp,如你所说,用来取代触发的
只是一个协程只能有一个wait.regexp存在,除非用“|”符号来增加选项,否则必须用到协程才能并发。
其实我的协程并不多,七七八八的算下来,估计也就20个左右。扣除10个左右完全用来查状态的不做任何实质操作,不需要考虑异步的以外,同时运行的一般来说只有2-3个,偶尔有些计时用的可能用到。
但即使只有两个协程,也存在可能互相打断的情况啊......
画图不是很确定,我一会试试画个简单的图好了
ltblue
发表于 2015-5-27 13:49:53
本帖最后由 ltblue 于 2015-5-27 02:09 PM 编辑
这里补充一下
由于杀手可能不同时来(大概只有1%的概率吧),所以即使打架结束,在”送信“的模块,也有可能再碰到杀手,所以”防备杀手“协程一直开启,直到送信结束才关闭。
ltblue
发表于 2015-5-27 13:52:26
感觉你被带到沟里了。
你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。
那么, ...
jarlyyn 发表于 2015-5-27 11:46 AM http://pkuxkx.com/forum/images/common/back.gif
上面是我一个送信任务的简单示意图
不算主协程的话,大概是3个协程。
协程的主要作用,就是修改主协程的进程,在不知道主协程的状态的情况下,让主协程有所行动
比如第一个协程,就是个计时器,就是当跑路了50秒后,不管跑到哪里,告诉主协程停下。
ltblue
发表于 2015-5-27 13:53:47
本帖最后由 ltblue 于 2015-5-27 01:58 PM 编辑
感觉你被带到沟里了。
你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。
那么, ...
jarlyyn 发表于 2015-5-27 11:46 AM http://pkuxkx.com/forum/images/common/back.gif
这个协程的代码如下:
wait.make(function()
printd(debug_songxin,"开始跑路50秒")
for i=1,50 do
wait.time(1)
if sta.quest.quest~="songxin_goa" then --如果已经不在跑路了,那就无所谓这个计时器了
printd("自己停下来?那不用50秒计时了")
return
end
end
sta.quest.questchange="yes" --告诉主协程,任务被打断,尽快返回主函数(即尽快重新分配任务)
sta.quest.quest="" --当前任务状态清空,以便主函数分配任务(如果不清空的返回,则自动回到这个任务而无视任何优先级)
songxin_clearcan() --关闭所有送信相关任务的”可运行性“,即均不可运行。这个函数相当于重置
quest_list.songxin_waita.can="yes" --打开waita模块(打坐等待模块)的“可运行性”。与上个指令结合,相当于制定运行“等待模块”。当然如果饮水极端缺乏,或者有其他特殊的事,跑去干别的也并非不可能
printd(debug_songxin,"跑了50秒,休息一下,等杀手吧")
end)
解释一下,printd就是print,只是能通过第一个参数来控制是否运行罢了
有些成熟的模块,我把debug一关,所有print就取消了,省着看的乱
jarlyyn
发表于 2015-5-27 14:14:07
上面是我一个送信任务的简单示意图
不算主协程的话,大概是3个协程。
协程的主要作用,就是修改主协 ...
ltblue 发表于 2015-5-27 01:52 PM http://pkuxkx.com/forum/images/common/back.gif
不明白你为什么要协程,协程为什么要让主程序停下。
如果是我的话会记录一个 开始时间,然后设置合适的主程序入口(比如进入新房间),如果当前时间-开始时间超过50秒则不执行后续(停下)
ltblue
发表于 2015-5-27 14:35:08
不明白你为什么要协程,协程为什么要让主程序停下。
如果是我的话会记录一个 开始时间,然后设置合适 ...
jarlyyn 发表于 2015-5-27 02:14 PM http://pkuxkx.com/forum/images/common/back.gif
如果那样的话,事情就很麻烦啊
因为跑路不代表一直在跑路,还可能在渡船上等,可能在河边打坐,可能在某个迷宫里,等等
如果那样的话,我的代码里会充满了各种”时间“吧?
更重要的是,打断跑路的可不只有”等时间“这一种情况啊,比如杀手忽然提前来了,又或者被人pk了,或者某个特殊任务刷新了要放下一切去做,又或者不小心被扬州的捕快抓了,天黑了被关在伊犁城里了——等等情况。我总不可能在跑路的每一步,都判断这些所有情况吧?更何况很多情况我现在也不知道,需要后续添加啊
所以我现在的做法大概就是在主协程中加入判断:”有没有特殊情况发生?有的话,放下当前工作,返回任务分配表“。
ltblue
发表于 2015-5-27 14:37:23
不明白你为什么要协程,协程为什么要让主程序停下。
如果是我的话会记录一个 开始时间,然后设置合适 ...
jarlyyn 发表于 2015-5-27 02:14 PM http://pkuxkx.com/forum/images/common/back.gif
另外,我的”跑路模块“,我是说基础的那个,本身的作用就是跑路,就是行走,他不知道自己走过去要干什么,目前处于什么状态,这些统统都不知道。他的作用就是”跑路“,目前我只是很麻烦的加了一个”别跑了,赶快停下“的功能罢了。
jarlyyn
发表于 2015-5-27 14:51:54
如果那样的话,事情就很麻烦啊
因为跑路不代表一直在跑路,还可能在渡船上等,可能在河边打坐,可能 ...
ltblue 发表于 2015-5-27 02:35 PM http://pkuxkx.com/forum/images/common/back.gif
所以你需要的是做一个状态系统的模块……不用和异步/回调干架……
ltblue
发表于 2015-5-27 15:55:07
回复 28# jarlyyn
状态系统模块是什么意思?
当前状态吗?
我有这个模块啊
包括游戏内的状态(比如气血什么的)
任务状态(任务清单,哪些需要做,优先级是多少)
以及一些特殊的状态(比如是否被打断了,如果是的话就无条件返回上一级函数,直到返回顶层函数为止)
不懂你的”状态系统模块“是指什么
jarlyyn
发表于 2015-5-27 16:02:38
回复jarlyyn
状态系统模块是什么意思?
当前状态吗?
我有这个模块啊
包括游戏内的状态(比如气 ...
ltblue 发表于 2015-5-27 03:55 PM http://pkuxkx.com/forum/images/common/back.gif
那然后,理论上每走一步就检查下状态系统就可以了啊。
如过这样做耗时太多,就是怎么想办法做缓存的事情了。