关于 rpgjs-studio
rpgjs-studio 是用于管理 RPGJS Studio 实例内容的 Skill,面向处理游戏项目数据的工作流。它涵盖数据库、地图、事件和媒体 API,并说明生成与额度确认流程。
主要功能
- 01RPGJS Studio REST API 指引
- 02游戏数据库与事件操作
- 03地图生成工作流
- 04媒体生成与计费指引
- 05本地项目上下文管理
适用场景
- 01创建或更新游戏记录
- 02生成地图并检查进度
- 03确认额度后生成媒体
- 04检查或编辑事件内容
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ rsamaium/ rpg-js --skill rpgjs-studio安装后在 Claude Code 中输入/rpgjs-studio确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/blocks.mddatabase.mdevent-examples.mdevents.mdmaps.mdmedia.mdmmorpg.mdproject-env.mdsettings.md详细介绍
RPGJS Studio API 技能
使用此技能对 RPGJS Studio 实例执行内容管理任务。
公开游戏数据库读取会按项目批量解析角色和敌人的外观,同时保留媒体链接和显式覆盖项。有关响应行为,请参阅 references/database.md。
图像和电影生成
创建新角色时,使用 type: "spritesheet" 和 metadata.generationMode: "idle",生成一张透明的 1024×768 图像,其中包含 2×2 网格排列的四种静态姿势(向下、向左、向右、向上),费用为 5 点数。随后 Studio 会打开 /media/apps/character-editor/:id;在此处通过 spritesheet.ai 以闲置图为参考图,创建命名动画,并将其作为单独媒体与基础角色关联。现有的 spritesheet 动画请求仍需 15 点数。请参阅 references/media.md。
在 Studio 编辑器中删除时,使用 references/media.md 中记载的项目范围角色动画端点;该端点会同时移除动画引用和存储的图像。
Base64 参考图支持 MIME 参数;如果签名可识别为 PNG/JPEG/GIF/WebP,则优先采用签名,即使 MIME 标头缺失或不正确(包括 text/xml)。无效的参考图会返回 HTTP 400,并退还启动扣款。
媒体生成会在执行时、入队前扣除按用量计费的 API 密钥点数;估算不会扣款。启动失败会退款,执行最终失败时会通过持久化退款步骤退款。queued 响应仅表示已受理:请轮询返回的实例。有关计费和参考图存储行为,请参阅 references/media.md。
要在事件中播放视频,请使用 show_cinematic 和 { "video": "media-id", "allowSkip": false, "bgm": "pause", "preload": true }。只有 video 是必填项:跳过和预加载默认开启;bgm 默认为 "duck"(音乐音量为 15%)。"pause" 会在之后恢复音乐。相邻的视频区块共用一个叠加层。详情请参阅 references/media.md;无需建立地图与视频的关联。
直接地图生成发布
在 objective 中用用户使用的语言描述所需地图的视觉风格。
生成器会遵循该风格;只有当 objective 未指定风格时,才默认使用高清像素艺术。
地形和墙壁材质会保留概念美术方向。请参阅 references/maps.md;不要在 API 负载中单独添加 style 字段。
如需在没有助手的情况下生成地图,请阅读 references/maps.md 中的持久化工作流和直接进度章节。使用现有的 prepare/execute 端点、明确的点数确认、项目范围的状态和中间预览。只有在收到 finalized: true 和 mapId 后,才能展示已保存的结果。切勿仅凭工作流状态推断生成已完成。安全出生点由上游跟踪,见 RSamaium/RPG-JS#367;不要实现本地碰撞规避方案。
输入
- 检查当前工作目录中是否存在本地
RPGSTUDIO.md文件。 - 如果存在
RPGSTUDIO.md,请将其视为本地项目上下文并首先阅读。 - 使用它找回持久化值,例如:
BASE_URL- 任何其他与 API 使用相关的项目专属说明
- 不要找回、请求或持久化
projectId。API 密钥已限定到 RPGJS Studio 项目,因此请直接处理用户指定的资源。 - 如果不存在
RPGSTUDIO.md,则正常继续。 - 如果用户提供了
BASE_URL,则使用该值。 - 如果用户未指定其他主机,则将
BASE_URL默认为https://rpgjs.studio。 - 从环境变量
RPGSTUDIO_API_KEY中读取 API 密钥。
强制启动工作流
- 在进行任何 API 调用之前,检查
RPGSTUDIO_API_KEY是否存在。 - 检查
RPGSTUDIO_API_KEY时,绝不在终端中打印其值,也绝不在回复中回显该值。 - 如果该变量缺失或为空,停止操作,并告知用户先在
${BASE_URL}/api-keys创建 API 密钥,然后导出RPGSTUDIO_API_KEY。 - 使用以下请求头构建经过身份验证的请求:
-H "x-api-key:$RPGSTUDIO_API_KEY"
-H "Content-Type: application/json"
- HTTP 调用优先使用
curl。只有在有明确理由时,才使用其他 HTTP 客户端。 - 身份验证错误时立即停止。如果 API 返回无效密钥类响应、
401或403,停止任务,并告知用户验证密钥或联系支持团队。 - 只读取与用户任务匹配的参考文件:
references/database.mdreferences/maps.mdreferences/events.mdreferences/event-examples.md
references/blocks.mdreferences/media.mdreferences/settings.mdreferences/project-env.mdreferences/mmorpg.md
本地记忆文件
将 RPGSTUDIO.md 用作当前项目的轻量级本地记忆文件。
- 如果文件存在,在开始时读取。
- 复用其中已存储的值,而不是再次询问。
- 任务完成后,更新或创建该文件,记录执行过程中发现的稳定、非机密上下文。
典型内容:
- 最近使用的
BASE_URL - 对未来调用有用的项目专属约定或备注
不要使用 RPGSTUDIO.md 选择项目。当前的 RPGSTUDIO_API_KEY 已确定目标项目,因此应直接处理用户的请求。
切勿在此文件中存储机密信息。
- 不要存储
RPGSTUDIO_API_KEY。 - 不要打印
RPGSTUDIO_API_KEY。 - 不要将原始机密值复制到日志、终端输出或 Markdown 中。
请求模式
定义一次基础命令并重复使用:
BASE_URL="${BASE_URL:-https://rpgjs.studio}"
curl -sS \
-H "x-api-key:$RPGSTUDIO_API_KEY" \
-H "Content-Type: application/json"
对于写操作,优先使用:
curl -sS -X POST "$BASE_URL/..." \
-H "x-api-key:$RPGSTUDIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{...}'
执行规则
- 先确定资源域,然后加载匹配的参考文件。
- 使用 REST 语义:
GET、POST、PUT、DELETE。 - 创建或更新之前,先解析外键:
- 使用
/api/media?query=<search>搜索媒体。 - 使用
/api/database/:type?query=<search>搜索数据库记录。 - 如果存在匹配的依赖项,复用其返回的
_id。 - 如果未找到,先创建该依赖项,然后继续使用返回的
_id。
- 使用
- 切勿仅为选择项目而调用项目列表端点。API 密钥决定项目上下文。
- 用户要求创建游戏对象时,先发送最小有效载荷;只有任务需要更多字段时才补充。
- 复用 API 返回的 ID,不要猜测 ID。
- 用户在读取、更新或删除任务中提供数据库
_id时,先调用GET /api/database/:type/:id并检查现有记录,再决定有效载荷或报告内容。 - 如果端点结构不确定,先检查相近
GET端点的响应,再根据实时载荷调整。 - 身份验证失败后不要继续。
- 如果缺少的依赖项需要通过 AI 生成媒体,始终先调用统一媒体生成端点,并设置
action: "estimate"。 - 估算后,向用户报告所需额度,并在调用
action: "execute"前征求确认。 - 未经估算和确认,绝不要直接启动 AI 媒体生成。
- 对于
POST /api/maps/generate,应根据references/maps.md执行 AI 地图生成工作流并处理特定端点的失败情况。 - 在最终回复中准确总结已创建、更新或删除的记录。
- 当任务发现诸如
BASE_URL或本地约定等稳定的项目上下文时,将这些非机密信息保存到RPGSTUDIO.md,以供后续运行使用。
Common checks
databasetask: read references/database.mdmaptask: read references/maps.mdeventtask: read references/events.mdevent exampletask: read references/event-examples.mdevent workflow blocktask: read references/blocks.mdmediatask: read references/media.mdsettingstask: read references/settings.mdproject envtask: read references/project-env.mdMMORPG publicationtask: read references/mmorpg.md
Current schema notes
- 已认证的 Studio 会话可以通过
POST /api/mmorpg/publish发布当前项目。发布会先准备好每张地图,再发送任何更新。失败时会返回稳定的code、stage和可选的resourceId;响应约定请参见references/mmorpg.md。GET /api/mmorpg/publication会报告此项目的 MMORPG 是否已成功发布,并提供可游玩 URL。 准备阶段只会为本次发布缓存源读取。面向 RPG-JS #374 的版本化 R2 发布和仅向活跃房间传播功能,已在框架工作目录中实现,并通过MMORPG_PUBLICATIONS集成到 Studio 的本地配置中;发布版本及生产环境集成仍待完成。集成前请先阅读references/mmorpg.md的框架 API 章节。 - 如果角色事件的唯一行为是播放一段对话,可直接将其存储在
onAction触发器的triggers[].typeData.dialogue中,无需区块集合。先解析graphic(spritesheet)和faceset媒体;如果任一类型都没有合适结果,请提出经确认后再生成。如果用户明确拒绝生成faceset,可以省略faceset。如果用户明确禁止生成所有资源,则使用搜索到的、彼此匹配的外观 ID 创建可用事件,并省略缺失的graphic或faceset。 - 对于出售数据库道具的角色,请遵循规范的商店工作流:解析或创建具有正数
price的真实道具,然后创建一个引用其_id的call_shop区块。RPGJS 商店会先扣除价格,再发放道具。不要自行构造选择/金币/道具分支,也不要使用占位资源标识符。 - 地图生成的
followUpPlan.events[]接受可选的像素position: { x, y }。该位置必须位于width * 48乘height * 48的范围内;Studio 会通过紧凑的事件地图上下文验证此位置,并在位置缺失或无效时回退到地图起点。 - 新生成的助手地图会包含持久化描述、可选的源
assistantConversationId,以及包含{ id, title, description, prompt }的followUpPlan.music建议。历史 API 调用方可以省略会话 ID 和音乐建议。 show_text区块可以设置inputEnabled: true;此时必须提供inputVariableId,即接收所提交字符串或数字的数据库变量_id。取消输入时会存储null;有关带类型的输入选项,请参见references/blocks.md。- 地图、事件、区块集合和数据库记录都支持通过现有列表端点中的
query进行多语言语义搜索。可选参数minScore接受0..1,默认值为0.40;有关端点专属筛选条件和响应格式,请参见对应的资源参考。 - 项目环境变量通过需要认证的项目路由管理:
GET /api/projects/:projectId/env、PUT /api/projects/:projectId/env/:name和DELETE /api/projects/:projectId/env/:name。响应会返回普通值;机密值只会显示isSet,绝不能记录到日志或打印出来。 - 可玩角色是
/api/database/actors下的数据库 Actor。公开运行时数据库包含 Actor,公开项目会提供mainActorId,以便新游戏预选项目主角。 - 可玩身份是
/api/database/classes下的数据库 Class。新建 Actor 时必须提供有效的classId;没有classId的现有旧版 Actor 仍可读取。Class 拥有name、description、icon和按等级解锁的skills,而 Actor 拥有外观、属性、背包和装备。分配给任何 Actor 的 Class,在这些 Actor 改派前都不能删除。 - 角色 spritesheet 元数据可以包含
illustration,即透明 4:5 JRPG 角色插画的媒体_id;使用此 spritesheet 的每个 Actor 都会继承该插画。AI 生成类型illustration消耗 5 个积分。 - 数据库创建和更新验证会将非空表单字段的
null视为未提供的值。如果 JSON Schema 声明了default,则会应用该默认值;显式的0值和明确可为 null 的字段会保留。仅包含未提供值的可选对象组,例如{ "hitbox": { "width": null, "height": null } },也会被省略。验证失败的400会在message中使用点分路径标识第一个无效字段,例如{ "message": "parameters.pdef.start: Required" }。 menus.characterSelect用于配置新游戏的 Actor 选择器。它支持通过settings.allActors: true显示所有 Actor,或通过settings.actorIds显示有序的 Studio Actor_id列表。选择内容仅对玩家/存档生效,不会更改mainActorId。- 事件工作流可以通过
call_character_select打开相同的选择器,也可以通过change_class为当前玩家分配 Class。选择器可以显示所有 Actor 或一个有序且不重复的子集,并可选择是否允许取消。应用所选 Actor 会保留已获得的进度;确切的载荷格式请参见references/blocks.md。 - 地图可以公开着色器地形
terrainLayer对象,其中包含version: 1、mode: "control-texture"、像素width/height、tileSize、palette和controlTexture元数据。控制纹理采用 RGBA8 格式;地形调色板索引编码为R + G * 256,可选光照使用B,其中128表示中性,A存储用于像素笔刷笔画的地形遮罩覆盖度。软边缘会在渲染时根据过渡/混合元数据计算。旧版瓦片网格会规范化为tileSize x tileSize区块,但笔刷编辑可以更新控制纹理中的单个世界像素。 - 需要复现 Studio 地形渲染的游戏或编辑器集成必须使用
@rpgjs/render-map2d。在宿主环境中解码地形图像和控制图像,调用normalizeTerrainMap()和prepareTerrainMap(),然后使用renderTerrainRegion()渲染与世界坐标对齐的区域。不要在 Angular、Pixi 或 CanvasEngine 适配器中重新实现道路、地毯、九宫格、水体或形态学像素。 POST /api/map-generations是用于地图创建和编辑、按项目范围限定且需确认的 Cloudflare 工作流。它接受可选的地形/元素集引用,会生成缺失资源、提取语义地形模式、构建地形/形态结构、保留分离的元素位置,并持久化最终地图。请依次执行准备、明确确认和执行,然后轮询返回的实例直至状态为complete;响应包含最终的mapId。失败的终态响应会提供退款/重试标记;只有前一次尝试已退款后,POST /api/map-generations/:instanceId/retry才会启动新实例。定向编辑使用规范化多边形,并会在省略当前资源时继承它们;请参见references/maps.md。- 地图可以公开地形形态结构
terrainMorphologyLayer对象,其中包含version: 1、mode: "terrain-morphology"、像素width/height、tileSize和features[]。每个要素均为{ kind: "hole", params, strokes }或{ kind: "wall", params, strokes };笔画会存储世界像素points[]和radius。洞的参数支持depth、roundness、roughness、可选的立面textureId、可选的底部填充fillTextureId、限制在0..100的fillHeight,以及可选的单洞waveIntensity、waveDirection和waveSpeed;省略的波浪字段会继承地图的waterAnimation值,而waveIntensity: 0会让填充保持静止。textureId不会用作底部填充的回退值。墙的参数支持height、roundness、roughness、可选的立面textureId、surfaceTextureId、trimTextureId、baseTextureId和renderMode: "procedural" | "collision-only";仅碰撞的生成墙会阻挡移动,但其视觉效果交由wallSurfaceLayer处理。wallStyle: "rock"会渲染分层岩壁、岩石边缘和地面接触阴影;Studio 挖掘洞穴时会将其用于覆盖整张地图并通过擦除操作雕刻的墙。Studio 还会在岩壁上存储rockTexture: "masonry" | "natural"(程序化表面纹理,默认值为masonry:切割石材层;natural:不规则的风化岩石面)。如果没有textureId,游戏会像编辑器一样根据墙体遮罩逐像素渲染这些表面:顶部受光、墙脚较暗、最高覆盖开口下方 55%,并在墙基处添加接触阴影。编辑器的墙体平滑度控件对应roughness = 1 - smoothness。渲染器会先将洞/墙遮罩合并为有符号地形级别,再绘制,并将形态笔画合并到地形碰撞中作为阻挡单元格。Studio 编辑器会在绘制时对洞和墙进行互斥处理:在洞上绘制墙会擦除该处的洞(恢复为可行走地面),在墙内绘制洞会擦除该处的墙,因此保存的地图只包含普通绘制和擦除操作。 - 生成的地图可以公开
wallSurfaceLayer,其中包含version: 1、mode: "wall-surface"、地图像素尺寸、materials[]和外部 RGBA8controlTexture。R是从零开始的材质索引,G为0=void、1=top、2=face或3=trim,B保留不用,A为覆盖度。每种材质都会引用专用的顶部、表面和边饰纹理 ID,以及可选的底部 ID。Studio 会以像素级精度渲染这些遮罩,并与墙体碰撞形态一起编辑/撤销。PUT /api/maps/:mapId会通过wallSurfaceLayer和 base64wallSurfaceControlTexture持久化编辑;API 会将 PNG 存储在地图文档之外。 - 地图可以公开
waterAnimation: { enabled, speed, intensity, direction },作为地图级液体动画默认值。direction表示屏幕坐标系中顺时针测量的角度(0向右,90向下),默认值为90。除非洞的参数覆盖这些默认值,否则填充的洞会继承它们;波浪高光会根据各填充区域的局部颜色或纹理生成,而不是使用固定的蓝色色调。 PUT /api/maps/:mapId支持局部更新各个区段。未提供的地图字段会保留,因此建议仅发送已更改的区段:起点位置使用startX/startY,放置内容使用events,生成的墙体几何使用terrainMorphologyLayer加可选的wallSurfaceLayer/wallSurfaceControlTexture,地形/控制纹理使用地形字段,对象使用元素图层数组,媒体选择使用 tileset 参数。- 地图可以公开顶层光照设置
lighting: { sun: { enabled: boolean, intensity: number } }。太阳强度限制在0..1;启用后,运行时/编辑器集成可用它显示墙体、角色和元素的自动阴影。 - 地图可以公开
mapLoadBlockCollectionId: string | null。设置后,GET /api/game/maps/:mapId会将该集合载入mapLoadBlocks,且 RPGJS Studio 运行时会在玩家进入地图时,通过服务器端map.onJoin(player, map)钩子执行这些区块。此工作流具有玩家和地图上下文,但没有当前事件上下文。 - 事件工作流构建器可以使用执行配置档。
eventBuilderProfiles.mapLoad会公开其requiredCapabilities适用于玩家感知型地图上下文的区块,并从兼容的架构中移除当前事件字段选项。 - 地形媒体元数据公开
sourceTexture、直接的rows和columns、textureGrid: { columns, rows, tileSize? }、terrainTextures[]和transitions[]。每个terrainTextures[]条目均为{ id, index, label, collision?, renderTileSize?, renderingStyle?: "pixel-art" | "hd-2d", defaultRenderMode? };index是图集单元格的唯一来源,collision会将绘制的地图单元格标记为阻挡,renderTileSize控制地图编辑器世界像素中的重复纹理尺寸,未提供时默认沿用旧版320图案尺寸,renderingStyle: "hd-2d"会启用地图编辑器的平滑缩放,省略该元数据则保留旧版像素艺术渲染。defaultRenderMode支持hard、fade、nine-slice、water和custom:hard边缘清晰;fade使用width;UI 中的grass edge预设存储为fade,并使用width: 12和curve: "sharp",渲染为草边;nine-slice会存储以源单元格像素为单位的中心区域center: { x, y, width, height },重复该中心区域,并沿每条绘制轮廓投射周围的边框带,同时始终防止渐隐渗漏;water是存储的通用液体模式,会保留图集纹理,同时根据图集单元格颜色生成裁剪色调、岸边深度、静态涟漪和边缘微光,因此熔岩/沼泽/酸液/油不会出现固定的蓝色轮廓;未知的custom模式会回退为边缘高光,除非其shaderKey类似液体效果。transitions[]存储地形 ID 之间的例外规则{ from, to, mode, priority? };它不是生成的 Wang 过渡矩阵。Studio 地形生成默认使用 UI 中的4x4源纹理图集,并直接持久化生成的图集;它不再通过图像处理容器生成 Wang/自动拼接输出。生成请求可以设置metadata.sourceTextureColumns和metadata.sourceTextureRows;Studio 还会发送terrainAtlasColumns、terrainAtlasRows、terrainStyleId和terrainStylePrompt,以便服务器提示词构建适用于着色器的无缝材质图集。元素集(tileset)生成可传递metadata.terrainReferenceImage和metadata.terrainReferenceMediaId,将现有地形图像用作风格兼容性参考;图像数据仅在执行期间使用,不应持久化。 - 可玩角色设置使用
/api/database/actors下的数据库 Actor;项目会在mainActorId中存储所选 Actor 的_id。使用GET /api/database/actors/main和PUT /api/database/actors/:id/main读取或更改主角。Actor 拥有外观、碰撞箱、进度、背包、动画和技能。 - Actor
hitbox: { width, height }使用正数 RPGJS 像素尺寸,省略时默认值为32 x 32。公开游戏项目和离线导出会将mainActorId解析回运行时兼容的hero、animations和skills字段。 - 数据库 Actor 和敌人支持在
animations下使用战斗动画 spritesheet 媒体 ID:attack、hurt、die和castSpell。 - 名为
cast、Cast Spell、castspell、castSpell或castSkill的关联角色动画会解析到规范字段animations.castSpell;明确设置的 Actor/敌人覆盖值仍具有优先权。 - Actor 和敌人会自动继承所选角色精灵关联的 faceset 和命名战斗动画。只有要覆盖这些默认值时,才设置
faceset或单独的animations媒体 ID;请参见 references/database.md。 - RPGJS 入门运行时会在动作战斗中使用这些 spritesheet:攻击动作、伤害/受击反馈、延迟移除死亡角色,以及技能/施法使用时,都可以临时切换到已配置的 spritesheet。
- 数据库敌人通过
behavior支持动作战斗 AI 选项:enemyType、attackCooldown、visionRange、attackRange、dodgeChance、dodgeCooldown、fleeThreshold、attackPatterns、patrolWaypoints和groupBehavior。 - 数据库敌人提供轻量级预览端点:
GET /api/database/enemies/preview?ids=<id1,id2>。如果已知敌人 ID 且只需要_id、name和graphic,请使用此端点,无需列出或读取完整敌人记录。每个请求最多发送 100 个不重复的 ID。 - 默认情况下,
GET /api/events返回旧版事件数组。添加page或limit即可选择分页响应:GET /api/events?page=1&limit=24返回{ data, meta }。分页事件列表默认使用sortBy=createdAt&sortDirection=desc排序,并支持sortBy=createdAt|updatedAt|name、sortDirection=asc|desc、eventType=all|character|enemy|free和assignment=all|assigned|unassigned。 - 数据库 Actor 和敌人支持在
skills下配置按等级解锁的技能获取:{ skillId, level }。 - 数据库技能支持使用媒体 ID 设置
icon、animation和sound。 - 项目设置支持全局
audio.ui语义提示音(navigate、confirm、cancel、open、close、error),供所有原生菜单共用。通用动作战斗默认值位于combatAudio(battleMusic、attack、skill、hit、hurt、die)。这两组设置都在“项目音频”选项卡中编辑。 - 标题画面的背景音乐和图像通过
menus.titleScreen.settings.backgroundMusic和backgroundImage配置。地图不会覆盖战斗音频。数据库敌人可以在audio.combat下覆盖战斗音乐和音源/反应提示音。数据库技能使用sound表示施放音效,使用impactSound表示命中音效;所有音效值都是 Studio 媒体 ID。 - 使用媒体生成类型
image生成完整场景的标题画面或游戏内插画。它会生成不透明、居中裁剪的 16:9 横向媒体记录;这与illustration不同,后者仍是透明的 4:5 角色肖像。请在menus.titleScreen.settings.backgroundImage中使用生成媒体的_id。 - 游戏/运行时代码可以通过
GET /api/game/media/:mediaId读取游戏可用的媒体数据;详情请参见references/media.md。 - 更改媒体类型时,应使用
PUT /api/media/update/:mediaId,而不是仅更新元数据的管理端点;此操作会同步metadata.type和根级type字段。 GET /api/game/maps/:mapId返回的游戏地图响应会尽可能将事件params.graphic、params.faceset、triggers[].graphic和triggers[].faceset载入为媒体对象,并将活动页面碰撞箱公开为event.hitbox: { width, height };运行时响应格式请参见references/maps.md。- 事件工作流区块可以通过
call_common_event和spawn_common_event调用或生成可复用的游戏事件。两者都使用commonEventId;spawn_common_event可以从player、current_event、variable或fixed解析位置。 - 事件页面载荷中的触发器使用
trigger: "player_touch"和trigger: "event_touch"。运行时触发器载荷会将两者都存储为type: "onTouch",并通过typeData.touchTarget: "player" | "event"区分;为兼容性考虑,缺少touchTarget时表示玩家触碰。在事件/事件触碰工作流中,变量和开关区块使用地图变量。仅限玩家的区块会暂时使用当前地图上的第一个玩家作为回退对象,直到实现明确的受影响玩家指定功能。 - 事件页面
hitbox支持 RPGJS 像素单位的{ width, height }。缺少碰撞箱时,运行时默认使用32 x 32。媒体/图形缩放只会改变精灵的显示尺寸,不得改变碰撞箱的宽度/高度。 - 事件页面
options支持directionFix、through、alwaysOnTop和alwaysOnBottom。每次只能使用一个渲染层标记:alwaysOnTop会将事件绘制在附近角色上方,而alwaysOnBottom会将其绘制在附近角色下方。 - 事件工作流区块可以使用
set_hitbox,对$player、$this或地图事件 ID 调用target.setHitbox(width, height)。width和height是正数 RPGJS 像素尺寸,不会按目标图形缩放比例缩放。 - 事件工作流区块可以使用
camera_follow调用player.cameraFollow(target, { smoothMove })。目标通过eventId配合$player、$this或地图事件 ID 解析。smoothMove默认为true;可选的time和ease会创建 RPGJS 支持的高级平滑过渡对象。ease字段是一个下拉枚举,包含linear、easeInQuad、easeOutQuad和easeInOutQuad等常用缓动名称。 - 事件工作流变量写入必须使用公开的
set_variable区块。change_variable仅用于旧版运行时兼容,不得在新载荷中生成。set_variable的valueSource支持constant、variable、random、player_x、player_y、player_direction、map_id、gold、player_id、player_name、level、hp和sp。 对于敌人战斗节奏,请使用references/database.md中记录的每种模式behavior.attackProfiles计时覆盖项;省略的值将沿用引擎默认值。