脚本系统
地图格子脚本
脚本系统 控制一个格子能不能显示,以及进出格子时要发生什么 地图里的每个格子都可以配 3 类脚本:`显示需求脚本`、`离开脚本`、`进入脚本`。它们分别负责“能不能看到 / 走到”、“离开时做什么”、“进入后做什么”。 # 先记住这 3 类脚本 脚本 用途 显示需求脚本(js_n) 这个格子现在能不能显示,正
脚本系统
控制一个格子能不能显示,以及进出格子时要发生什么
地图里的每个格子都可以配 3 类脚本:`显示需求脚本`、`离开脚本`、`进入脚本`。它们分别负责“能不能看到 / 走到”、“离开时做什么”、“进入后做什么”。
# 先记住这 3 类脚本
| 脚本 | 用途 |
|---|---|
显示需求脚本(js_n) |
这个格子现在能不能显示,正常移动时能不能过去 |
离开脚本(js_c) |
离开当前格子时触发 |
进入脚本(js_g) |
进入目标格子后触发 |
# 1. js_n 适合做什么
js_n 最适合做:
- 迷雾解锁
- 黑暗区域需要道具
- 某章节前不能看到某个格子
- 某条件达成后才允许正常移动过去
# 最简单的写法
return player.getPro("火把") >= 1;
# 再复杂一点
const levelEnough = player.getPro("等级") >= 5;
const storyEnough = player.getPro("主线阶段") >= 2;
return levelEnough && storyEnough;
# 最重要的理解
js_n 更适合只做判断。
发奖励、跳剧情这类联动,通常会写在 js_c 或 js_g。
# 2. js_c 适合做什么
js_c 会在离开当前格子时触发。
常见用途有:
- 离开营地时扣体力
- 离开安全区时清掉临时状态
- 离开某地点时写一条日志
# 例子
player.addPro("体力", -1);
或者:
player.setString("当前位置说明", "你已经离开了营地。");
# 3. js_g 适合做什么
js_g 会在进入目标格子后触发。
常见用途有:
- 第一次进入某地时显示说明
- 进入区域后刷新当前区域文本
- 自动触发一个事件
- 进入新地点后切换提示内容
# 例子
let current = tools.getMapGrid("主地图");
if (current?.name) {
player.setString("当前位置说明", current.name);
}
# 4. 这几个操作都会触发格子脚本
地图里常见的几种移动方式都会和格子脚本联动:
- 玩家正常点击移动
tools.moveMapDirection(...)tools.jumpMapGrid(...)tools.resetMap(...)
但它们的检查强度不完全一样。
# 5. 正常移动和强制跳转的区别
# 正常移动
- 会检查地图邻接
- 会检查
js_n - 会触发
js_c和js_g
# jumpMapGrid(...)
- 不检查邻接
- 不检查
js_n - 但仍然会触发
js_c和js_g
# resetMap(...)
- 会直接回到起点
- 不检查
js_n - 也会触发
js_c和js_g
所以:
- 想按正常走路规则移动,用
moveMapDirection - 想做传送,用
jumpMapGrid - 想回到起点,用
resetMap
# 6. 地图脚本附带的信息
地图格子脚本里,常见可以从 tools.kwargs 里拿到这些信息:
mapIDmapNamecurrentGridIDcurrentGridNametargetGridIDtargetGridNameaction
其中最常用的是:
currentGridIDtargetGridIDaction
action 常见会是:
movejumpreset
# 例子
if (tools.kwargs.action === "reset") {
tools.showNotify("地图已重置");
}
# 7. 常用地图方法
# 读取当前格
let current = tools.getMapGrid("主地图");
if (current?.name) {
player.setString("当前位置说明", current.name);
}
# 按方向移动
tools.moveMapDirection("主地图", "right");
# 直接跳到某个格子
tools.jumpMapGrid("主地图", "废弃仓库");
# 回到起点
tools.resetMap("主地图");
# 8. 常见分工
js_n:这个格子现在能不能看到、能不能正常过去js_c:离开这里时顺手做什么js_g:进入这里后顺手做什么
这样看起来更清楚,也更容易排查联动顺序。
# 9. 发奖励这类联动更常写在哪里
像下面这种“判断里顺手发奖励”的写法:
player.addPro("金币", 10);
return true;
如果要发奖励、播提示或推进剧情,更常见的做法是把它们写进 js_c 或 js_g,因为 js_n 可能会被反复读取。
# 使用时要注意的几件事
js_n适合判断,不适合顺手做结算。jumpMapGrid和resetMap不会走js_n的拦截。js_c/js_g更适合做记录、提示和联动。- 地图移动后的说明内容,常常适合写进动态字符串再显示。
# 下一步
如果你的地图或剧情还接了 AI,可以继续看 AI智能体脚本。