extends StaticBody3D @export var dialogue_data: Array[Dictionary] = [ {"name": "Сталкер", "text": "Привет! Наконец-то ты подошел."}, {"name": "Игрок", "text": "Привет. Что за проблемы со скриптами?"}, {"name": "Сталкер", "text": "Да вот, теперь и подсказки работают как надо!"} ] var is_player_inside: bool = false var ui_node: Node = null var detect_area: Area3D = null func _ready() -> void: detect_area = $DetectArea if detect_area: print("[NPC] Зона DetectArea найдена. Мониторинг подсказок включен.") func _process(_delta: float) -> void: if detect_area == null: return # Опрашиваем зону на наличие игрока var overlapping_bodies = detect_area.get_overlapping_bodies() var found_player_this_frame = false for body in overlapping_bodies: var weapon_manager = body.find_child("WeaponManager", true, false) if weapon_manager == null and body.get_parent(): weapon_manager = body.get_parent().find_child("WeaponManager", true, false) if weapon_manager != null or "Player" in body.name or "Character" in body.name: found_player_this_frame = true break # Игрок ТОЛЬКО ЧТО ЗАШЕЛ в зону NPC if found_player_this_frame and not is_player_inside: is_player_inside = true # Ищем узел интерфейса на сцене ui_node = get_tree().current_scene.find_child("DialogueUI", true, false) if ui_node == null: ui_node = get_tree().current_scene.find_child("dialogue_ui", true, false) # ВКЛЮЧАЕМ ПОДСКАЗКУ «Нажмите E» if ui_node and ui_node.has_method("show_prompt"): ui_node.show_prompt() # Игрок ТОЛЬКО ЧТО ВЫШЕЛ из зоны NPC elif not found_player_this_frame and is_player_inside: is_player_inside = false # ПРЯЧЕМ ПОДСКАЗКУ «Нажмите E» if ui_node and ui_node.has_method("hide_prompt"): ui_node.hide_prompt() if ui_node and ui_node.has_method("end_dialogue"): ui_node.end_dialogue() # Проверка нажатия кнопки для старта диалога if is_player_inside: if Input.is_key_pressed(KEY_E): if ui_node and ui_node.has_method("start_dialogue"): # Прячем подсказку, так как диалог уже начался if ui_node.has_method("hide_prompt"): ui_node.hide_prompt() ui_node.start_dialogue(dialogue_data)