-
Notifications
You must be signed in to change notification settings - Fork 3
Description
WorldEffect
目标
我们的插件的主要目的是引入 NPC 的概念到 RM 当中
什么是 NPC?
以RM事件为表现形式, 可以交互的游戏对象.
这些NPC将具有额外的特性:
1. 跨越地图
2. 根据不同"状态", 表现不同的运动和交互行为
具体行为可以参考游戏牧场物语
实现路径
核心插件一共有 3 个:
-
事件独立数据和共享
RM 的事件是存储在$dataMap中, 随着地图一起加载
除了独立开关以外的其他状态会随着地图切换而丢失, 比如位置等
所以要引入一套和独立开关类似但支持所有类型数据的存储空间
这个存储空间可以用来记录 NPC 对象的状态, 并被存档系统序列化 -
动态加载事件
NPC 事件不会被重复放置于地图上, 而是会放置在模板地图上作为数据源.
当加载地图时, 我们可以通过分析其独立数据来选择性创建 NPC
应该有很多类似的插件可以实现这种效果, 不过因为其本身并不复杂我倾向于重新造轮子. 这有利于规避授权问题和降低兼容成本 -
引入通过 状态 设置事件页出现条件
就像独立开关无法满足事件需要更多复杂独立状态的需求, 事件页的出现条件也无法满足复杂的事件页出现条件判断的需求.
所以要引入头部注释来引入额外判断
这个原理是插件会在 meet conditions 的时候导入所有的头部注释, 并依次用注册过的正则表达式去匹配
如果匹配成功则会用对应的方法进行判断
其他引入 状态 的插件会通过注册的方式把自己的注释格式和判断方法注入进本插件中.
这样我们就可以设定任意数量的事件页, 每个事件页的移动模式就是该状态下 NPC 的移动模式, 它的事件队列就是发生交互的事件队列
除此之外, 还有其他需要引入的要素
-
更多的 状态
- 时间, 日期 与节气
昼夜, 星期, 月份, 季节, 天气都应该影响 NPC 的行为 - 剧情
游戏的剧情可以是非线性的, 所以要提供网状节点式的状态 - NPC 属性
不足以规划为剧情的一些状态, 或者不需要引入"剧情"而只想实现一些诸如"好感度"一类的概念
- 时间, 日期 与节气
-
更复杂的 NPC 行为
NPC 可能会发生巡逻, 逗留, 小范围的闲逛等等运动行为
还可能和周围的 NPC 间发生互动
这时候可能单纯的事件页中的自主移动已经无法满足我们的需求
所以我们要提供一些脚本插入到移动路线当中, 使其行为更多样化 -
UI 可视化
UI 也许不是本插件的重点, 但是如果可以有的话那是最好的