support for purchasing currency packs (#3629)

## Description:

Adds a currency pack system to the store. Players can purchase packs of
in-game currency (Plutonium and Caps) via Stripe checkout.

What's new:

* Pack schema (PackSchema) — new cosmetic type with currency
(hard/soft), amount, and displayName
* "Packs" tab in the Store — renders purchasable currency packs using
existing CosmeticButton infrastructure
* Stripe checkout flow — new createCurrencyPackCheckout API call and
handlePackPurchase handler
* Currency display in Account modal — shows Plutonium and Caps balances
when logged in
I* con components — <plutonium-icon> (animated green glow + rotate) and
<cap-icon> with new SVG assets
* Currency in UserMeResponse — player.currency.hard /
player.currency.soft added to the API schema

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced

## Please put your Discord username so you can be contacted if a bug or
regression is found:

evan
This commit is contained in:
Evan
2026-04-10 15:07:47 -07:00
committed by GitHub
parent de92a2721a
commit 696e727a39
13 changed files with 274 additions and 12 deletions
+7 -2
View File
@@ -942,8 +942,11 @@
"title": "Store",
"patterns": "Skins",
"flags": "Flags",
"packs": "Packs",
"no_flags": "No flags available. Check back later for new items.",
"no_skins": "No skins available. Check back later for new items."
"no_skins": "No skins available. Check back later for new items.",
"no_packs": "No packs available. Check back later for new items.",
"currency_pack_purchase_success": "Currency pack purchase successful!"
},
"territory_patterns": {
"title": "Skins",
@@ -963,7 +966,9 @@
"rare": "Rare",
"epic": "Epic",
"legendary": "Legendary",
"adfree": "ad-free for life!"
"adfree": "ad-free for life!",
"hard": "Plutonium",
"soft": "Caps"
},
"flag_input": {
"title": "Select Flag",