Добавить в корзинуПозвонить
Найти в Дзене
IT Step by step

🎮 Разбор игрового момента: смена иконки у NPC-квестодателя в Roblox

В нашей игре игрок берёт квест у NPC. После этого над головой NPC иконка со знаком вопроса меняется на другую - чтобы было видно, что квест уже взят. Вот как это реализовано на Lua в Roblox Studio! 🔹 Скрипт для StarterPlayerScripts (клиентский localScript) local npcHead = workspace.Sylvia:WaitForChild("Head") -- Находим голову NPC по имени "Head" в модели Sylvia local billboardGui = npcHead:FindFirstChild("BillboardGui") -- Ищем BillboardGui над головой NPC local imageLabel = billboardGui and billboardGui:FindFirstChild("ImageLabel") -- Находим ImageLabel с иконкой (если BillboardGui существует) local remote = npcHead:FindFirstChild("QuestStatusEvent") -- Ищем RemoteEvent для получения сигнала от сервера local QUEST_TAKEN_IMAGE = "rbxassetid://000000" -- ID картинки, которая появится после взятия квеста if remote and imageLabel then remote.OnClientEvent:Connect(function(questTaken) -- Подписываемся на событие от сервера if questTaken then imageLabel.Image = QUEST_TAKEN_IMAGE -- Меняе

В нашей игре игрок берёт квест у NPC. После этого над головой NPC иконка со знаком вопроса меняется на другую - чтобы было видно, что квест уже взят. Вот как это реализовано на Lua в Roblox Studio!

🔹 Скрипт для StarterPlayerScripts (клиентский localScript)

local npcHead = workspace.Sylvia:WaitForChild("Head") -- Находим голову NPC по имени "Head" в модели Sylvia
local billboardGui = npcHead:FindFirstChild("BillboardGui") -- Ищем BillboardGui над головой NPC
local imageLabel = billboardGui and billboardGui:FindFirstChild("ImageLabel") -- Находим ImageLabel с иконкой (если BillboardGui существует)
local remote = npcHead:FindFirstChild("QuestStatusEvent") -- Ищем RemoteEvent для получения сигнала от сервера
local QUEST_TAKEN_IMAGE = "rbxassetid://000000" -- ID картинки, которая появится после взятия квеста
if remote and imageLabel then
remote.OnClientEvent:Connect(function(questTaken) -- Подписываемся на событие от сервера
if questTaken then
imageLabel.Image = QUEST_TAKEN_IMAGE -- Меняем иконку на новую, если квест взят
end
end)
end

🔹 Скрипт для ServerScriptService (серверный)

local npcHead = workspace.Sylvia:WaitForChild("Head") -- Находим голову NPC по имени "Head" в модели Sylvia
local proximityPrompt = npcHead:FindFirstChild("ProximityPrompt") -- Ищем ProximityPrompt (кнопка взаимодействия)
local remote = Instance.new("RemoteEvent", npcHead) -- Создаём RemoteEvent для связи с клиентом
remote.Name = "QuestStatusEvent" -- Даём событию имя
proximityPrompt.Triggered:Connect(function(player) -- Когда игрок активирует ProximityPrompt
remote:FireClient(player, true) -- Отправляем игроку сигнал: квест взят (true)
end)

📝 Что происходит в игре?

✨Игрок подходит к NPC и видит значок вопроса над головой персонажа.

✨Нажимает на ProximityPrompt (например, кнопку "Взять квест").

✨Сервер отправляет сигнал только этому игроку, что квест взят.

✨У игрока меняется картинка над головой NPC - теперь видно, что квест уже взят именно этим игроком!

💡 Почему это важно?

Такой подход позволяет каждому игроку видеть свой статус квеста, не мешая другим. Это удобно для индивидуальных заданий и делает игру более интерактивной!

Посмотреть как это было реализовано в игре можно в видео на моих каналах:

Ссылка на видео: YouTube

Ссылка на видео: RUTUBE

Если хотите больше разборов игровых механик или есть вопросы по скриптам - пишите в комментариях! 👇

Терри и Тим всегда на связи 🐢🎧

#Roblox #Lua #GameDev