So I hired a dev to help me with a script, but they still have not figured it out, sooo, I am coming here for help. Basically, the script is supposed to choose a team for each player, and then teleport them when the game starts and restart after a while. But the script is not working with no errors. It is in the ServerScriptService. Here is the code.

local NumPlayers = 0
local Players = {}
local Started = false
wait(2)
local function RemovePlayer(Name)
	for i,v in pairs(Players) do
		if v == Name then
			--print("Removed "..Players[i].." | "..Name)
			table.remove(Players,i)
		end
		
	NumPlayers = 0
	for i,v in pairs(Players) do
		NumPlayers = NumPlayers + 1
	end
	
	end
end

local function Teleport(Plr,Position)
	repeat wait(.1) until game.Players:FindFirstChild(tostring(Plr)).Character
	game.Players:FindFirstChild(tostring(Plr)).Character.HumanoidRootPart.CFrame = CFrame.new(Position)
end


script:WaitForChild("Restart").Event:connect(function()
	Started = true
	--Clean table
	for i,v in pairs(Players) do
		table.remove(Players,1)
	end
	
	--Add players to table
	for i,v in pairs(game.Players:GetChildren()) do
		table.insert(Players,tostring(v))
	end
	
	--Choose SCP
	local m = math.random(1,NumPlayers)
	game.Players:FindFirstChild(Players[m]).Team = game.Teams.SCP
	game.Players:FindFirstChild(Players[m]).Character.Humanoid.MaxHealth = 400
	game.Players:FindFirstChild(Players[m]).Character.Humanoid.Health = 400
	game.Players:FindFirstChild(Players[m]).Character.Humanoid.WalkSpeed = 10
	Teleport(game.Players:FindFirstChild(Players[m]),game.Workspace.SSpawn.Position)
	RemovePlayer(tostring(game.Players:FindFirstChild(Players[m])))
	--Choose Guards
	if NumPlayers >= 4 then
		for i = 1,2 do
			local m = math.random(1,NumPlayers)
			game.Players:FindFirstChild(Players[m]).Team = game.Teams.Guards
			Teleport(game.Players:FindFirstChild(Players[m]),game.Workspace.RSpawn.Position)
			RemovePlayer(tostring(game.Players:FindFirstChild(Players[m])))
		end
	else
	local m = math.random(1,NumPlayers)
	game.Players:FindFirstChild(Players[m]).Team = game.Teams.Guards
	Teleport(game.Players:FindFirstChild(Players[m]),game.Workspace.RSpawn.Position)
	RemovePlayer(tostring(game.Players:FindFirstChild(Players[m])))
	end
	
	--Choose Scientist Or Class-D Or GRU-P
	local c = 2
	for i = 1, NumPlayers do
		if c == 2 then c = 3 elseif c == 3 then c = 1 elseif c == 1 then c = 2 end
		
		if c == 1 then
		local m = math.random(1,NumPlayers)
		game.Players:FindFirstChild(Players[m]).Team = game.Teams["Class-D"]
		Teleport(game.Players:FindFirstChild(Players[m]),game.Workspace.DSpawn.Position)
			RemovePlayer(tostring(game.Players:FindFirstChild(Players[m])))
			elseif c == 2 then
		local m = math.random(1,NumPlayers)
		game.Players:FindFirstChild(Players[m]).Team = game.Teams.Scientists
		Teleport(game.Players:FindFirstChild(Players[m]),game.Workspace.RSpawn.Position)
		RemovePlayer(tostring(game.Players:FindFirstChild(Players[m])))
		
		elseif c == 3 then
		local m = math.random(1,NumPlayers)
		game.Players:FindFirstChild(Players[m]).Team = game.Teams["GRU-P"]
		Teleport(game.Players:FindFirstChild(Players[m]),game.Workspace.GPFSpawn.Position)
		RemovePlayer(tostring(game.Players:FindFirstChild(Players[m])))
		end
		wait(5)
		--Game over
		for i,v in pairs(game.Players:GetChildren()) do
		v.Character:BreakJoints()
		end
		wait(5) --Time before a new round starts
		CheckPlayerCount()
		wait(.1)
	script.Restart:Fire()
	end
	
end)


local function CheckPlayerCount()
	NumPlayers = 0
	for i,v in pairs(game.Players:GetChildren()) do
		NumPlayers = NumPlayers + 1
	end
end

game.Players.PlayerAdded:Connect(function()
	CheckPlayerCount()
	wait(.1)
	if NumPlayers >= 4 and not Started then--4
		script.Restart:Fire()
	end
end)

1 comment

0

What did the dev say when you asked him about fixing it?