Skip to content

[Feature] EU Consumer Protection Compliance — Plutonium storefront labelling & exact-amount purchasing #4171

@iiamlewis

Description

@iiamlewis

EU Consumer Protection Compliance — Plutonium Currency

Overview

Two changes are required to make the Plutonium currency system compliant with EU Consumer Protection Cooperation (CPC) regulations. These practices were actioned against FIFA, Roblox and Fortnite between 2022–2024. Both changes are straightforward to implement.

Changes Required

1. Display real-money value on all Plutonium-priced items

Every item in the store that is priced in Plutonium must show the USD equivalent alongside it.

Formula: Plut amount ÷ 20 = USD (base rate: 20 Plut per $1.00)

Example: 153 Plut ($7.65)

Scope: All storefront item listings where a Plutonium price is displayed.

2. Exact-amount purchasing at checkout

Players must be able to purchase exactly the amount of Plutonium needed for a specific item at the base rate. They cannot be forced into a fixed pack.

Base rate: 20 Plut = $1.00 (i.e. $0.05 per Plutonium)

Implementation:

  • At checkout, offer an exact-amount option alongside the standard pack selection
  • Create a dynamic Stripe Payment Intent server-side for the exact USD amount
  • Webhook confirms payment and credits the exact Plutonium amount to the player account
  • Minimum purchase floor: $2.00 (to account for Stripe minimum charge of $0.50 and fee margin)

Bundle nudge: When the exact-amount option is selected, display a contextual prompt showing the next pack up — e.g. *"For better value, the Reactor pack gives you 300 Plut for $9.99 — 147 extra Plutonium free."

Acceptance Criteria

  • All Plutonium prices in the storefront display USD equivalent
  • Exact-amount purchase option available at checkout
  • Exact-amount uses dynamic Stripe Payment Intent (server-side)
  • Minimum exact-amount purchase floor set at $2.00
  • Best-value bundle prompt displayed when exact-amount option is selected
  • Fixed pack system unchanged

Notes

  • Fixed packs (Isotope → Nuclear Cache) require no changes
  • The Stripe Payment Intent must be created server-side for security
  • USD labels should be calculated dynamically using the base rate formula, not hardcoded (1 plutonium = 5 cents)

Metadata

Metadata

Labels

MonetizationapprovedApproved for a PR, if you assigned to the issue.keep-openExempt from auto-closewill not stalePRs that will not be closed by the stale action

Type

No fields configured for Task.

Projects

Status
Triage

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions