feat(economy): add /consumables shop of repeatable, expiring boosts #5

Merged
renkar merged 1 commits from fix/economy-money-safety into master 2026-08-19 17:53:13 +00:00
Owner

The economy had many coin faucets but almost no sinks: the /shop is
one-time ownership, and gambling/rob fines route to the house (which
players drain back via jackpots and heists), so they recirculate rather
than destroy coins. Result: steady inflation.

Add a consumables shop as a true recurring sink - buying destroys the
coins and grants a temporary boost, so there's always something to spend
on after gear is maxed:

  • Energiajook XL (500) - 1h of 2x earnings on /work, /beg, /crime
  • XP jook (500) - 1h of 2x EXP
  • Kohv (300) - instantly clears all cooldowns

Timed buffs live in a new active_buffs field ({kind: expiry_iso}), pruned
on read; rebuying extends the timer. Effects hook where they belong:
earn_mult in income.do_work/do_beg/do_crime, exp_buff_mult in
levels.award_exp; kohv is self-contained. New /consumables command browses
the menu (with active buffs) or buys a boost. Covered by 9 tests.

Note: active_buffs is a new PocketBase field - run
scripts/sync_pb_schema.py before deploying or buffs won't persist.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

The economy had many coin faucets but almost no sinks: the /shop is one-time ownership, and gambling/rob fines route to the house (which players drain back via jackpots and heists), so they recirculate rather than destroy coins. Result: steady inflation. Add a consumables shop as a true recurring sink - buying destroys the coins and grants a temporary boost, so there's always something to spend on after gear is maxed: - Energiajook XL (500) - 1h of 2x earnings on /work, /beg, /crime - XP jook (500) - 1h of 2x EXP - Kohv (300) - instantly clears all cooldowns Timed buffs live in a new active_buffs field ({kind: expiry_iso}), pruned on read; rebuying extends the timer. Effects hook where they belong: earn_mult in income.do_work/do_beg/do_crime, exp_buff_mult in levels.award_exp; kohv is self-contained. New /consumables command browses the menu (with active buffs) or buys a boost. Covered by 9 tests. Note: active_buffs is a new PocketBase field - run scripts/sync_pb_schema.py before deploying or buffs won't persist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
renkar added 1 commit 2026-08-19 17:53:08 +00:00
The economy had many coin faucets but almost no sinks: the /shop is
one-time ownership, and gambling/rob fines route to the house (which
players drain back via jackpots and heists), so they recirculate rather
than destroy coins. Result: steady inflation.

Add a consumables shop as a true recurring sink - buying destroys the
coins and grants a temporary boost, so there's always something to spend
on after gear is maxed:

  - Energiajook XL (500) - 1h of 2x earnings on /work, /beg, /crime
  - XP jook (500)        - 1h of 2x EXP
  - Kohv (300)           - instantly clears all cooldowns

Timed buffs live in a new active_buffs field ({kind: expiry_iso}), pruned
on read; rebuying extends the timer. Effects hook where they belong:
earn_mult in income.do_work/do_beg/do_crime, exp_buff_mult in
levels.award_exp; kohv is self-contained. New /consumables command browses
the menu (with active buffs) or buys a boost. Covered by 9 tests.

Note: active_buffs is a new PocketBase field - run
scripts/sync_pb_schema.py before deploying or buffs won't persist.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
renkar merged commit 567a82b9f2 into master 2026-08-19 17:53:13 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: renkar/tipibot#5