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
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1200pt" height="1200pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
<path fill="#c2610c" d="m1002 489.61c0-58.828-165.61-123.61-402-123.61-237.61 0-402 64.781-402 123.61 0 57.609 164.39 122.39 402 122.39 236.39 0 402-64.781 402-122.39zm-402 152.39c-178.78 0-366-38.391-417.61-111.61l-62.391 159.61c81.609-14.391 164.39 20.391 211.22 90l43.219-88.781c3.5625-7.2188 11.953-10.828 20.344-7.2188 7.2188 3.6094 10.828 12 7.2188 20.391l-39.609 80.391c78-18 160.78 0 224.39 49.219v-100.78c0-8.3906 7.2188-14.391 14.391-14.391 7.2188 0 14.391 7.2188 14.391 14.391l0.046875 100.78c63.609-49.219 146.39-67.219 224.39-49.219l-39.609-81.609c-3.6094-7.2188-1.2188-15.609 7.2188-20.391 7.2188-3.6094 15.609-1.2188 20.391 7.2188l43.219 87.609c46.781-68.391 128.39-103.22 210-88.781l-62.391-159.61c-52.828 74.391-241.22 112.78-418.82 112.78z"/>
</svg>

After

Width:  |  Height:  |  Size: 918 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.4 KiB