add Carte Blanche trinket: equip system, gatekeeper multi-slot, mini tooltip portal; new token type Token.CARTE ('carte') with fa-money-check icon; migrations 0010-0012:
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
CARTE type, User.equipped_trinket FK, Token.slots_claimed field; post_save signal sets equipped_trinket=COIN for new users, PASS for staff; kit bag now shows only the equipped trinket in Trinkets section; Game Kit applet mini tooltip portal shows Equipped or Equip Trinket per token; AJAX POST equip-trinket id updates equippedId in-place; equip btn now works for COIN, PASS, and CARTE (data-token-id added to all three); Gatekeeper CARTE flow: drop_token sets current_room (no slot reserved); each empty slot up to slots_claimed+1 gets a drop-token-btn; slots_claimed high-water mark advances on fill, never decrements; highest CARTE-filled slot gets NVM (release_slot); token_return_btn resets current_room + slots_claimed + un-fills all CARTE slots; gate_status always returns full template so launch-game-btn persists via HTMX when gate_status == OPEN; room.html includes gatekeeper when GATHERING or OPEN; new FT test_trinket_carte_blanche.py (2 tests, both passing); 299 tests green
This commit is contained in:
@@ -19,15 +19,15 @@ from apps.lyric.models import PaymentMethod, Token, User, Wallet
|
||||
APPLET_ORDER = ["wallet", "new-note", "my-notes", "username", "palette"]
|
||||
UNLOCKED_PALETTES = frozenset([
|
||||
"palette-default",
|
||||
"palette-sepia",
|
||||
"palette-monochrome-light",
|
||||
"palette-monochrome-dark",
|
||||
"palette-sepia",
|
||||
])
|
||||
PALETTES = [
|
||||
{"name": "palette-default", "label": "Earthman", "locked": False},
|
||||
{"name": "palette-sepia", "label": "Sepia", "locked": False},
|
||||
{"name": "palette-monochrome-light", "label": "Monochrome (Light)", "locked": False},
|
||||
{"name": "palette-monochrome-dark", "label": "Monochrome (Dark)", "locked": False},
|
||||
{"name": "palette-sepia", "label": "Sepia", "locked": False},
|
||||
{"name": "palette-nirvana", "label": "Nirvana", "locked": True},
|
||||
{"name": "palette-sheol", "label": "Sheol", "locked": True},
|
||||
{"name": "palette-inferno", "label": "Inferno", "locked": True},
|
||||
@@ -179,7 +179,7 @@ def kit_bag(request):
|
||||
)
|
||||
tithe_tokens = [t for t in tokens if t.token_type == Token.TITHE]
|
||||
return render(request, "core/_partials/_kit_bag_panel.html", {
|
||||
"tokens": tokens,
|
||||
"equipped_trinket": request.user.equipped_trinket,
|
||||
"free_token": free_tokens[0] if free_tokens else None,
|
||||
"free_count": len(free_tokens),
|
||||
"tithe_token": tithe_tokens[0] if tithe_tokens else None,
|
||||
|
||||
Reference in New Issue
Block a user