Files
back-hokm/internal/economy/catalog.go
T
2026-06-15 20:54:05 +03:30

80 lines
2.6 KiB
Go

package economy
// مقادیر اقتصادی پایه (قابل تنظیم بر اساس بیزینس‌پلن).
const (
DailyReward = 200 // سکه روزانه
AdReward = 50 // سکه به ازای هر تبلیغ rewardedِ کامل
AdDailyCap = 50 // سقف تعداد تبلیغ پاداش‌دار در روز
)
// CoinPackage بسته‌ی سکه با پول واقعی (IAP) — ممکن است VIP هم بدهد.
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"`
}
// TicketPackage بسته‌ی بلیط با پول واقعی (IAP).
type TicketPackage struct {
ID string `json:"id"`
Title string `json:"title"`
Tickets int64 `json:"tickets"`
PriceToman int `json:"price_toman"`
}
// 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"`
}
// TableTier نوع میز: تعداد دست، ورودی، جایزه، XP و جام.
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"`
}
// 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"`
TableTiers []TableTier `json:"table_tiers"`
}
// 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
}