北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
12
返回列表 发新帖
楼主: yisr

【mudlet】事件系统设计

[复制链接]
发表于 2024-8-28 15:26:26 | 显示全部楼层
yisr 发表于 2024-8-28 03:01 PM
感谢杰哥!!!
把我的需求都已经写出来了。哈哈。
学习!学习!学习!

我就说说我自己的机器体系用下来的的体会吧。

我这个机器主打的是状态机模式,

https://www.pkuxkx.net/forum/thread-48864-1-1.html

但实际用下来发现还是有点太僵化了。但我也完全不想玩北侠了,所以也没心思重构了。

我这个框架的经验有3点

1.自我认同的 有效的策略配置:

https://www.pkuxkx.net/forum/thread-48870-1-1.html

参考这个。

策略配置是个很重点的问题

2.觉得还有不足的遍历移动模块:

这个我做的时候还是抽象不足。

而且为了做阉割版本,遍历模块做的有点糟心,必须有固定路径。

其实后后面还做了另一个版本的,但两个遍历不同模式有点恶心。

这个我这个机器主要是做了 路径的动态生成,就是指定区域或指定房间,能膨胀N格后,动态生成遍历的路径。(上一个机器是路径多重标签,delay设置)

但现在觉得应该指接遍历房间,而不是路径。因为房间可能会进不去,这时候之前把进不去的路径或房间临时排除就好。

迷宫系统我能放到遍历里去,但不够抽象,算无功无过。

3.觉得还有不足的状态管理

对于足够模块化的机器,各种组件的生效不是问题,失效才是核心。

我最一开始的思路是都用状态机来处理,由当前状态负责各种操作。在实际开发的时候觉得还是不够的,然后扩展了 OnRoom系列和OnQuest系列。

现在让我重构的话,我会分成很多不同的Layer。

每个Layer代表对一作用域,比如Global,Quest,Walk,Status,Combat。

每个Layer有一个唯一的Context。所有的触发/计时/事件/超时都要注册到对应的Layer的当前Context里。

实际上我那个eventbus库有个forward功能,就是为了把事件转发到不同的Layer里去的。


Context失效或者替换的话,所有注册到Context的组件直接失效。

极端化的话大部分Layer的Context都应该有默认超时事件,超过事件自动失效。

这个才更,怎么说呢,俗点叫优雅,按我的话是看了代码让我从头到脚一股舒服。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 08:42 PM , Processed in 0.009110 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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