Цель урока
Разрешать завершение маршрута только после последовательных контрольных точек.
Подготовка
Workspace → Folder Checkpoints → Part Checkpoint1, Checkpoint2, Checkpoint3; отдельно Part FinishPad. ServerScriptService → Script CourseProgress.
Пошаговая работа
- Создай три контрольные точки строго в порядке маршрута.
- Запусти сервер и коснись точек последовательно.
- Попробуй сначала финиш и пропуск второй точки: финиш не должен засчитываться.
Код Luau
В примерах с двумя скриптами помести части кода в указанные разные объекты.
local Players = game:GetService("Players")
local checkpoints = workspace:WaitForChild("Checkpoints")
local progress = {}
Players.PlayerAdded:Connect(function(player) progress[player] = 0 end)
Players.PlayerRemoving:Connect(function(player) progress[player] = nil end)
for i = 1, 3 do
checkpoints:WaitForChild("Checkpoint" .. i).Touched:Connect(function(hit)
local model = hit:FindFirstAncestorOfClass("Model")
local player = model and Players:GetPlayerFromCharacter(model)
if player and progress[player] == i - 1 then
progress[player] = i
player:SetAttribute("ReachedCheckpoint", i)
end
end)
end
workspace:WaitForChild("FinishPad").Touched:Connect(function(hit)
local model = hit:FindFirstAncestorOfClass("Model")
local player = model and Players:GetPlayerFromCharacter(model)
if player and progress[player] == 3 then
progress[player] = 4
player:SetAttribute("FinishedCourse", true)
end
end)Проверяем результат
Финиш до трёх контрольных точек не засчитывается. Прогресс ведётся индивидуально.
Типичная ошибка
Не считай простое касание финишной детали достаточным доказательством прохождения карты.
Дополнительное задание
Добавь перезапуск трассы, который сбрасывает все атрибуты и progress.
Перед публикацией: протестируй код в Roblox Studio с двумя игроками и добавь собственные скриншоты редактора.
