So I'm trying to make a "Plates of Fate" type game and I got stuck on the part where I have to give each player their own plate and teleport them to their plate. This is what I managed to get so far but it only clones one plate and doesn't teleport the players.

local plates = serverstorage:WaitForChild("Plates")
local plateholder = game.Workspace:WaitForChild("Plates")
local players = game:GetService("Workspace").Players.Value

function addplate(player)
	local allplates = plates:GetChildren()
	local newplate = allplates[math.random(1, #allplates)]:clone()
	newplate.Parent = workspace.Plates
	newplate.Player.Value = player.Name
end

while true do
	print ("start")


	--Wait for players
	while true do
		wait(5)
		contestants = {}
		for _, player in pairs(game.Players:GetPlayers()) do
			if player and player.Character then
				local humanoid = player.Character:WaitForChild("Humanoid")
				if humanoid and humanoid.Health > 0 then
					table.insert(contestants, player)
				end
			end
		end
		if #contestants >= 2 then
			break
		else
			statustag.Value = "Waiting for Players"
			timertag.Value = -1
		end
	end
	
	
	--Load Plates
	statustag.Value = "Loading Plates"
	timertag.Value = -1
	plateholder:ClearAllChildren()
	wait(2)
	for _, player in pairs(contestants) do
		addplate(player)
	statustag.Value = "Plates Loaded!"
	wait(3)	

	--Teleport players to plate
	local roundplates = plateholder:GetChildren()
	for _, player in pairs(contestants) do
		if player and player.Character and #roundplates > 0 then
			local torso = player.Character:WaitForChild("Torso")
			local humanoid = player.Character:WaitForChild("Humanoid")
			local spawn = plateholder:FindFirstAncestor(player)
			if spawn and torso and humanoid then
				humanoid.Health = 100
				humanoid.WalkSpeed = 16
				torso.CFrame = CFrame.new(spawn.Position + Vector3.new(0, 3, 0))
				
				local matchtag = Instance.new("StringValue")
				matchtag.Name = "MatchTag"
				matchtag.Parent = player.Character

					end
				end
			end
		end