Главная → Roblox Studio → Три полезных скрипта на Lua для новичка
Три полезных скрипта на Lua для новичка
Скрипты в Roblox пишут на Luau — это Lua с типами и оптимизациями от платформы. Ниже три коротких примера, которые закрывают половину задач первого плейса: смертельное препятствие, счёт в таблице лидеров и телепорт между точками. Их можно скопировать целиком и подставить свои значения.
Куда класть скрипты
ScriptвServerScriptService— код работает на сервере, видит всех игроков, подходит для правил игры и начисления очков.Scriptвнутри детали вWorkspace— код привязан к конкретному объекту: кнопке, ловушке, платформе.LocalScriptвStarterPlayerScriptsилиStarterGui— выполняется на устройстве игрока: интерфейс, камера, управление.
Перепутанное место — причина большинства «скрипт не работает». Серверный код в StarterGui не запустится, а LocalScript внутри детали в Workspace — тоже нет.
1. Смертельное препятствие
Классический килбрик: касание детали обнуляет здоровье. Положите Script внутрь детали.
local part = script.Parent
part.Touched:Connect(function(hit)
local humanoid = hit.Parent:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = 0
end
end)
FindFirstChildWhichIsA("Humanoid") нужен, чтобы скрипт срабатывал именно на персонажа, а не на любую упавшую деталь.
2. Счётчик в таблице лидеров
Папка с именем leaderstats внутри игрока автоматически показывается в списке справа. Скрипт кладут в ServerScriptService.
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local stats = Instance.new("Folder")
stats.Name = "leaderstats"
stats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Монеты"
coins.Value = 0
coins.Parent = stats
end)
Чтобы начислить монеты, достаточно найти это значение и изменить его: player.leaderstats["Монеты"].Value += 10.
Значение в leaderstats живёт только до выхода игрока с сервера. Чтобы прогресс сохранялся между сессиями, понадобится DataStoreService — это следующая тема после того, как разберётесь с этими тремя примерами.
3. Телепорт между двумя площадками
Наступил на одну платформу — оказался у другой. Скрипт кладут внутрь первой детали, вторую называют TargetPad и оставляют в Workspace.
local pad = script.Parent
local target = workspace:WaitForChild("TargetPad")
local busy = false
pad.Touched:Connect(function(hit)
if busy then return end
local root = hit.Parent:FindFirstChild("HumanoidRootPart")
if not root then return end
busy = true
root.CFrame = target.CFrame + Vector3.new(0, 5, 0)
task.wait(1)
busy = false
end)
Переменная busy здесь обязательна: без неё событие Touched срабатывает десятки раз подряд, и персонажа начинает трясти между площадками. Смещение Vector3.new(0, 5, 0) поднимает игрока над платформой, чтобы он не застрял внутри неё.
Как искать ошибки
- Окно
Output(вкладка View) показывает ошибки красным и номер строки. print("сюда дошло")в подозрительном месте — самый быстрый способ понять, выполняется код или нет.- Опечатка в имени объекта — причина ошибки чаще, чем сама логика. Имена чувствительны к регистру.