区域.yml
区域.yml 用来定义副本里的空间区域。
房间边界、战斗区范围、Boss 房、奖励区、进入某片区域后的专属处理,主要都在这里配置。
这页重点是把空间逻辑和流程逻辑分开。
阶段.yml负责流程推进区域.yml负责空间边界和区域专属脚本
区域最常拿来做什么
- 划分房间和战斗区
- 控制区域状态
- 给玩家传送到某个区域出生点
- 在进入或离开某片区域时执行脚本
- 给怪物组提供刷怪点
先看一个标准示例
yaml
战斗区:
显示名称: '前厅战斗区'
世界: 当前
初始状态: 解锁
范围:
点1: '-10,60,-10'
点2: '10,80,10'
出生点: '0,65,0,0,0'
进入脚本: |
消息.发送("&e你进入了前厅")
离开脚本: |
消息.发送("&7你离开了前厅")
刷怪点:
中心: '0,65,0'
左侧: '-4,65,3'
右侧: '4,65,3'
Boss房:
显示名称: 'Boss 房'
世界: 当前
初始状态: 锁定
范围:
点1: '20,60,-10'
点2: '40,80,10'
出生点: '30,65,0,180,0'字段说明
显示名称
不写也能用,默认就是区域 ID。
建议正式副本还是写上,后面做提示和日志时更好认。
世界
默认值是 当前。
大多数副本都直接写:
yaml
世界: 当前源码也兼容 current。
初始状态
当前支持四种状态:
锁定解锁激活已清除
源码默认值是 锁定。
最常见的开局写法只有两种:
- 开场就能进的区域:
解锁 - 后面才开放的区域:
锁定
范围
按源码当前实现,推荐写法是:
yaml
范围:
点1: '-10,60,-10'
点2: '10,80,10'系统会自动按两点算出整个立方体区域。
坐标顺序不用纠结大小,源码会自己取最小值和最大值。
出生点
用于把玩家传送进这个区域。
写法:
yaml
出生点: '0,65,0,0,0'前 3 个是坐标,后 2 个是朝向和俯仰。
如果你后面会用 区域.传送(...) 这类动作,最好都把出生点补上。
进入脚本 与 离开脚本
这两个脚本属于区域自己的专属脚本。
最适合写:
- 玩家进房提示
- 区域专属机关
- 进入某片区域时开演出、播语音、切状态
- 离开区域时清理某个临时效果
和全局 事件绑定 -> 区域进入 的区别在于:
- 区域自己的
进入脚本 / 离开脚本拿得到更明确的区域切换上下文 - 全局
事件绑定更适合做整队广播、全局统计、公共反应
源码当前会额外放这两个变量:
from_zoneto_zone
所以区域脚本里可以直接按区域切换来写逻辑。
刷怪点
区域里可以提前定义一组命名刷怪点:
yaml
刷怪点:
中心: '0,65,0'
左侧: '-4,65,3'
右侧: '4,65,3'这类点位更适合给怪物组、演出、传送做复用,后面比手写坐标好维护得多。
连接
区域之间还能配置连接关系。
写法是列表:
yaml
连接:
- 目标: Boss房
条件: '副本.读取变量("Boss房已开放") == true'
提示: '&cBoss 房尚未开放'这更适合拿来做区域之间的通行门槛。
区域状态流转
区域状态最常见的流转是:
text
锁定 -> 解锁 -> 激活 -> 已清除按源码当前实现:
区域解锁事件在锁定 -> 解锁时触发区域清除事件在激活 -> 已清除时触发
所以区域状态最好按流程一步步推,不要随手乱跳。
什么时候写在区域里,什么时候写到事件绑定
优先这样分:
- 只和这个区域本身有关的,写在
区域.yml - 会影响整队或整场副本的,写在
main.yml -> 事件绑定
适合写在区域里的:
- 进入房间后给玩家单独提示
- 离开某片危险区后清 Buff
- 进入某片区域后触发局部剧情
- 这个区域自己的出生点和刷怪点
适合放在全局事件里的:
- 全队播报“已进入 Boss 区”
- 记录全局进度
- 统一播放音效、统一刷提示
推荐拆法
用区域管理空间,用阶段管理流程
推荐思路:
区域.yml只定义房间边界、状态、进入离开脚本、刷怪点阶段.yml决定什么时候解锁、激活、清除这些区域
这样后面改流程时,不用反复改坐标;改地图时,也不会把阶段逻辑搅乱。
一个区域只表达一个明确用途
例如:
前厅战斗区_第一波Boss房奖励区
区域名越清楚,后面脚本越好读。
玩法示例
比如你要做“进入暴雪区后给玩家提示,离开后清提示”的处理,可以直接写在区域里:
yaml
暴雪区:
显示名称: '暴雪区'
世界: 当前
初始状态: 解锁
范围:
点1: '-30,60,-30'
点2: '30,90,30'
出生点: '0,65,0,0,0'
进入脚本: |
消息.发送("&b你进入了暴雪区")
离开脚本: |
消息.发送("&7你离开了暴雪区")如果你还要在这个区域解锁时给全队播报,再把公共提示写进 main.yml -> 事件绑定 -> 区域解锁。
配置建议
- 第一个版本先只画关键区域,不要一上来切得太碎。
- 范围宁可略大一点,也不要把战斗空间切漏。
- 每个需要传送的区域都补上
出生点。 - 刷怪点统一命名,后面怪物组和脚本会省很多事。
- 区域专属逻辑尽量留在区域里,不要所有东西都绕去全局事件。
常见问题
区域相关脚本没反应
先检查:
范围.点1和范围.点2是否写对世界是否和实例世界一致- 玩家是否真的完成了跨区域移动
- 这段脚本是不是应该写在区域里,而不是误写到全局事件里
区域解锁了,但玩家没感觉
区域状态变化本身未必自带可视效果。
通常还要配合这些内容一起写:
- 门或障碍物变化
- 全息提示
- 消息播报
- 怪物生成
传送到区域失败
最常见的问题是:
- 区域没有写
出生点 - 区域还是
锁定 - 世界名写错