← Все практические скрипты
NPC и задания · Уверенный · 35 мин

Диалог с NPC: подсказка и награда

NPC разговаривает с игроком и выдаёт одноразовую награду за сеанс.

Иллюстрация: Диалог с NPC: подсказка и награда
🎯 Что получится

NPC выдаёт подсказки и награду только один раз за текущий сеанс.

1. Подготовьте объект

Где разместить: Отдельные блоки кода: создайте файлы в указанных местах

Создайте NPC-модель с Head в Workspace и назовите GuideNPC. Можно использовать Rig Builder.
В ServerScriptService создайте Script NPCDialogueServer, а в StarterPlayerScripts — LocalScript NPCDialogueClient.
Не добавляйте отдельный RemoteEvent: сервер создаёт его автоматически. В Play подойдите к NPC и нажмите E. В верхней части экрана появится подсказка.
Для выдачи 5 монет нужен leaderstats.Coins. Если монет ещё нет, награда не сгорает: добавьте систему Coins и поговорите снова.

Карта файлов в Explorer

Это пути для скриптов из блоков кода ниже. Остальные объекты создайте по инструкции.

├── ServerScriptService
│   └── NPCDialogueServer (Script)
└── StarterPlayer
    └── StarterPlayerScripts
        └── NPCDialogueClient (LocalScript)

2. Вставьте код

ServerScriptService/NPCDialogueServer (Script)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local npc = workspace:WaitForChild("GuideNPC")
local head = npc:WaitForChild("Head")
local event = ReplicatedStorage:FindFirstChild("IgroNPCMessage")
if not event then
    event = Instance.new("RemoteEvent")
    event.Name = "IgroNPCMessage"
    event.Parent = ReplicatedStorage
end
local prompt = head:FindFirstChildOfClass("ProximityPrompt") or Instance.new("ProximityPrompt")
prompt.ActionText = "Поговорить"
prompt.ObjectText = "Проводник"
prompt.MaxActivationDistance = 10
prompt.Parent = head
local rewarded = {}
prompt.Triggered:Connect(function(player)
    if rewarded[player] then
        event:FireClient(player, "Не забывайте искать подсказки на стенах!")
        return
    end
    local stats = player:FindFirstChild("leaderstats")
    local coins = stats and stats:FindFirstChild("Coins")
    if not coins then
        event:FireClient(player, "Привет! Найдите выход. Для награды сначала добавьте систему Coins.")
        return -- Награда не потрачена: после установки Coins можно обратиться снова.
    end
    rewarded[player] = true
    coins.Value += 5
    event:FireClient(player, "Привет! Найдите выход. Вам начислено 5 монет!")
end)
Players.PlayerRemoving:Connect(function(player) rewarded[player] = nil end)
StarterPlayer/StarterPlayerScripts/NPCDialogueClient (LocalScript)
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local event = ReplicatedStorage:WaitForChild("IgroNPCMessage")
local gui = Instance.new("ScreenGui")
gui.Name = "GuideMessages"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")
local label = Instance.new("TextLabel")
label.Size = UDim2.fromScale(0.7, 0.15)
label.Position = UDim2.fromScale(0.15, 0.08)
label.BackgroundColor3 = Color3.fromRGB(25, 36, 62)
label.TextColor3 = Color3.fromRGB(255, 255, 255)
label.TextScaled = true
label.TextWrapped = true
label.Visible = false
label.Parent = gui
local serial = 0
event.OnClientEvent:Connect(function(message)
    serial += 1
    local current = serial
    label.Text = tostring(message)
    label.Visible = true
    task.delay(5, function()
        if current == serial then label.Visible = false end
    end)
end)

3. Проверьте в игре

Нажмите Play в Roblox Studio и проверьте действие механики. Если механика не работает, откройте окно Output и проверьте тип скрипта, его расположение и названия объектов.

Ваш прогресс

Когда проверите механику в Roblox Studio, отметьте практику как выполненную. Отметка хранится только в этом браузере, не в личном кабинете.

Если объединяете несколько скриптов

Добавляйте механики по одной и проверяйте окно Output. Не создавайте несколько одинаковых систем монет или интерфейсов; скрипты, меняющие WalkSpeed, прыжок или освещение, могут влиять друг на друга.

⭐ Три шага к собственной игре
1. Повторите и измените

Измените текст подсказки.

2. Улучшите

Добавьте второго NPC с другим именем и отдельным скриптом.

3. Придумайте своё

Создайте небольшой квест с тремя персонажами, которые дают разные подсказки.

4. Проверьте себя

Зачем хранить факт получения награды за диалог?

🛠 Если не работает

RemoteEvent создаёт сервер. Убедитесь, что NPC содержит Head; два одинаковых скрипта на одном NPC устанавливать не нужно.