From 8328374e5feb9480a9c660135d135a2ea6f9fd62 Mon Sep 17 00:00:00 2001 From: "Z. Cliffe Schreuders" Date: Sat, 22 Nov 2025 00:46:56 +0000 Subject: [PATCH] Add logging and name fallback to unlock validation - Add detailed logging to validate_unlock method to debug validation issues - Check both object 'id' and 'name' fields when searching for objects - Log password comparison details for debugging This helps diagnose why correct passwords might not be accepted. --- app/models/break_escape/game.rb | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/models/break_escape/game.rb b/app/models/break_escape/game.rb index 13b9e3f..eb114b5 100644 --- a/app/models/break_escape/game.rb +++ b/app/models/break_escape/game.rb @@ -140,6 +140,8 @@ module BreakEscape # Unlock validation def validate_unlock(target_type, target_id, attempt, method) + Rails.logger.info "[BreakEscape] validate_unlock: type=#{target_type}, id=#{target_id}, attempt=#{attempt}, method=#{method}" + if target_type == 'door' room = room_data(target_id) return false unless room && room['locked'] @@ -155,20 +157,30 @@ module BreakEscape false end else - # Find object in all rooms + # Find object in all rooms - check both id and name scenario_data['rooms'].each do |_room_id, room_data| - object = room_data['objects']&.find { |obj| obj['id'] == target_id } + object = room_data['objects']&.find { |obj| + obj['id'] == target_id || obj['name'] == target_id + } + + if object + Rails.logger.info "[BreakEscape] Found object: id=#{object['id']}, name=#{object['name']}, locked=#{object['locked']}, requires=#{object['requires']}" + end + next unless object && object['locked'] case method when 'key' return object['requires'] == attempt when 'pin', 'password' - return object['requires'].to_s == attempt.to_s + result = object['requires'].to_s == attempt.to_s + Rails.logger.info "[BreakEscape] Password validation: required='#{object['requires']}', attempt='#{attempt}', result=#{result}" + return result when 'lockpick' return true end end + Rails.logger.warn "[BreakEscape] Object not found or not locked: #{target_id}" false end end