北大侠客行MUD论坛

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

我好像误入歧途了

[复制链接]
 楼主| 发表于 2015-4-21 13:22:48 | 显示全部楼层
回复 5# jarlyyn


我有点明白你所谓状态机的概念了
游戏中,每个模块(任务,打坐,等待,渡河),都有各自的过程,各自的状态
你的mush里的触发,只做变量上的调整,不直接对游戏进行操作,甚至不通过lua来对游戏进行直接操作,而是通过修改各种变量(也就是状态),让lua根据当前处于的各种不同状态来进行相应的操作。
是不是这么个意思?
但这样我不理解,在某个状态下,总有一个监控状态的lua在运行,然后根据不同状态来调用不同的函数(或者说模块)吧?而这个lua是一直运行的吗?根据什么触发的呢?难道是.*?又或者是个计时器?

传统来说,zmud的思路,是一环扣一环,触发-命令-触发,这么来的
你的做法是触发-改变量-检查变量-操作。检查变量是怎么做到的?我没想通

至于你说的那个什么库啊什么的......我根本不是程序员,lua是对着手册写的......
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 13:26:06 | 显示全部楼层
回复  jarlyyn


我有点明白你所谓状态机的概念了
游戏中,每个模块(任务,打坐,等待,渡河),都有 ...
ltblue 发表于 2015-4-21 01:22 PM

异步是个大坑,慎入。

以mud来说,一般是这样。

维护一个大的数组,表明了mud中所有的状态。包括血/经验/任务等。
绝大部分的触发器做的就是更新这个数组。

然后通过一个出发来出发检查状态。我的机器里是busy test,检查是否忙。

当不忙的情况下,检查所有状态,并进行相应的操作。

其实人脑玩游戏,做的也是这么个流程。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 13:36:34 | 显示全部楼层
回复  jarlyyn


但是,我这么写,好像要想在等待的时候打坐,就很麻烦:又要保证能打坐,又要保证能随 ...
ltblue 发表于 2015-4-21 01:03 PM

实际上这没有什么野路子不也路子的问题。程序这玩意是跳跳大路通罗马的,不同的框架,模型都有很多。

其实上你要能够归纳一下。

不能乘船,不能跨江,能力不足之类,归跟到底是错误。就是看你怎么去做相应的错误处理了。

以我的代码为例

https://github.com/jarlyyn/helllua/blob/master/mods/walk.mod

我当年的所有代码都是以do_动作名(参数,成功后续,失败后续)来做的。

walk["stepfail"] 这个函数就是用来处理意外状况的。

6年前的代码了,当年也是个野路子,很多写法结构可能不够先进。

但整体框架还是没啥大问题,可以自洽的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 13:47:53 | 显示全部楼层
回复 12# jarlyyn


    问一下,所谓的”异步“是什么概念?我有”异步“的倾向吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 13:50:37 | 显示全部楼层
回复  jarlyyn


    问一下,所谓的”异步“是什么概念?我有”异步“的倾向吗?
ltblue 发表于 2015-4-21 01:47 PM



    协程也好,wait也好,其实都是异步的。

就mud机器人本身来说,其实本质也是异步的……

异步的概念就是,代码并一定是按顺序执行完的,而是等到某个情况下再继续执行下一步的程序。

这样的话可能有多个任务同时执行,并被挂起的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 13:52:32 | 显示全部楼层
有船不坐,你想扮Cool啊?
就打开打坐类(#t+的那种),然后同时打坐,同时等待这句
艄公们把踏脚板收了起来,长篙一点,渡船向江心驶去。


这句话的思想其实就是在等船中间插入了一个打坐模块。。wait里你也可以做的。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 14:07:33 | 显示全部楼层
另外提醒一句。

如果用状态机模式做的机器人,在pkuxkx应该有政策上的问题。

我并不在这里玩,写机器人的乐趣也远大于玩游戏的乐趣。所以这点对我没影响。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 14:18:50 | 显示全部楼层
回复 15# jarlyyn


如果是这样的话,异步不是必须得做吗?
因为我其实必须同时做很多事情啊
我渡河的时候,必须得看有没有杀手来,不可能渡河的时候只渡河,其他不管,那就完蛋了......
这么说的话,异步这个坑非走不可啊

就算是所谓”状态机“,你也得同时兼顾很多状态,渡河模块处于什么状态,杀人模块处于什么状态,饮食情况处于什么状态,身上的钱够不够等等
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 14:21:57 | 显示全部楼层
回复  jarlyyn


如果是这样的话,异步不是必须得做吗?
因为我其实必须同时做很多事情啊
我渡河的时 ...
ltblue 发表于 2015-4-21 02:18 PM


这些和异步是没关系的。

异步是要同时。比如你会边walk边大家么?边打坐边买东西么……

不会。

所有的意外都是一个错误。

然后由意外处理程序进行处理。

cancel当前活动,重新判断状态机。

是否处于战斗状态也是状态机的一部分。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 14:23:51 | 显示全部楼层
回复 16# cappuccino


wait里怎么做呢?
举例子:
我想在等船的时候打坐,船一到就上船,船没到,打坐一次结束继续下一次打坐

我必须同时等待两个信息:打坐结束和船到了

如果用触发,我可以分别有两个”类“触发,一个是打坐的,一个是等船的
打坐的负责专心打坐,等船的负责改”船到没到“的变量,如果
打坐结束的时候,船到了=0,则继续打坐
打坐结束的时候,船到了=1,则关闭打坐模块,进船
大体就这么个情况吧,也可以用halt打坐直接进船

如果用lua的wait,我怎么wait?用
船到了|打坐结束吗?两个用或者等?然后如果是一个就这么做,否则那么做?
那这两个模块不就到一起了吗?打坐模块无法独立出来。
又或者wait有其他用法?
请教,多谢
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 11:36 PM , Processed in 0.010222 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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