extends Node # Хранилище данных, которое живет между уровнями var saved_health: float = 100.0 var saved_weapons: Array = [] var saved_weapon_index: int = 0 var saved_ammo_dict: Dictionary = {} var is_transfer_ready: bool = false # Флаг, что у нас есть сохраненные данные # --- ФУНКЦИЯ 1: СОХРАНЕНИЕ ДАННЫХ ПЕРЕД СМЕНОЙ СЦЕНЫ --- func save_player_data(player: Node) -> void: if player == null: return # 1. Запоминаем Здоровье var health_comp = player.find_child("HealthComponent", true, false) if health_comp: saved_health = health_comp.current_health # 2. Запоминаем Оружие и Патроны # Найди этот блок внутри save_player_data в GameTransfer.gd: var weapon_manager = player.find_child("WeaponManager", true, false) if weapon_manager: saved_weapons = weapon_manager.weaponStack.duplicate() saved_weapon_index = weapon_manager.weaponIndex # ИСПРАВЛЕНО: Более глубокий поиск менеджера патронов, если автор спрятал его в детях var ammo_manager = weapon_manager.find_child("AmmoManager", true, false) if ammo_manager == null and "ammoManager" in weapon_manager: ammo_manager = weapon_manager.ammoManager if ammo_manager and "ammoDict" in ammo_manager: saved_ammo_dict = ammo_manager.ammoDict.duplicate() is_transfer_ready = true print("[ПЕРЕНОС] Данные игрока успешно сохранены в кэш!") # --- ФУНКЦИЯ 2: ВОССТАНОВЛЕНИЕ ДАННЫХ НА НОВОМ УРОВНЕ --- func load_player_data(player: Node) -> void: if player == null or not is_transfer_ready: return # 1. Возвращаем Здоровье var health_comp = player.find_child("HealthComponent", true, false) if health_comp: health_comp.current_health = saved_health # Обновляем цифры на новом HUD var health_ui = player.find_child("PlayerHealthUI", true, false) if health_ui and health_ui.has_method("_process"): health_ui.notification(NOTIFICATION_PROCESS) # 2. Возвращаем Оружие и Патроны var weapon_manager = player.find_child("WeaponManager", true, false) if weapon_manager: weapon_manager.weaponStack = saved_weapons.duplicate() weapon_manager.weaponIndex = saved_weapon_index if "ammoManager" in weapon_manager and weapon_manager.ammoManager: weapon_manager.ammoManager.ammoDict = saved_ammo_dict.duplicate() # Принудительно заставляем ассет достать правильное оружие из памяти if weapon_manager.has_method("changeWeapon"): weapon_manager.changeWeapon(saved_weapon_index) print("[ПЕРЕНОС] Снаряжение и ХП успешно возвращены игроку на новом уровне!")