init
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
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"`
|
||||
}
|
||||
|
||||
// coinPackages — مطابق فروشگاه مرجع.
|
||||
var coinPackages = []CoinPackage{
|
||||
{ID: "small", Title: "بسته کوچک", Coins: 6000, VIPDays: 0, PriceToman: 14950, BonusPct: 0},
|
||||
{ID: "medium", Title: "بسته متوسط", Coins: 20000, VIPDays: 3, PriceToman: 37900, BonusPct: 20},
|
||||
{ID: "large", Title: "بسته بزرگ", Coins: 80000, VIPDays: 7, PriceToman: 134900, BonusPct: 30},
|
||||
{ID: "xlarge", Title: "بسته خیلی بزرگ", Coins: 180000, VIPDays: 15, PriceToman: 279900, BonusPct: 40},
|
||||
{ID: "luxury", Title: "بسته لاکچری", Coins: 280000, VIPDays: 20, PriceToman: 379900, BonusPct: 50},
|
||||
{ID: "sultans", Title: "بسته سلاطین", Coins: 700000, VIPDays: 30, PriceToman: 999000, BonusPct: 60},
|
||||
}
|
||||
|
||||
var ticketPackages = []TicketPackage{
|
||||
{ID: "small", Title: "بسته کوچک", Tickets: 10, PriceToman: 6900},
|
||||
{ID: "medium", Title: "بسته متوسط", Tickets: 50, PriceToman: 24900},
|
||||
{ID: "large", Title: "بسته بزرگ", Tickets: 150, PriceToman: 64900},
|
||||
{ID: "xlarge", Title: "بسته خیلی بزرگ", Tickets: 500, PriceToman: 199900},
|
||||
}
|
||||
|
||||
var cardSkins = []CardSkin{
|
||||
{ID: "simple", Title: "بسته کارت ساده", PriceCoins: 0},
|
||||
{ID: "swiss", Title: "بسته کارت سوئیسی", PriceCoins: 6000},
|
||||
{ID: "wizard", Title: "بسته کارت جادوگر", PriceCoins: 10000},
|
||||
{ID: "western", Title: "بسته کارت وسترن", PriceCoins: 12000},
|
||||
{ID: "french", Title: "بسته کارت فرانسوی", PriceCoins: 20000},
|
||||
{ID: "epic", Title: "بسته کارت حماسی", PriceCoins: 25000},
|
||||
}
|
||||
|
||||
var boosters = []Booster{
|
||||
{ID: "xp2", Title: "بسته تجربه دو برابر", Multiplier: 2, Hours: 12, PriceToman: 6900},
|
||||
{ID: "xp3", Title: "بسته تجربه سه برابر", Multiplier: 3, Hours: 24, PriceToman: 19900},
|
||||
}
|
||||
|
||||
// tableTiers — انواع میز (ورودی/جایزه/XP/جام).
|
||||
var tableTiers = []TableTier{
|
||||
{ID: "beginner", Title: "مبتدی", Hands: 3, Entry: 100, Prize: 250, XP: 15, Trophy: 50},
|
||||
{ID: "amateur", Title: "پیوست", Hands: 3, Entry: 2500, Prize: 5000, XP: 25, Trophy: 100},
|
||||
{ID: "pro", Title: "حرفهای", Hands: 7, Entry: 2500, Prize: 5000, XP: 25, Trophy: 100},
|
||||
{ID: "master", Title: "استادان", Hands: 7, Entry: 20000, Prize: 40000, XP: 40, Trophy: 200},
|
||||
}
|
||||
|
||||
// FullCatalog کل کاتالوگ را برمیگرداند.
|
||||
func FullCatalog() Catalog {
|
||||
return Catalog{
|
||||
CoinPackages: coinPackages,
|
||||
TicketPackages: ticketPackages,
|
||||
CardSkins: cardSkins,
|
||||
Boosters: boosters,
|
||||
TableTiers: tableTiers,
|
||||
}
|
||||
}
|
||||
|
||||
func findCoinPackage(id string) *CoinPackage {
|
||||
for i := range coinPackages {
|
||||
if coinPackages[i].ID == id {
|
||||
return &coinPackages[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func findTicketPackage(id string) *TicketPackage {
|
||||
for i := range ticketPackages {
|
||||
if ticketPackages[i].ID == id {
|
||||
return &ticketPackages[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func findCardSkin(id string) *CardSkin {
|
||||
for i := range cardSkins {
|
||||
if cardSkins[i].ID == id {
|
||||
return &cardSkins[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func findBooster(id string) *Booster {
|
||||
for i := range boosters {
|
||||
if boosters[i].ID == id {
|
||||
return &boosters[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// FindTier نوع میز را برمیگرداند (برای لایه بازی).
|
||||
func FindTier(id string) *TableTier {
|
||||
for i := range tableTiers {
|
||||
if tableTiers[i].ID == id {
|
||||
return &tableTiers[i]
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user