mcpField
S
scenario-roblox-monetization

scenario-roblox-monetization

github.com/scenario-labs开发1.2k54 次安装1 天前更新
代码仓库

关于 scenario-roblox-monetization

面向 Roblox 开发者的变现与运营技能,涵盖购买、权益、广告、分析和实验。它要求依据已保存的收据发放奖励,并通过可配置变更和可衡量指标制定上线标准。

主要功能

  1. 01集中管理商品目录
  2. 02依据收据发放购买奖励
  3. 03服务端验证权益
  4. 04显示玩家专属价格
  5. 05披露付费随机物品概率
  6. 06遥测与实时配置

适用场景

  1. 01实现 Developer Product 购买
  2. 02显示每位玩家的价格
  3. 03披露付费随机物品概率
  4. 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.md
expert-notes.md
gui-paths.md
launch-liveops.md
procedures.md
sources.md
scripts/
rbx_monetization.py
scripts/agentkit/monetization/
Catalog.luau
Entitlements.luau
LiveConfig.luau
lune_mon_audit.luau
MonAudit.luau
Odds.luau
PriceText.luau
Purchases.luau
ShopRank.luau
Telemetry.luau

详细介绍

Roblox 变现与实时运营

目标:在 macOS 上使用 scenario-roblox-expert 工具包,通过工具包操作 Roblox Studio(2026 年 10 月版本)。

这里的专家级实践意味着:每条 Robux 流程最终都由一个服务器收据处理程序处理,并且仅在已保存的玩家档案确认后才发放内容;价格和概率来自引擎或配置拥有的唯一数据源;所有实时变更都在配置控制下发布,并由一个指标决定其去留。Agent 在未发布的体验中构建并测试代码;产品创建、仪表板和商店美术上传仍由所有者负责。

如果你的可用技能中缺少此处提到的同级技能,请让用户安装它(npx skills add scenario-labs/skills --skill <name>);如果无人值守,请根据工具架构继续操作,并指出这一缺口。

必备背景: scenario-roblox-expert(渠道、审查循环、工具包、当前 Roblox 易踩的坑)。

立场(专家级实践的要点)

  1. 仅在收据处理程序中发放内容,并且只在保存后发放。 PurchaseGranted 表示已保存的玩家档案中包含 PurchaseId;其他情况都应返回 NotProcessedYet。提示完成事件并不能证明付款已完成(Creator Docs,开发者产品;Stewiepfing)。文档示例在处理程序返回 nil 时会返回已发放;收据测试套件复现了这个错误。
  2. 每台服务器只使用一个处理程序。 新代码使用 BindReceiptHandler;旧代码则在一个 Script 中仅赋值一次 ProcessReceipt(MarketplaceService 参考)。在正式环境中,第二次全局绑定会报错,而第二次赋值 ProcessReceipt 不会发出警告,但仍会被接受。
  3. 价格来自引擎,并在客户端读取。 固定价格会妨碍价格优化,还会向 Plus 订阅用户显示他们实际无需支付的价格(Creator Docs,托管定价、Roblox Plus)。服务器发放内容时绝不需要价格。
  4. 抽取和概率披露共用同一张概率表,并按玩家进行限制检查。 消费前展示所有结果及其数值概率,并针对每位玩家检查 ArePaidRandomItemsRestricted(Creator Docs,付费随机物品)。通过检查后,从服务器提示随机物品 [新增]。
  5. 在发布时就以低价变现所有预期机制。 新手礼包定价为 25 至 99 Robux;许多小额付费玩家胜过一个高价商品;绝不把移动等基础功能设为付费门槛(Roblox 变现负责人和工作室负责人,RDC 2025)。之后再加入付费功能,会给人一种付费取胜的感觉。
  6. 所有有风险的变更都在配置控制下发布,并由数据决定去留。 在玩家接触功能时读取其快照中的实验值,先检查最小可检测效应,并让断线等护栏指标优先于小幅收益(Creator Docs,实验;Roblox 实验团队和工作室,RDC 2025)。
  7. 点击决定发现机会。 游玩完成率和首次游玩跳出率已取代 QPTR;排名只根据自然的 Home 流量学习,缩略图必须展示真实游戏(Roblox 发现团队负责人,RDC 2026 和 RFY 问答;工作室,RDC 2025)。
  8. 激励视频发放固定的开发者产品。 必须由用户主动发起、明确披露,绝不能发放 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。

  1. 审计。 目标:找出所有购买路径、价格字面量,以及客户端分析或配置调用。 方法:离线运行 rbx_monetization.audit_place(place)(Lune),然后在 Edit 中通过 rbx_monetization.run 运行 MonAudit.run(game)。门槛:错误数为零,且实时统计与离线统计相同。
  2. 目录。 目标:在一个服务器表中列出商品、通行证和订阅,将授予内容作为数据定义,不包含 价格。方法:Catalog.new(def)、catalog:validate();在已发布的测试服务器中运行 catalog:verify(fetch, game.CreatorId)。门槛:没有 duplicate-id、bad-grant、unknown-id 或 foreign-id 问题。通行证 ID 错误不算错误:在实时环境中,通行证 ID 1 解析到了另一位创作者的通行证。
  3. 收据。 目标:每个 PurchaseId 只授予一次。方法:从 scenario-roblox-data 创建 Receipts.new{getProfile, isPresent, handlers = catalog:handlers()},然后创建 Purchases.new{receipts, catalog, telemetry},并调用 purchases:bind(MarketplaceService)。使用合成的收据表测试, 切勿触发真实购买提示。门槛:重复收据只授予一次;玩家不存在或保存失败时返回 NotProcessedYet, 重试后只授予一次。
  4. 特权。 目标:由服务器检查通行证、订阅和 Plus 特权。方法: Entitlements.new{passes, subscriptions, owns, subStatus, onChanged}, ent:connect(MarketplaceService, Players);Entitlements.giveTool 会写入 Backpack 和 StarterGear。门槛:检查出错时保留已付费状态;工具在重生后仍存在;客户端根据 perk_ 属性显示“已拥有”。
  5. 价格。 目标:每项显示的价格都是玩家实际支付的价格。方法:商店打开时,在 LocalScript 中调用 PriceText.fetch 和 PriceText.view。门槛:没有 price-literal 问题;价格加载前,商品行显示“...” 且不可购买。
  6. 付费随机物品。 目标:公开概率,并为受限制的玩家提供替代路径。方法:服务器抽取和客户端面板都引用同一个 Odds.fromWeights 模块;在“详情”按钮后显示 Odds.display 和免责声明;为受限制的玩家提供 Odds.directPrice 或不提供购买选项。门槛:显示的概率总和为 100%,否则必须附带免责声明;受限制的玩家无法触发购买提示。
  7. 激励视频。 目标:提供明确告知、可选且奖励固定商品的广告。方法:菜单打开时,客户端调用 GetAdAvailabilityNowAsync;服务器先调用 CreateAdRewardFromDevProductId,再在 pcall 中调用 ShowRewardedVideoAdAsync;奖励通过 AdReward 渠道的收据发放。门槛:广告不可用时隐藏广告行;奖励通过收据路径发放。
  8. 分析。 目标:实现能抵御利用漏洞者并符合限制的引导流程、商店转化漏斗和经济事件分析。方法:仅在服务器上使用 Telemetry;客户端发送步骤编号,服务器只接受递增的步骤;保存后再记录经济事件。门槛:丢弃并计数无效步骤; 事件名称、货币和字段均符合限制表。
  9. 实时配置与实验。 目标:无需发布即可更改数值。方法:使用 LiveConfig.new{defaults},配合 UpdateAvailable 和 Refresh,并将配置同步到 cfg_ 玩家属性, 同时设置 cfgReady 标记;实验键使用 forPlayer。门槛:ConfigService 失败时使用默认值(实时环境中,未发布约 30 秒后会失败); 客户端仅在 cfgReady 后读取配置值。
  10. 商店美术素材。 目标:缩略图、图标和物品图标均符合尺寸规则,并能展示真实游戏。方法:截取分阶段试玩画面, 使用 thumb_from_capture,然后制作 Scenario 美术素材(见交接说明);运行 check_art(path, kind)。门槛: check_art 错误数为零;已审核联系表;由所有者上传。
  11. 发布与实时运营。 目标:制定包含各步骤决策指标的计划。方法:对每项测试运行 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 月推出,但目前尚未写入文档:使用前请先核实。

参考资料

评论

支持 Markdown