extends StaticBody3D # ID оружия из WeaponResource (например: 0 - пистолет, 1 - автомат) @export var weaponIdToGive : int = 0 func _on_detect_area_area_entered(area: Area3D): # Проверяем, что в зону вошел именно игрок if area.get_parent() is PlayerCharacter: var playChar = area.get_parent() # 1. Сначала проверяем, есть ли вообще у игрока LinkComponent (как в вашем ящике) var linkComponent : Node3D = playChar.get_node_or_null("LinkComponent") if linkComponent != null: # 2. Ищем WeaponManager напрямую внутри игрока (playChar) на любой глубине var weapon_manager = playChar.find_child("WeaponManager", true, false) # Если по имени "WeaponManager" не нашло, попробуем найти скрипт, где есть weaponStack if weapon_manager == null: for child in playChar.get_children(): if "weaponStack" in child: weapon_manager = child break # 3. Если менеджер успешно найден, выполняем подбор if weapon_manager and "weaponStack" in weapon_manager: # Проверяем, нет ли этого оружия уже в инвентаре if not weapon_manager.weaponStack.has(weaponIdToGive): # Добавляем ID оружия в стек игрока weapon_manager.weaponStack.append(weaponIdToGive) # Обновляем текущий индекс оружия на только что подобранное weapon_manager.weaponIndex = weapon_manager.weaponStack.size() - 1 # Вызываем оригинальную функцию смены оружия weapon_manager.changeWeapon(weaponIdToGive) # Удаляем объект оружия с земли queue_free() else: print("У игрока уже есть это оружие в weaponStack") else: print("КРИТИЧЕСКАЯ ОШИБКА: Узел WeaponManager вообще не найден внутри сцены игрока!") else: print("Player character can't pickup weapons (LinkComponent missing)")