47 lines
2.2 KiB
GDScript
47 lines
2.2 KiB
GDScript
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)")
|