SuperAPI AI 工具集

roblox-data

数据与分析

查看项目

更新于 10-16 10:41

技能介绍

用途

当需要编写、更改、调试或审计 Roblox 玩家存档(player saves)时加载本技能。典型触发场景包括:玩家数据持久化、数据结构迁移(migrations)、失败重试、服务器关闭时保存,以及会话所有权(session ownership)管理。

若涉及排行榜、消息传递或世界数据,应加载 roblox-server-data;若涉及 Open Cloud,应加载 roblox-cloud。本技能聚焦玩家存档。

主要能力与要点

数据结构与迁移

  • 在存储玩家状态之前,先定义一个可序列化的模板(serializable template)和一个版本字段(version field)。
  • 对模板做深拷贝(deep-copy),避免嵌套默认值被共享。
  • 迁移(migrate)之后,再对照模板补齐缺失字段(reconcile missing fields)。
  • 按环境划分存储名(例如 PlayerData_Studio),使 Studio 的写入不进入生产环境。

写入与并发

  • 读-改-写操作使用 UpdateAsync;处理节流(throttling)和瞬时错误(transient errors)。
  • 用会话所有权协议防止对同一个 Profile 的并发修改。
  • 使用 ProfileStore 时,按文档使用 StartSessionAsync、Profile.OnSessionEnd、EndSession;正常加载不使用 Steal;临时性的 Studio 写入使用 ProfileStore.Mock。

保存时机

  • 在有意义的变更处和生命周期边界处保存。
  • 仅靠 PlayerRemoving 不足以完成保存;用 BindToClose 完成挂起的工作。

可存储的数据类型

  • 存储基本类型、数组、字典。
  • 先转换 Instances、userdata、函数和循环引用表(cyclic tables)。
  • 校验数值(不允许 NaN/inf)、字符串(utf8.len)和嵌套表:一个坏值会导致整次写入失败。

被遗忘权(RTBF)

  • 在键中把用户 ID 保留为静态子串(如 player_<UserId>),使 {UserId} 删除模板能够匹配。
  • 哈希化或随机化的键会让人工删除变得困难。

读取缓存与配额

  • GetAsync 提供 4 秒本地缓存(DataStoreGetOptions.UseCache,默认 true);验证写入时使用 UseCache = false。
  • 用 DataStoreService:GetRequestBudgetForRequestType 轮询实时余量;配额随并发用户扩展(体验读取:300 + CCU x 40/分钟)。

用户标识

  • 新代码用 player.User(User.Id、DomainType、DomainId)标识用户;UserId 仍然有效,但不要在同一套键方案中混用两种 ID。

相关流程

  • 首次会话追踪见 roblox-analytics §8。
  • 持久化工作流见 references/full.md。

使用方式

本技能通过技能加载机制在满足上述条件时被加载,供编码助手参考其中的规则与检查项。未提供具体安装命令或调用接口。

适用场景

适用于 Roblox 体验中玩家存档系统的设计、实现、评审与排错,尤其是涉及数据迁移、会话锁、生命周期保存和合规删除的场景。

限制

本技能仅覆盖玩家存档,不覆盖排行榜、消息、世界数据与 Open Cloud。官方文档中未提供具体的代码示例、版本兼容范围或定价信息。