mcpField
R
roblox-code-review

roblox-code-review

github.com/el4cteo测试与质量56529 次安装2 周前更新
代码仓库

关于 roblox-code-review

roblox-code-review 是用于审查 Roblox 代码的技能,按严重程度列出问题并定位到文件和行号。它检查安全、数据处理、生命周期、性能、文本安全及现代 API 用法,并说明影响与修复方式。

主要功能

  1. 01按严重程度排列审查结果
  2. 02报告文件、行号、影响和修复方案
  3. 03检查远程参数验证与安全性
  4. 04审查数据存储和购买处理
  5. 05检查生命周期、性能与文本过滤
  6. 06核对现代 Roblox API 用法

适用场景

  1. 01发布前审查 Roblox 代码
  2. 02排查漏洞或数据丢失风险
  3. 03发现生命周期和性能问题
  4. 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