It works perfectly for one player but when another player touches it, it pauses the first player's gui timer.

ready_players = {}
local timer = script.Timer
local debounce = false
local rs = game:GetService("ReplicatedStorage")
local Countdown:BoolValue = script.Bool

rs.TeleportTouched.OnServerEvent:Connect(function(Player,hit,char,gui,playergui)
	timergui = gui:WaitForChild("Timer")
	if hit.Parent:FindFirstChild("Humanoid") and debounce == false then
		if not table.find(ready_players,Player.Name) then
			table.insert(ready_players,Player)
			print("in")
		debounce = true
		task.wait(1)
			hit.Parent:FindFirstChild("HumanoidRootPart").CFrame = game.Workspace.waitingRoom.CFrame
			print(ready_players)
			if Countdown.Value == false then
				Countdown.Value = true
				print("counting down")
				end
		end
	end
end)

function startGame()
	print("starting")
end

Countdown:GetPropertyChangedSignal("Value"):Connect(function()
	wait(4)	
	while true do
		task.wait(1)
			print(timer)
			timer.Value = timer.Value - 1
		timergui.Text = tostring(timer.Value)
		if timer.Value == 0 then
			startGame()
			---restart timer (w.i.p)
			task.wait(0.1)
				timer.Value = 26
			end
		end
	end)

screenshot example: i.imgur.com/yJ3JbN1.png the local script is just an ontouch with localplayer with some effects timer is just an IntValue.

thanks :)