monetization-systems

from pluginagentmarketplace/custom-plugin-game-developer

Game developer roadmap plugin with engine-specific patterns and optimization

3 stars0 forksUpdated Jan 5, 2026
npx skills add https://github.com/pluginagentmarketplace/custom-plugin-game-developer --skill monetization-systems

SKILL.md

Monetization Systems

Monetization Models

CHOOSING 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            │
└─────────────────────────────────────────────────────────────┘

IAP Implementation

// ✅ 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 Design

BATTLE PASS STRUCTURE:
┌─────────────────────────────────────────────────────────────┐
│  SEASON LENGTH: 8-12 weeks                                   │
│  TIERS: 100 levels                                           │
│  XP PER TIER: 1000 (increases gradually)                    │
├─────────────────────────────────────────────────────────────┤
│  FREE TRACK:                                                 │
│  • Common rewards

...
Read full content

Repository Stats

Stars3
Forks0
LicenseOther