脚本 API
动态字符串脚本
从当前状态同步生成可翻译的展示文本。
脚本 API · 只读文本
把状态整理成文本,而不是在显示时修改状态
动态字符串脚本每次读取时同步返回最终字符串。它适合状态摘要、对象详情和提示文本;需要保存的玩家输入或 AI 输出应写进“允许修改”的动态字符串。
# 先选择实时生成还是持久写入
| 需求 | 使用 |
|---|---|
| 每次根据属性重新生成 | 动态字符串脚本 |
| 玩家输入后保存 | 可写动态字符串 + setString |
| AI 结果写回并跨存档保留 | 可写动态字符串或动态表格 |
| 固定按钮文案 | 项目 i18n + tools.tr |
脚本模式和“允许修改”互斥。一个内容不能同时是实时函数和持久写入目标。
# 可翻译文本
const hp = Number(player.getPro("生命") || 0);
const max = Number(player.getPro("生命上限") || 0);
return tools.tr("生命:{current}/{max}", { current: hp, max });
保存最终中文字符串不会在切换语言后自动翻译。实时界面文案应在读取时调用 tools.tr。
# 对象详情
const object = tools.kwargs.object;
if (!object) return tools.tr("暂无对象");
return [
tools.tr("名称:{value}", { value: object.getName() }),
tools.tr("等级:{value}", { value: object.getPro("等级") || 0 }),
tools.tr("状态:{value}", { value: object.getString("状态") || "-" })
].join("<br>");
同一个脚本在重复对象控件中会收到不同对象上下文。不要遍历全类后按名称猜当前实例。
# 表格与集合摘要
const table = player.getTable("任务记录");
const value = table?.getData("当前", "摘要");
return value ? String(value) : tools.tr("暂无任务");
大对象列表不要在每次文本刷新时拼接完整 HTML。先在行为脚本中准备小型摘要,或由渲染布局使用重复协议展示。
# HTML 安全边界
动态字符串可以返回受支持的展示 HTML,但运行时会清洗脚本标签、DOM 事件和危险 URL。来自玩家、AI 或弱联网的数据必须按文本展示,不能作为脚本、Canvas 模块源码或可信 HTML 执行。
# 禁止事项
- 属性/对象写入、奖励和扣费;
- AI、弱联网、存档和弹窗;
- 随机产生需要持久保持的结果;
- 返回数字、布尔值、对象或 Promise。
# 验收清单
- 所有路径都同步返回字符串。
- 玩家可见固定文案经过
tools.tr。 - 当前对象缺失、表格缺失和空值都有回退。
- 多次读取无副作用、无随机变化。
- 不可信字符串不会作为可执行源码使用。
继续阅读:文本、图标与动态字符串 和 场景解锁脚本。