Both Answers above are correct answers, However I am going to suggest some changes.
When users join whatever text is there will be different for each one of them as their timer would be off.
Create a script in ServerScriptService and create a StringValue in ReplicatedStorage.
from there the script in the GUI should be a localscript, while the script in the ServerScriptService should be just a regular script (aka a server script)
Script in ServerScriptService code:
local Text = game.ReplicatedStorage:WaitForChild("Value")
while true do
Text.Value = "Role Call"
wait(120)
Text.Value = "Free Period"
wait(600)
Text.Value = "Lunch Period"
wait(300)
Text.Value = "Cell Time"
wait(360)
Text.Value = "Short Free Period"
wait(300)
Text.Value = "Sleep Period"
wait(480)
end
LocalScript in GUI code:
local Txt = script.Parent
local Info = game.ReplicatedStorage.Value.Value
Info.Changed:Connect(function()
Txt.Text = Info.Value
end)
A LocalScript can access anything in ReplicatedStorage, think of it like a shared space between the server and the client.