状态与数据
静态表格与动态表格
用静态表格维护项目配置,用动态表格保存玩家过程数据。
状态与数据 · 表格
表格类型决定数据是否能写入和保存
静态表格随项目发布,脚本只读;动态表格以项目默认数据初始化,并在玩家存档中保留后续修改。
# 先选择表格类型
| 类型 | 权威来源 | 脚本能力 | 适合内容 |
|---|---|---|---|
| 静态表格 | 项目工程数据 | getData |
掉落权重、等级曲线、固定对白、配置矩阵 |
| 动态表格 | 玩家存档,首次由项目默认表初始化 | getData、setData |
行动日志、AI 输出、玩家选择、过程记录 |
项目更新动态表格行列时,运行时会保留已有玩家数据并同步表格结构。不要随意改变行列含义;结构迁移仍需要验证旧存档。
# 再选择单元格类型
number:权重、倍率、价格、次数和其他数值。string:文本、标记、JSON 字符串和长说明。
一张表只有一种单元格类型。需要混合结构时,可以拆成两张表,或在字符串单元格保存经过校验的 JSON。不要把来自玩家、AI 或联网的字符串直接作为可执行脚本。
# 脚本读写
const config = player.getTable("遭遇配置");
const weight = config.getData("狼群", "权重");
const log = player.getTable("行动日志");
log.setData(0, "内容", tools.tr("进入森林"));
getData(row, col) 支持行列名称或索引。只有动态表格暴露 setData。脚本还可以读取 dataType、tableType、rowNames 和 colNames,用于校验结构。
# 纯 AI 模式怎样描述表格
创建静态数值表“探索掉落”:
行是资源类型,列是权重、最小数量、最大数量。
权重必须为非负数;空值按 0 处理。
搜索控件脚本只读取该表,不在运行时修改配置。
对于动态表格,还要说明最大使用范围、清理策略和存档兼容。例如行动日志是否循环覆盖、是否允许无限增长、旧版本新增列怎样初始化。
# 大表的性能边界
- 不要在每帧事件或渲染布局刷新中扫描整张大表。
- 先按明确行列读取,或在低频行为脚本中建立索引。
- Canvas frame 只消费已经准备好的小型快照。
- 大量同构且需要独立生命周期的实体应使用对象,不是动态表格。
- 需要公开查询其他玩家数据时使用弱联网,不要把完整动态表格上传。
# 传统模式维护
传统作者可以新增、插入、删除行列,编辑多行字符串,复制单元格引用 ID,以及导入/导出数据。改变行列前先检查脚本中的名称和索引引用;使用索引的脚本在中间插行后最容易失效。
# 验收
- 静态表格在脚本中不可写。
- 动态表格写入后保存、刷新仍保留。
- 行列名称与脚本引用完全一致。
- 缺失单元格有明确回退,不出现
NaN或无意义空文本。 - 新旧存档都能处理新增行列。
- 页面和高频循环不会全表扫描。