Store XP packs (expensive), winner 2x XP, premium perks
CI/CD / CI - API (dotnet build + engine sim) (push) Failing after 1m40s
CI/CD / CI - Web (tsc + next build) (push) Failing after 1m20s
CI/CD / Deploy - local stack (db + server + web) (push) Has been skipped

- XP packs in the store (coin-priced, intentionally expensive): xp1 200/5k,
  xp2 600/12k, xp3 1500/25k. Consumable (grant XP, can level up) — server
  ShopBuy handles kind "xp" via an authoritative XpPacks map + Gamification.GrantXp;
  mock mirrors. New shop section + shop.xp/xpHint i18n.
- Every game grants XP and the WINNER earns 2x: matchXp is now
  base*(won?2:1)*leagueFactor (was a flat +80 win bonus). Mirrored server-side.
- Premium (pro) perks: 1.5x XP multiplier (applied in applyMatchResult /
  ApplyMatch by plan), plus animated shimmering gold chat bubbles for your own
  messages (premium-chat CSS; ChatScreen gates on plan).

Verified: tsc + next + dotnet build clean; sim passes; live server — buying xp2
took L1→L3 and deducted 12k coins under the new curve. Images rebuilt :1500/:1505.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-05 00:08:19 +03:30
parent 4199a82c9d
commit fd33f85e9c
9 changed files with 116 additions and 14 deletions
+14
View File
@@ -45,6 +45,20 @@
--font-jakarta: "Plus Jakarta Sans Variable", system-ui, sans-serif;
}
/* Premium (pro) perk: animated shimmering chat bubble. */
@keyframes chatshimmer {
0% { background-position: 0% 50%; }
100% { background-position: 200% 50%; }
}
.premium-chat {
background: linear-gradient(90deg, #d4af37, #ffe9a8, #d4af37, #ffe9a8);
background-size: 200% 100%;
animation: chatshimmer 3s linear infinite;
color: #2a1f04;
font-weight: 600;
box-shadow: 0 0 10px rgba(212, 175, 55, 0.45);
}
html,
body {
height: 100%;