mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-20 13:50:46 +00:00
PROBLEM: NPC unlocks had timing-dependent behavior: - If NPC unlocked door BEFORE room loaded: client saw it as unlocked - If NPC unlocked door AFTER room loaded: door sprite stayed locked SOLUTION: 1. Server-side persistent tracking: - Added npcUnlockedTargets array to player_state - Track all NPC unlocks separately from unlockedRooms/unlockedObjects - Initialize npcUnlockedTargets in new games 2. Server merges NPC unlock state: - filtered_room_data checks npcUnlockedTargets - Marks doors/containers as unlocked if NPC unlocked them - Works regardless of when room is loaded 3. Client updates existing sprites: - NPC unlock handler finds ALL door sprites for target room - Updates sprite state immediately after server unlock - Handles both pre-loaded and late-loaded rooms Changes: - app/models/break_escape/game.rb: Add npc_unlock_target!, npc_unlocked?, merge state in filtered_room_data - app/controllers/break_escape/games_controller.rb: Track NPC unlocks in unlock endpoint - public/break_escape/js/minigames/person-chat/person-chat-conversation.js: Update all door sprites after NPC unlock - public/break_escape/js/systems/doors.js: Export unlockDoor globally - test/integration/unlock_system_test.rb: Add 4 tests for persistent NPC unlock state