北大侠客行MUD论坛

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

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

[复制链接]
发表于 2015-5-31 06:08:13 | 显示全部楼层
本帖最后由 littleknife 于 2015-5-31 06:12 AM 编辑

1、不要太拘泥于细节,以结果为导向。即如果认为某些地方需要深入研究,可以先记录下来等有时间了在研究,把主要几个支撑模块(打坐吐纳模块、行走模块、学习修炼模块、战斗模块、任务总控制模块)做好,这样基本自己的框架就做好了。然后特定的某个任务模块(应用层),就依据上面的几个已经做好的模块进行设计(先进行流程设计,然后进行代码书写)即可。
2、一个函数在Lua里就是一个值,只不过这个值是用算法算出来后返给函数名而已。因为是个值,所以可以做各种参数。比如函数的参数function a(b,c,d,e)....end ;function b() print("okok") end 等等。
3、wait是个书写协程的模块。我认为最好的应用机器还是尊重任务顺序,即任务流程来进行。同时考虑各种状态的监控来完成特殊的需要。

就想到这么多,希望能对楼主有些参考。
至于对我的那个帖子(一个脚本)如何看,请不要拘泥,因为好多的Mush高手都有自己的思路来写机器。所谓条条大路通罗马,我的这个思路也许很笨甚至很没效率,越深入也许发现自己的好多方法来得更效率,请果断抛弃。此贴只是一个思路和自身学习笔记罢了。。呵呵。。祝楼主玩好~~~。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-5-31 12:00:59 | 显示全部楼层
1、不要太拘泥于细节,以结果为导向。即如果认为某些地方需要深入研究,可以先记录下来等有时间了在研究,把 ...
littleknife 发表于 2015-5-31 06:08 AM



啊,亲自来了啊,哈哈
1.目前模块部分,地图画完了,行走、打坐吐纳模块完毕了,战斗模块框架起来了,简单的战斗已经能运行了,任务模块目前刚搭起来半个任务,主控制区域基本写完了(任务主控制模块没几句话),目前已经能完成半个任务了,后面的还没写。主要在自身懒,比如昨天玩起来欧陆风云4,就没写,呵呵。
2.函数名作为一个变量?可以直接调用是吧?
比如
function aaa(text)
print(text)
end

function b(bbb)
bbb("ok")
end

function c()
b(aaa)
end

这样运行c(),就能打印“ok”了是吧?
就是函数c中,以函数aaa作为参数,调用了b函数,在b函数中,bbb参数就意味着aaa函数,然后bbb("ok")意味着aaa("ok"),然后打印出“ok”来,是吧?
如果这样的话,我的主控函数可以稍微改一下了,可以把“当前任务函数”作为变量进行运行,而不用“当前任务名称”作为变量了。


3.老实说,真写起来,我才发现一直用wait的确很坑啊......我又努力控制自己make协程的数量,能不用协程就不用,这样相当于zmud里严格控制每一个触发器的开关,有些可以冗余的东西都用不了了。
还是觉得,每一个wait.regexp都代表一个“触发器”,我相当于不停的新建触发器,关闭触发器等等。

其实我这个帖子的核心问题就在于:zmud的触发器可以互相关闭,比如被pk了,被pk的触发器可以瞬间关闭其他所有的“触发器组”,专心处理pk。
但mush的wait就不行,协程只能自己关闭自己,不能关闭别人,yield这东西又不靠谱,所以一旦被pk,我得让其他所有的协程,至少是主协程,必须瞬间return回主函数,并等待才行,所以这样的问题才有问题啊......
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-5-31 13:33:10 | 显示全部楼层
什么叫“有些可以冗余的东西都用不了了”
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-5-31 17:38:36 | 显示全部楼层
什么叫“有些可以冗余的东西都用不了了”
cappuccino 发表于 2015-5-31 01:33 PM



最简单的,比如hp抓变量吧
zmud里用触发,比如hp一共6行数据,写6个触发,ok了
mush用wait.regexp来做,难道能用6个协程吗?
如果你只用一个协程,那是用|吗?那还相当于6个......
反正总觉得,zmud里可以同时存在很多个开着的触发,而mush里同时运行的wait.regexp数量应该少得多,都是用什么拿什么,不用的就关掉,这样zmud里就有更多的冗余,而mush则必须精确
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-5-31 20:06:01 | 显示全部楼层
最简单的,比如hp抓变量吧
zmud里用触发,比如hp一共6行数据,写6个触发,ok了
mush用wait.regexp来 ...
ltblue 发表于 2015-5-31 05:38 PM


呃,没必要用6个wait.regexp啊

wait.make(function()
                run("hp;set no_more checkhp end")
                local l,w=wait.regexp('≡─────────────────────────────────≡')
                while true do
                        local l,w=wait.regexp(".*")
                        if string.find(l,'no_more = "checkhp end"') then break end
                        table.insert(r,l)
                end
                local re = rex.new("^【 精 气 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+\\(\\s*(\\d+)\\%\\)\\s+【 精 力 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+\\(\\s*\\+(\\d+)\\)【 气 血 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+\\(\\s*(\\d+)\\%\\)\\s+【 内 力 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+\\(\\s*\\+(\\d+)\\)【 食 物 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+【 潜 能 】\\s+(\\d+)【 饮 水 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+【 体 会 】\\s+(\\d+)【 等 级 】\\s+(\\d+)\\s*/\\s+(\\d+)\\s+【 经 验 】\\s+(\\d+).*$")
                hp_str = table.concat(r)
                _, _, m = re:match(hp_str)
......
        end)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-6-1 10:35:50 | 显示全部楼层
最简单的,比如hp抓变量吧
zmud里用触发,比如hp一共6行数据,写6个触发,ok了
mush用wait.regexp来 ...
ltblue 发表于 2015-5-31 05:38 PM


把hp放入模块化思考 你就明白其实很简单了 不用什么都非要触发
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-6-1 10:37:10 | 显示全部楼层
没看懂,我想想哈
qu_gold的参数里,gold和bank无所谓了,f是一个函数名,换句话说是以一个函数为参 ...
ltblue 发表于 2015-5-29 01:10 PM


这个就是最简单的模块化封装,比如你书剑过河没钱,那么可以去取钱然后继续完成过河
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-6-1 15:13:14 | 显示全部楼层
这个就是最简单的模块化封装,比如你书剑过河没钱,那么可以去取钱然后继续完成过河
silvent 发表于 2015-6-1 10:37 AM



虽然我书剑都是渡江的,不过大体意思我应该理解了
比如去神龙岛,我需要钱,如果没钱的话,我就会首先把取钱函数打开,优先级做大,然后走路任务return掉,回到任务分配函数(主函数,用于分配任务),然后根据优先级,就会去取钱,取钱结束后,取钱模块关闭,回到任务分配函数,由于去神龙岛任务还在,所以会分配再次去神龙岛,任务就跟上了。
我目前就是这么做的
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 11:23 PM , Processed in 0.012278 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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