package economy // مقادیر اقتصادی پایه (قابل تنظیم بر اساس بیزینس‌پلن). const ( DailyReward = 200 // سکه روزانه AdReward = 50 // سکه به ازای هر تبلیغ rewardedِ کامل AdDailyCap = 50 // سقف تعداد تبلیغ پاداش‌دار در روز ) // CoinPackage بسته‌ی سکه با پول واقعی (IAP) — ممکن است VIP هم بدهد. // SKU شناسه‌ی محصول در پنلِ مایکت/کافه‌بازار (uuid) است. type CoinPackage struct { ID string `json:"id"` Title string `json:"title"` Coins int64 `json:"coins"` VIPDays int `json:"vip_days"` PriceToman int `json:"price_toman"` BonusPct int `json:"bonus_pct"` SKU string `json:"sku"` } // TicketPackage بسته‌ی بلیط با پول واقعی (IAP). type TicketPackage struct { ID string `json:"id"` Title string `json:"title"` Tickets int64 `json:"tickets"` PriceToman int `json:"price_toman"` SKU string `json:"sku"` } // CardSkin اسکین کارت که با سکه باز می‌شود (قیمت ۰ یعنی پیش‌فرض رایگان). type CardSkin struct { ID string `json:"id"` Title string `json:"title"` PriceCoins int64 `json:"price_coins"` } // Booster بوستر XP با پول واقعی (IAP). type Booster struct { ID string `json:"id"` Title string `json:"title"` Multiplier int `json:"multiplier"` Hours int `json:"hours"` PriceToman int `json:"price_toman"` SKU string `json:"sku"` } // VIPPackage بسته‌ی اشتراک VIP با پول واقعی (IAP). type VIPPackage struct { ID string `json:"id"` Title string `json:"title"` Months int `json:"months"` PriceToman int `json:"price_toman"` SKU string `json:"sku"` } // TableTier نوع میز: تعداد دست، ورودی، جایزه، XP و جام. // RankReward > 0 یعنی میزِ رتبه‌بندی است (به برنده امتیازِ رتبه می‌دهد). type TableTier struct { ID string `json:"id"` Title string `json:"title"` Hands int `json:"hands"` Entry int64 `json:"entry"` Prize int64 `json:"prize"` XP int `json:"xp"` Trophy int `json:"trophy"` RankReward int `json:"rank_reward"` } // Catalog کل کاتالوگ فروشگاه (برای GET /api/shop). از دیتابیس بارگذاری می‌شود. type Catalog struct { CoinPackages []CoinPackage `json:"coin_packages"` TicketPackages []TicketPackage `json:"ticket_packages"` CardSkins []CardSkin `json:"card_skins"` Boosters []Booster `json:"boosters"` VIPPackages []VIPPackage `json:"vip_packages"` TableTiers []TableTier `json:"table_tiers"` } // rankTiers آستانه‌ی امتیازِ هر نشانِ رتبه (از پایین به بالا). var rankTiers = []struct { Name string Min int64 }{ {"bronze", 0}, {"silver", 500}, {"gold", 1500}, {"diamond", 3000}, {"king", 5000}, } // RankTier نام و اندیسِ نشانِ رتبه را از امتیازِ رتبه برمی‌گرداند. func RankTier(points int64) (name string, index int) { name, index = rankTiers[0].Name, 0 for i, t := range rankTiers { if points >= t.Min { name, index = t.Name, i } } return name, index } // LevelInfo سطح فعلی، XP درون‌سطح و XP لازم برای سطح بعد را از XP کل محاسبه می‌کند. // نیاز هر سطح: ۵۰ × شماره سطح (مثلاً سطح ۸ ⇒ ۴۰۰). func LevelInfo(totalXP int64) (level int, into int64, need int64) { level = 1 remaining := totalXP for { need = int64(50 * level) if remaining < need { break } remaining -= need level++ } into = remaining return level, into, need }