北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: ltblue

还得求助啊,异步果然是大坑......

[复制链接]
 楼主| 发表于 2015-5-27 13:32:17 | 显示全部楼层
感觉你被带到沟里了。

你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。

那么, ...
jarlyyn 发表于 2015-5-27 11:46 AM



终于碰到高玩啦,多谢
你是玩js的,我首次接触lua,所以水平很差(其实,所有脚本语言都不会,只是听说lua比较简单,现学现用啊)
虚拟机vm什么的,不懂,不过估计也超出我的能力,不考虑先

/callback事件是指什么意思?
我现在有个wait.regexp,如你所说,用来取代触发的
只是一个协程只能有一个wait.regexp存在,除非用“|”符号来增加选项,否则必须用到协程才能并发。
其实我的协程并不多,七七八八的算下来,估计也就20个左右。扣除10个左右完全用来查状态的不做任何实质操作,不需要考虑异步的以外,同时运行的一般来说只有2-3个,偶尔有些计时用的可能用到。

但即使只有两个协程,也存在可能互相打断的情况啊......
画图不是很确定,我一会试试画个简单的图好了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-27 13:49:53 | 显示全部楼层
本帖最后由 ltblue 于 2015-5-27 02:09 PM 编辑


这里补充一下
由于杀手可能不同时来(大概只有1%的概率吧),所以即使打架结束,在”送信“的模块,也有可能再碰到杀手,所以”防备杀手“协程一直开启,直到送信结束才关闭。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-27 13:52:26 | 显示全部楼层
感觉你被带到沟里了。

你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。

那么, ...
jarlyyn 发表于 2015-5-27 11:46 AM



上面是我一个送信任务的简单示意图
不算主协程的话,大概是3个协程。
协程的主要作用,就是修改主协程的进程,在不知道主协程的状态的情况下,让主协程有所行动

比如第一个协程,就是个计时器,就是当跑路了50秒后,不管跑到哪里,告诉主协程停下。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-27 13:53:47 | 显示全部楼层
本帖最后由 ltblue 于 2015-5-27 01:58 PM 编辑
感觉你被带到沟里了。

你现在做的是触发这一块,也就是说,你在试图取代mc的trigger这个部分。

那么, ...
jarlyyn 发表于 2015-5-27 11:46 AM


这个协程的代码如下:

        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就取消了,省着看的乱
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-27 14:14:07 | 显示全部楼层
上面是我一个送信任务的简单示意图
不算主协程的话,大概是3个协程。
协程的主要作用,就是修改主协 ...
ltblue 发表于 2015-5-27 01:52 PM


不明白你为什么要协程,协程为什么要让主程序停下。

如果是我的话会记录一个 开始时间,然后设置合适的主程序入口(比如进入新房间),如果当前时间-开始时间超过50秒则不执行后续(停下)
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-27 14:35:08 | 显示全部楼层
不明白你为什么要协程,协程为什么要让主程序停下。

如果是我的话会记录一个 开始时间,然后设置合适 ...
jarlyyn 发表于 2015-5-27 02:14 PM



如果那样的话,事情就很麻烦啊
因为跑路不代表一直在跑路,还可能在渡船上等,可能在河边打坐,可能在某个迷宫里,等等
如果那样的话,我的代码里会充满了各种”时间“吧?
更重要的是,打断跑路的可不只有”等时间“这一种情况啊,比如杀手忽然提前来了,又或者被人pk了,或者某个特殊任务刷新了要放下一切去做,又或者不小心被扬州的捕快抓了,天黑了被关在伊犁城里了——等等情况。我总不可能在跑路的每一步,都判断这些所有情况吧?更何况很多情况我现在也不知道,需要后续添加啊
所以我现在的做法大概就是在主协程中加入判断:”有没有特殊情况发生?有的话,放下当前工作,返回任务分配表“。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-27 14:37:23 | 显示全部楼层
不明白你为什么要协程,协程为什么要让主程序停下。

如果是我的话会记录一个 开始时间,然后设置合适 ...
jarlyyn 发表于 2015-5-27 02:14 PM



另外,我的”跑路模块“,我是说基础的那个,本身的作用就是跑路,就是行走,他不知道自己走过去要干什么,目前处于什么状态,这些统统都不知道。他的作用就是”跑路“,目前我只是很麻烦的加了一个”别跑了,赶快停下“的功能罢了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-27 14:51:54 | 显示全部楼层
如果那样的话,事情就很麻烦啊
因为跑路不代表一直在跑路,还可能在渡船上等,可能在河边打坐,可能 ...
ltblue 发表于 2015-5-27 02:35 PM



所以你需要的是做一个状态系统的模块……不用和异步/回调干架……
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-27 15:55:07 | 显示全部楼层
回复 28# jarlyyn


状态系统模块是什么意思?
当前状态吗?
我有这个模块啊
包括游戏内的状态(比如气血什么的)
任务状态(任务清单,哪些需要做,优先级是多少)
以及一些特殊的状态(比如是否被打断了,如果是的话就无条件返回上一级函数,直到返回顶层函数为止)
不懂你的”状态系统模块“是指什么
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-27 16:02:38 | 显示全部楼层
回复  jarlyyn


状态系统模块是什么意思?
当前状态吗?
我有这个模块啊
包括游戏内的状态(比如气 ...
ltblue 发表于 2015-5-27 03:55 PM


那然后,理论上每走一步就检查下状态系统就可以了啊。

如过这样做耗时太多,就是怎么想办法做缓存的事情了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-24 04:36 PM , Processed in 0.009983 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表