Game monetization strategies, in-app purchases, battle passes, ads integration, and player retention mechanics. Ethical monetization that respects players.
Provides game monetization strategies, IAP implementation code, battle pass design, and ethical pricing guidance. Use when creating in-app purchase systems, balancing economies, or choosing revenue models.
/plugin marketplace add pluginagentmarketplace/custom-plugin-game-developer/plugin install custom-plugin-game-developer@pluginagentmarketplace-game-developerThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/monetization_config.yamlreferences/MONETIZATION_GUIDE.mdscripts/monetization_analyzer.pyCHOOSING YOUR MODEL:
┌─────────────────────────────────────────────────────────────┐
│ GAME TYPE → RECOMMENDED MODEL │
├─────────────────────────────────────────────────────────────┤
│ Story-driven / Single play → PREMIUM ($10-60) │
│ Competitive multiplayer → F2P + Battle Pass │
│ Mobile casual → F2P + Ads + Light IAP │
│ MMO / Live service → Subscription + Cosmetics │
│ Indie narrative → Premium + Optional tip jar │
└─────────────────────────────────────────────────────────────┘
ETHICAL PRINCIPLES:
┌─────────────────────────────────────────────────────────────┐
│ ✅ DO: ❌ DON'T: │
│ • Cosmetics only • Pay-to-win │
│ • Clear pricing • Hidden costs │
│ • Earnable alternatives • Predatory targeting │
│ • Transparent odds • Gambling mechanics │
│ • Respect time/money • Exploit psychology │
│ • Value for purchase • Bait and switch │
└─────────────────────────────────────────────────────────────┘
// ✅ Production-Ready: Unity IAP Manager
public class IAPManager : MonoBehaviour, IStoreListener
{
public static IAPManager Instance { get; private set; }
private IStoreController _storeController;
private IExtensionProvider _extensionProvider;
// Product IDs (match store configuration)
public const string PRODUCT_STARTER_PACK = "com.game.starterpack";
public const string PRODUCT_GEMS_100 = "com.game.gems100";
public const string PRODUCT_BATTLE_PASS = "com.game.battlepass";
public const string PRODUCT_VIP_SUB = "com.game.vip_monthly";
public event Action<string> OnPurchaseComplete;
public event Action<string, string> OnPurchaseFailed;
private void Awake()
{
if (Instance != null) { Destroy(gameObject); return; }
Instance = this;
DontDestroyOnLoad(gameObject);
InitializePurchasing();
}
private void InitializePurchasing()
{
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
// Consumables
builder.AddProduct(PRODUCT_GEMS_100, ProductType.Consumable);
// Non-consumables
builder.AddProduct(PRODUCT_STARTER_PACK, ProductType.NonConsumable);
// Subscriptions
builder.AddProduct(PRODUCT_VIP_SUB, ProductType.Subscription);
builder.AddProduct(PRODUCT_BATTLE_PASS, ProductType.Subscription);
UnityPurchasing.Initialize(this, builder);
}
public void BuyProduct(string productId)
{
if (_storeController == null)
{
OnPurchaseFailed?.Invoke(productId, "Store not initialized");
return;
}
var product = _storeController.products.WithID(productId);
if (product != null && product.availableToPurchase)
{
_storeController.InitiatePurchase(product);
}
else
{
OnPurchaseFailed?.Invoke(productId, "Product not available");
}
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
var productId = args.purchasedProduct.definition.id;
// Validate receipt (server-side recommended for security)
if (ValidateReceipt(args.purchasedProduct.receipt))
{
// Grant the purchase
GrantPurchase(productId);
OnPurchaseComplete?.Invoke(productId);
}
return PurchaseProcessingResult.Complete;
}
private void GrantPurchase(string productId)
{
switch (productId)
{
case PRODUCT_GEMS_100:
PlayerInventory.AddGems(100);
break;
case PRODUCT_STARTER_PACK:
PlayerInventory.UnlockStarterPack();
break;
case PRODUCT_BATTLE_PASS:
BattlePassManager.Activate();
break;
}
}
// IStoreListener implementation...
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
_storeController = controller;
_extensionProvider = extensions;
}
public void OnInitializeFailed(InitializationFailureReason error) { }
public void OnPurchaseFailed(Product product, PurchaseFailureReason reason) { }
}
BATTLE PASS STRUCTURE:
┌─────────────────────────────────────────────────────────────┐
│ SEASON LENGTH: 8-12 weeks │
│ TIERS: 100 levels │
│ XP PER TIER: 1000 (increases gradually) │
├─────────────────────────────────────────────────────────────┤
│ FREE TRACK: │
│ • Common rewards every 5 levels │
│ • 1-2 rare items mid-season │
│ • Currency to buy next pass (partial) │
├─────────────────────────────────────────────────────────────┤
│ PREMIUM TRACK ($10): │
│ • Exclusive skin at level 1 (instant value) │
│ • Premium rewards every level │
│ • Legendary items at 25, 50, 75, 100 │
│ • Enough currency to buy next pass (with effort) │
├─────────────────────────────────────────────────────────────┤
│ XP SOURCES: │
│ • Daily challenges: 500 XP │
│ • Weekly challenges: 2000 XP each │
│ • Playtime: 50 XP per match │
│ • Special events: Bonus XP weekends │
└─────────────────────────────────────────────────────────────┘
DUAL CURRENCY SYSTEM:
┌─────────────────────────────────────────────────────────────┐
│ SOFT CURRENCY (Gold/Coins): │
│ • Earned through gameplay │
│ • Used for: Upgrades, basic items, consumables │
│ • Sink: Level-gated purchases, repair costs │
├─────────────────────────────────────────────────────────────┤
│ HARD CURRENCY (Gems/Diamonds): │
│ • Purchased with real money │
│ • Small amounts earnable in-game │
│ • Used for: Premium cosmetics, time skips │
│ • NEVER required for core gameplay │
└─────────────────────────────────────────────────────────────┘
PRICING PSYCHOLOGY:
┌─────────────────────────────────────────────────────────────┐
│ $0.99 - Impulse buy, low barrier │
│ $4.99 - Starter pack sweet spot │
│ $9.99 - Battle pass standard │
│ $19.99 - High-value bundles │
│ $49.99 - Whale offering (best value/gem) │
│ $99.99 - Maximum purchase (regulations) │
└─────────────────────────────────────────────────────────────┘
MONETIZATION KPIS:
┌─────────────────────────────────────────────────────────────┐
│ CONVERSION RATE: 2-5% (F2P) │
│ ARPU: $0.05-0.50/DAU (casual mobile) │
│ ARPPU: $5-50/paying user │
│ LTV: Should exceed CPI by 1.5x+ │
├─────────────────────────────────────────────────────────────┤
│ HEALTHY INDICATORS: │
│ ✓ D1 retention > 40% │
│ ✓ D7 retention > 20% │
│ ✓ Conversion > 2% │
│ ✓ LTV/CPI > 1.5 │
│ ✓ Refund rate < 5% │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Low conversion rate (< 1%) │
├─────────────────────────────────────────────────────────────┤
│ ROOT CAUSES: │
│ • IAP offers too expensive │
│ • Poor first purchase experience │
│ • No perceived value │
│ • Wrong timing │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Add high-value starter pack │
│ → Show IAP after engagement hook │
│ → A/B test price points │
│ → Improve soft currency scarcity │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: High refund rate (> 10%) │
├─────────────────────────────────────────────────────────────┤
│ ROOT CAUSES: │
│ • Unclear what purchase provides │
│ • Buyers remorse (poor value) │
│ • Accidental purchases │
│ • Technical issues │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Add purchase confirmation │
│ → Show exactly what user receives │
│ → Improve purchase value │
│ → Fix any delivery bugs │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ PROBLEM: Economy inflation │
├─────────────────────────────────────────────────────────────┤
│ SOLUTIONS: │
│ → Add more currency sinks │
│ → Reduce faucets gradually │
│ → Introduce prestige/reset systems │
│ → Create consumable high-end items │
└─────────────────────────────────────────────────────────────┘
| Region | Requirement |
|---|---|
| EU | Loot box odds disclosure |
| Belgium | No loot boxes |
| China | Odds, spending limits |
| Japan | Kompu gacha banned |
| US | COPPA for under-13 |
Use this skill: When designing monetization, balancing economy, or implementing purchasing systems.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.