точно есть дэшм

This commit is contained in:
2026-07-21 00:27:17 +07:00
parent 1df926f1d8
commit d74fa3bd80
601 changed files with 2375919 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
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)