Цель урока
Создать один серверный цикл раундов и отображать время у всех игроков.
Подготовка
Выключи скрипт RoundStates урока 65 перед этим упражнением. ServerScriptService → Script RoundManager. StarterGui → ScreenGui → TextLabel RoundLabel → LocalScript.
Пошаговая работа
- Запусти один RoundManager, проверь атрибуты игры.
- Добавь LocalScript в RoundLabel; следи за обновлением времени.
- Проверь двух игроков: время одинаковое для обоих.
Код Luau
В примерах с двумя скриптами помести части кода в указанные разные объекты.
-- Script RoundManager в ServerScriptService
local Players = game:GetService("Players")
while true do
workspace:SetAttribute("RoundState", "Waiting")
repeat task.wait(1) until #Players:GetPlayers() >= 1
workspace:SetAttribute("RoundState", "Running")
for seconds = 60, 0, -1 do
workspace:SetAttribute("RoundSeconds", seconds)
task.wait(1)
end
workspace:SetAttribute("RoundState", "Finished")
task.wait(5)
end
-- Отдельный LocalScript в RoundLabel
local label = script.Parent
local function refresh()
local state = workspace:GetAttribute("RoundState") or "Waiting"
local timeLeft = workspace:GetAttribute("RoundSeconds") or 0
label.Text = state .. ": " .. timeLeft
end
workspace:GetAttributeChangedSignal("RoundState"):Connect(refresh)
workspace:GetAttributeChangedSignal("RoundSeconds"):Connect(refresh)
refresh()Проверяем результат
Оба игрока видят одно серверное время; после нуля наступает Finished.
Типичная ошибка
Убедись, что цикл RoundManager только один. Два цикла могут перезаписывать время.
Дополнительное задание
Измени таймер на 30 секунд и добавь цветное предупреждение при последних 10 секундах.
Перед публикацией: протестируй код в Roblox Studio с двумя игроками и добавь собственные скриншоты редактора.
