关于 roblox-code-review
roblox-code-review 是用于审查 Roblox 代码的技能,按严重程度列出问题并定位到文件和行号。它检查安全、数据处理、生命周期、性能、文本安全及现代 API 用法,并说明影响与修复方式。
主要功能
- 01按严重程度排列审查结果
- 02报告文件、行号、影响和修复方案
- 03检查远程参数验证与安全性
- 04审查数据存储和购买处理
- 05检查生命周期、性能与文本过滤
- 06核对现代 Roblox API 用法
适用场景
- 01发布前审查 Roblox 代码
- 02排查漏洞或数据丢失风险
- 03发现生命周期和性能问题
- 04替换已弃用的 API 写法
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ el4cteo/ roblox-skills --skill roblox-code-review安装后在 Claude Code 中输入/roblox-code-review确认已加载。
附带文件references/deprecated-apis.md
详细介绍
Roblox 代码审查
按严重程度排序进行审查。报告每个问题时说明 文件:行号、严重程度、会导致什么问题,以及修复方案。 对照代码核实结论(不确定时查阅引擎参考)——不要盲目套用模式。
严重程度指南
| 严重程度 | 示例 |
|---|---|
| Critical | 客户端权威的奖励/伤害/货币;未校验的远程参数(NaN、实例伪造);在 ProcessReceipt 之外发放购买或非幂等;多个服务器使用 SetAsync 保存数据且无会话锁定;复制到客户端的代码中含有密钥/API keys;未经过滤的玩家文本展示给他人。 |
| High | 数据丢失路径(没有 BindToClose、加载失败后保存默认数据、没有重试);内存泄漏(连接、以玩家为键的表);InvokeClient;每帧远程调用;无限让出(对可选实例使用无超时的 WaitForChild、可能永久让出的 RemoteFunction 处理器);对流式加载不安全的客户端索引。 |
| Medium | 已弃用/被取代的 API;wait/spawn/delay;轮询循环;服务端 tween;网络/会让出的 API 缺少 pcall;缺少对晚加入玩家的处理;CharacterAdded 上的竞态条件。 |
| Low | 风格、命名、缺少类型、魔法数字、死代码、轻微的低效。 |
检查清单
安全性(roblox-security)
- 每个
OnServerEvent/OnServerInvoke:用typeof检查类型,数字用math.isfinite检查,字符串检查 长度/UTF-8,实例用IsA+IsDescendantOf(trusted)检查,限流,检查上下文。 ReplicatedStorage/StarterPlayer/Workspace中不得有仅限服务端的逻辑、管理员名单或密钥。ProximityPrompt/ClickDetector/Touched处理程序在服务端重新验证距离/状态。- 对玩法至关重要的未固定(unanchored)部件归服务端所有。
数据(roblox-data-stores)
- 会话锁定(ProfileStore 或等效方案);读-改-写使用
UpdateAsync;带退避的重试。 BindToClose并行刷新存档;不得保存Instance/Vector3/混合表。- 加载失败时绝不使用默认值覆盖;玩家键控的表在离开时清空。
- 键保持稳定(
User_{UserId}),Studio 使用独立的存储/宇宙(universe)。
变现(roblox-monetization)
- 单一的
ProcessReceipt;按PurchaseId幂等;仅在持久化后才返回PurchaseGranted。 - 通行证特权在加入时以及会话内购买后检查;价格不得硬编码;付费随机物品
披露概率并遵守
PolicyService。
正确性与生命周期(roblox-architecture)
- 处理已在游戏中的玩家(
for _, p in Players:GetPlayers())以及已生成的角色。 - 每个角色的状态在重生时重建;每个玩家的状态在
PlayerRemoving时清理。 - 模块顶层不得有 yield;不得有循环 require;每个状态只有一个所有者。
- 延迟事件安全(不依赖处理程序同步运行)。
- 客户端代码对流式加载安全(对
Workspace内容使用WaitForChild/nil 检查)。
性能(roblox-performance)
- 不得每帧调用
FindFirstChild/GetDescendants/Instance.new;复用参数对象。 - 事件驱动而非轮询;think 循环限流并错开。
- 补间动画和装饰性效果放在客户端;远程调用批量/限流;载荷最小化。
- 断开连接 / 销毁实例;不得有无界缓存。
文本与安全(roblox-text-chat)
- 所有玩家创作且展示给他人的文本在服务端过滤(
FilterStringAsync),失败时关闭(fail closed)。 - 聊天使用
TextChatService;公开可编辑文本限流(≥ 1 分钟)。
现代 API 用法
task.*、*Async变体、Raycast、移动器约束、PivotTo、Animator:LoadAnimation、TextChatService、UIDragDetector、workspace碰撞组 API、CreatePath+ComputeAsync。- 已弃用和被取代成员的完整映射:references/deprecated-apis.md。
代码质量(roblox-luau)
--!strict与带类型的公开 API;通过GetService获取服务;不得使用_G/shared。- 清晰的模块边界;配置与逻辑分离;为纯逻辑编写测试(
roblox-testing)。
输出格式
## Summary
<2–3 sentences: overall risk, the most important fixes>
## Findings
1. [Critical] src/server/Shop.server.luau:42 — Price read from client argument.
Impact: exploiters buy anything for 0 coins. Fix: look up ITEMS[itemId].price on the server.
2. [High] ...
## Modernization (optional)
- Replace `wait()` → `task.wait()` (12 occurrences) ...
主动提供应用修复的选项;修复时,除该 bug 外保持行为完全一致,并重新运行相关
检查(类型检查、测试、通过 roblox-studio-mcp 进行 Studio 试玩)。
评论
支持 Markdown