关于 scenario-roblox-monetization
面向 Roblox 开发者的变现与运营技能,涵盖购买、权益、广告、分析和实验。它要求依据已保存的收据发放奖励,并通过可配置变更和可衡量指标制定上线标准。
主要功能
- 01集中管理商品目录
- 02依据收据发放购买奖励
- 03服务端验证权益
- 04显示玩家专属价格
- 05披露付费随机物品概率
- 06遥测与实时配置
适用场景
- 01实现 Developer Product 购买
- 02显示每位玩家的价格
- 03披露付费随机物品概率
- 04评估线上功能实验
MCP 相关
说明如何通过 Roblox 工具包使用 Studio MCP 运行变现测试,并在 Edit 和 Playtest 会话中检查结果。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-roblox-monetization安装后在 Claude Code 中输入/scenario-roblox-monetization确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/critique.mdexpert-notes.mdgui-paths.mdlaunch-liveops.mdprocedures.mdsources.mdscripts/rbx_monetization.pyscripts/agentkit/monetization/Catalog.luauEntitlements.luauLiveConfig.luaulune_mon_audit.luauMonAudit.luauOdds.luauPriceText.luauPurchases.luauShopRank.luauTelemetry.luau详细介绍
Roblox 变现与实时运营
目标:在 macOS 上使用 scenario-roblox-expert 工具包,通过工具包操作 Roblox Studio(2026 年 10 月版本)。
这里的专家级实践意味着:每条 Robux 流程最终都由一个服务器收据处理程序处理,并且仅在已保存的玩家档案确认后才发放内容;价格和概率来自引擎或配置拥有的唯一数据源;所有实时变更都在配置控制下发布,并由一个指标决定其去留。Agent 在未发布的体验中构建并测试代码;产品创建、仪表板和商店美术上传仍由所有者负责。
如果你的可用技能中缺少此处提到的同级技能,请让用户安装它(npx skills add scenario-labs/skills --skill <name>);如果无人值守,请根据工具架构继续操作,并指出这一缺口。
必备背景: scenario-roblox-expert(渠道、审查循环、工具包、当前 Roblox 易踩的坑)。
立场(专家级实践的要点)
- 仅在收据处理程序中发放内容,并且只在保存后发放。
PurchaseGranted表示已保存的玩家档案中包含PurchaseId;其他情况都应返回NotProcessedYet。提示完成事件并不能证明付款已完成(Creator Docs,开发者产品;Stewiepfing)。文档示例在处理程序返回 nil 时会返回已发放;收据测试套件复现了这个错误。 - 每台服务器只使用一个处理程序。 新代码使用
BindReceiptHandler;旧代码则在一个 Script 中仅赋值一次ProcessReceipt(MarketplaceService 参考)。在正式环境中,第二次全局绑定会报错,而第二次赋值ProcessReceipt不会发出警告,但仍会被接受。 - 价格来自引擎,并在客户端读取。 固定价格会妨碍价格优化,还会向 Plus 订阅用户显示他们实际无需支付的价格(Creator Docs,托管定价、Roblox Plus)。服务器发放内容时绝不需要价格。
- 抽取和概率披露共用同一张概率表,并按玩家进行限制检查。 消费前展示所有结果及其数值概率,并针对每位玩家检查
ArePaidRandomItemsRestricted(Creator Docs,付费随机物品)。通过检查后,从服务器提示随机物品 [新增]。 - 在发布时就以低价变现所有预期机制。 新手礼包定价为 25 至 99 Robux;许多小额付费玩家胜过一个高价商品;绝不把移动等基础功能设为付费门槛(Roblox 变现负责人和工作室负责人,RDC 2025)。之后再加入付费功能,会给人一种付费取胜的感觉。
- 所有有风险的变更都在配置控制下发布,并由数据决定去留。 在玩家接触功能时读取其快照中的实验值,先检查最小可检测效应,并让断线等护栏指标优先于小幅收益(Creator Docs,实验;Roblox 实验团队和工作室,RDC 2025)。
- 点击决定发现机会。 游玩完成率和首次游玩跳出率已取代 QPTR;排名只根据自然的 Home 流量学习,缩略图必须展示真实游戏(Roblox 发现团队负责人,RDC 2026 和 RFY 问答;工作室,RDC 2025)。
- 激励视频发放固定的开发者产品。 必须由用户主动发起、明确披露,绝不能发放 Robux,不能是随机物品,也不能成为进度门槛(Creator Docs)。为过时的付费物品提供奖励,避免广告争夺付费玩家的消费(RDC 2025)。
首先确认
- 是否已发布:分析、配置、广告和产品查询都需要已发布的体验。 如果尚未发布,请使用合成收据进行测试,并记录 Studio 的行为。
- 产品清单:名称、类型(货币、礼包、通行证、订阅)、各产品的授予内容,以及是否已存在 ID。只有所有者才能在 Creator Hub 中创建 ID (gui-paths.md)。
- 数据层:使用哪个个人资料存储,以及它为 scenario-roblox-data
Receipts提供的getProfile和isPresent函数。 - 受众:年龄范围、对付费随机机制有限制的地区、移动设备用户占比、DAU(DAU 约低于 1,000 的实验很少能达到显著性)。
- 广告:所有者已通过年龄验证(13 岁以上)、启用 2FA 且拥有公开游戏;否则不提供奖励视频。
- 未获答复时的默认设置:一个目录模块,通过
Purchases使用BindReceiptHandler,通过PriceText显示价格,一个货币礼包加一个新手礼包,不含付费随机道具,自第一天起启用遥测和实时配置。
流程
完整代码和测试结果见 procedures.md。服务端模块(Catalog、Purchases、Entitlements、Telemetry)放在 ServerScriptService.MonKit 中,与数据层的 Receipts 并列;共享模块(Odds、PriceText、LiveConfig、ShopRank)放在 ReplicatedStorage.MonKit 中。状态:在尚未发布的体验中,Studio 0.743 的 16 项实时测试全部通过(2026-10-19);Lune 中的 61 项套件测试通过,且在 Studio 中结果不变。仍需发布游戏;尚未运行:真实的 RankProductsAsync 排序(未发布时返回 HTTP 400,保留目录顺序),以及对你自己的物品执行 no-description。
- 审计。 目标:找出所有购买路径、价格字面量,以及客户端分析或配置调用。
方法:离线运行
rbx_monetization.audit_place(place)(Lune),然后在 Edit 中通过rbx_monetization.run运行MonAudit.run(game)。门槛:错误数为零,且实时统计与离线统计相同。 - 目录。 目标:在一个服务器表中列出商品、通行证和订阅,将授予内容作为数据定义,不包含
价格。方法:
Catalog.new(def)、catalog:validate();在已发布的测试服务器中运行catalog:verify(fetch, game.CreatorId)。门槛:没有duplicate-id、bad-grant、unknown-id或foreign-id问题。通行证 ID 错误不算错误:在实时环境中,通行证 ID 1 解析到了另一位创作者的通行证。 - 收据。 目标:每个
PurchaseId只授予一次。方法:从 scenario-roblox-data 创建Receipts.new{getProfile, isPresent, handlers = catalog:handlers()},然后创建Purchases.new{receipts, catalog, telemetry},并调用purchases:bind(MarketplaceService)。使用合成的收据表测试, 切勿触发真实购买提示。门槛:重复收据只授予一次;玩家不存在或保存失败时返回NotProcessedYet, 重试后只授予一次。 - 特权。 目标:由服务器检查通行证、订阅和 Plus 特权。方法:
Entitlements.new{passes, subscriptions, owns, subStatus, onChanged},ent:connect(MarketplaceService, Players);Entitlements.giveTool会写入 Backpack 和 StarterGear。门槛:检查出错时保留已付费状态;工具在重生后仍存在;客户端根据perk_属性显示“已拥有”。 - 价格。 目标:每项显示的价格都是玩家实际支付的价格。方法:商店打开时,在 LocalScript 中调用
PriceText.fetch和PriceText.view。门槛:没有price-literal问题;价格加载前,商品行显示“...” 且不可购买。 - 付费随机物品。 目标:公开概率,并为受限制的玩家提供替代路径。方法:服务器抽取和客户端面板都引用同一个
Odds.fromWeights模块;在“详情”按钮后显示Odds.display和免责声明;为受限制的玩家提供Odds.directPrice或不提供购买选项。门槛:显示的概率总和为 100%,否则必须附带免责声明;受限制的玩家无法触发购买提示。 - 激励视频。 目标:提供明确告知、可选且奖励固定商品的广告。方法:菜单打开时,客户端调用
GetAdAvailabilityNowAsync;服务器先调用CreateAdRewardFromDevProductId,再在pcall中调用ShowRewardedVideoAdAsync;奖励通过AdReward渠道的收据发放。门槛:广告不可用时隐藏广告行;奖励通过收据路径发放。 - 分析。 目标:实现能抵御利用漏洞者并符合限制的引导流程、商店转化漏斗和经济事件分析。方法:仅在服务器上使用
Telemetry;客户端发送步骤编号,服务器只接受递增的步骤;保存后再记录经济事件。门槛:丢弃并计数无效步骤; 事件名称、货币和字段均符合限制表。 - 实时配置与实验。 目标:无需发布即可更改数值。方法:使用
LiveConfig.new{defaults},配合UpdateAvailable和Refresh,并将配置同步到cfg_玩家属性, 同时设置cfgReady标记;实验键使用forPlayer。门槛:ConfigService 失败时使用默认值(实时环境中,未发布约 30 秒后会失败); 客户端仅在cfgReady后读取配置值。 - 商店美术素材。 目标:缩略图、图标和物品图标均符合尺寸规则,并能展示真实游戏。方法:截取分阶段试玩画面,
使用
thumb_from_capture,然后制作 Scenario 美术素材(见交接说明);运行check_art(path, kind)。门槛:check_art错误数为零;已审核联系表;由所有者上传。 - 发布与实时运营。 目标:制定包含各步骤决策指标的计划。方法:对每项测试运行
rbx_monetization.mde(enrolled, baseline),按 10%、50%、100% 的比例逐步发布;广告活动运行 1 到 2 周, 不设定向,以建立基准。门槛:每项实验都有主要指标、护栏指标、低于预期效果的 MDE 和停止日期。发布检查清单和内容节奏: launch-liveops.md。
数字
| 数值 | 对应内容 | 来源 |
|---|---|---|
| 25 至 99 Robux | 入门捆绑包价格 | RDC 2025 |
| 100 个 PurchaseId | 个人资料中保留的收据日志 | scenario-roblox-data 默认值 [新增] |
| 30 天内 60,000 笔交易 | 价格优化资格;按 98/2 的比例约需 3 周 | 文档 |
| 非零数字后的 4 位 | 概率舍入,并附带免责声明 | 文档 |
| 每分钟 120 + 20 x CCU | 每个服务器的分析请求数 | 文档 |
| 3 个字段、10 种货币、20 种类型、100 个 SKU | 分析数据在归入“其他”之前的基数 | 文档 |
| 10 个漏斗、100 个步骤、100 个事件名称 | 每个体验的分析数据 | 文档 |
| 14 至 60 天,最多 2 个变体 | 实验时长和实验组数 | 文档 |
| -10% 游戏时长、-20% ARPU 或付费用户转化率 | 提前停止有害实验的标准;前 24 小时,已纳入 10,000 人以上 | 文档 |
| 约 1,000 DAU | 低于此值时,很难达到有用的 MDE | 文档 |
| 10%、50%、100% | 高风险功能的发布比例阶段 | RDC 2025 工作室 |
| 每日收入的最高 4% | 广告再投资;按 30 天 ROAS 评估 | RDC 2026 |
| 1920x1080,16:9,小于 3 MB | 缩略图;底部条带会被玩家数量遮挡 | 文档 |
| 512x512,在 150x150 时仍清晰可辨 | 体验图标 | 文档 |
| 最大 512x512,圆形裁剪 | 通行证和产品图标 | 文档 |
| 每位活跃消费玩家每天 5 Robux | 创作者奖励;每天前三款游戏,每次 10 分钟以上 | 文档 |
质量门槛
可衡量:
- 审计:离线和在线均为零错误;警告已修复或说明理由。
- 测试套件:
catalog、receipts、entitlements、pricetext、odds、telemetry、liveconfig和monaudit在 Lune 中通过,并且在 Studio 中不做任何更改也通过,计数相同。 - 游戏测试中的收据:重复的
PurchaseId只发放一次;保存失败时返回NotProcessedYet,重试后只发放一次。 - 控制台:服务器分析日志显示“AnalyticsService: event fired.”;没有“can only be executed on the game server”这一行。
- 遥测跟踪:漏斗步骤只向前推进;仅在发放已保存后才产生经济事件。
视觉:
- 使用
rbx_review.image_checks检查商店的客户端截图,截图包含价格、概率面板和受限视图。 - 将商店美术素材放在不超过 1,600 px 的联系表中,并打开查看。
完成前,使用 critique.md 对结果进行评分。
常见错误
| 错误 | 症状 | 修复 |
|---|---|---|
先发放,再保存,最后处理 PurchaseGranted | 已付款,但崩溃后什么都没有 | 先保存;仅在 LastSavedData 时发放 |
在 PromptProductPurchaseFinished 时发放 | 通过触发的远程调用获得免费物品 | 仅在收据处理程序中发放 |
将 pcall(handler) 成功视为已发放 | 处理程序返回 nil,却仍然发放 | 仅在保存后返回 true;nil 不代表已发放 |
两个脚本设置 ProcessReceipt | 某个产品永远无法发放 | 每个服务只使用一次 Purchases:bind |
| 在 UI 代码中手动填写价格 | Plus 和区域价格错误;优化受阻 | 使用 GetProductInfoAsync 提供的 PriceText |
| 在两个表中维护概率 | 公示概率与实际抽取结果不同 | 两者共用一个概率模块 |
| 由客户端提示购买付费蛋 | 受限玩家仍然可以购买 | 通过策略检查后由服务端提示 |
| 在客户端调用 Analytics 或 ConfigService | 静默无操作;显示“仅在游戏服务端可用” | 由服务端调用;客户端读取属性 |
| 信任客户端发送的漏斗步骤 | 漏斗数据被作弊者抬高 | 在服务端验证并只允许向前推进 |
| 所有人加入时都读取实验 | 未看到实验的玩家稀释了参与数据 | 在功能出现的位置调用 forPlayer |
| 看到早期数据后就停止测试 | 得出的胜者并不可靠 | 按 MDE 确定固定测试时长 |
| 缩略图文字或赠品宣传 | 视频被拒或发现度受影响 | 使用真实游戏画面和简洁标题 |
交接事项
- 与 scenario-roblox-data 配合:提供产品 ID 和发放数量;接收负责持久化的
Receipts处理程序表(PurchaseIds日志、LastSavedData确认)。此技能负责收据约定和目录。 - 从 scenario-roblox-networking 接收:
purchase-signal发现结果,以及用于商店步骤和蛋请求的已验证远程调用。 - 交给 scenario-roblox-ui:价格和概率文本、
perk_和cfg_属性、“Details”面板 内容;布局和缩放仍由 UI 负责。 - 交给 scenario-roblox-performance 和 scenario-roblox-tooling:遥测发送速率;用于 离线审计和测试套件的 CI。
- 场景美术:缩略图从暂存的游戏画面开始,通过 scenario-formats 重新裁剪为 16:9 的 1920x1080,或使用 scenario-image 编辑;体验图标(512x512 正方形)以及通行证或产品图标(透明 PNG,主体位于圆圈内)由 scenario-game-assets 提供;scenario-quality-gate 为其评分。文件放入项目后运行
check_art,且仅由所有者上传。所有美术素材中都不要包含文字、价格或“免费”宣传;每次上传都会经过审核。
当前 Roblox 说明
BindReceiptHandler(搭配Enum.ReceiptDecision和可选筛选条件)是当前的收据 API;ProcessReceipt仍然有效。- 跨游戏商品和通行证销售已于 2026-05-30 结束;Robux 转账使用各自的收据类型。
- Roblox Plus 已取代 Premium,面向新订阅用户:
HasRobloxSubscription、PromptRobloxSubscriptionPurchase。 - Creator Rewards 已于 2025-07-24 取代 Engagement-Based Payouts。
- 会产生等待的调用带有
Async:GetProductInfoAsync、UserOwnsGamePassAsync。使用Enum.InfoType.GamePass:价格优化页面写的是GamePasses,但该枚举不存在。 - 游玩完成率和首次游玩跳出率已取代 QPTR;缩略图页面仍写着“qualified play through rate”。
- Open Cloud 提供 Configs、Experimentation、Analytics Query 和 Ads API,均使用所有者签发的密钥。
- RDC 2026 宣布通行证免费试用将于 2026 年 10 月推出,但目前尚未写入文档:使用前请先核实。
参考资料
- references/expert-notes.md:按来源整理的原则,包含时间戳和最新发现。
- references/procedures.md:P1 到 P11 各阶段的完整代码,以及各阶段的测试和实时结果。
- references/critique.md:阻断项和质量评估标准,以及每项的衡量方法。
- references/launch-liveops.md:商品元数据、奖励视频资格、商店排序、内容节奏和数值膨胀、付费商品交易。
- references/gui-paths.md:Agent 无法执行的操作对应的 Creator Hub 和 Studio 路径,以及 Open Cloud 路由。
- references/sources.md:所有文档和视频,包含凭据和时间戳。
- scripts/rbx_monetization.py:审计、工具包加载器、Studio 探测、艺术资源检查、缩略图裁剪、MDE。
- scripts/agentkit/monetization/:
Catalog、Purchases、Entitlements、PriceText、ShopRank、Odds、Telemetry、LiveConfig、MonAudit、lune_mon_audit.luau。