Not teleporting specfic team or changing team

So the purpose of this script is to pick a minigame and teleport the players to play said game. The thing is, I want the “Not Playing” Team to be teleported and be moved onto the “Playing” Team. The problem is that it’s not doing either, it teleports them and does all the other things, except for those two things. Any help?

Script:


local settingsModule = require(script:FindFirstChild("Settings"))
local onWin = (function()
	local onWinModule = script:FindFirstChild("OnWin")

	if onWinModule then
		local onWinFunction = require(onWinModule)

		if type(onWinFunction) == "function" then
			return onWinFunction
		end
	end
end)()

local remoteEvent = game:GetService("ReplicatedStorage").Event
local mapsStorage = game:GetService("ServerStorage").Maps:GetChildren()

local playersService = game:GetService("Players")

function minigameModule:isPotentialGame()
	return playersService.NumPlayers >= settingsModule.minimumPlayers
end

function minigameModule:chooseMap()
	local chosenMap = mapsStorage[math.random(1, #mapsStorage)]:Clone()
	chosenMap.Parent = workspace
	return chosenMap
end

function minigameModule:spawnPlayers()
	local playersAlive = self.playersAlive
	local spawns = self.currentMap.Spawns:GetChildren()

	local fromTeam = game.Teams["Not Playing  >:("]

	local toTeam = game.Teams.Playing

	for index = 1, #playersAlive do
		local playerData = playersAlive[index]
		local player = playerData.player

		if player.Team == fromTeam then
			player.Character:SetPrimaryPartCFrame(spawns[math.random(#spawns)].CFrame)

			player.Team = toTeam
		end
	end
end


function minigameModule:runIntermission()
	if settingsModule.intermissionTime > 0 then
		for currentTime = math.floor(settingsModule.intermissionTime), 0, -1 do
			remoteEvent:FireAllClients("Timer", currentTime)
			wait(1)
		end
	end
	remoteEvent:FireAllClients("CeaseGUIs")
end

function minigameModule:getAlivePlayers()
	local playersAlive = {}
	for _, currentPlayer in pairs(playersService:GetPlayers()) do
		local playerCharacter = currentPlayer.Character
		if playerCharacter then
			local playerHumanoidRoot = playerCharacter:FindFirstChild("HumanoidRootPart")
			local playerHumanoid = playerCharacter:FindFirstChild("Humanoid")
			if playerHumanoid and playerHumanoidRoot then
				table.insert(playersAlive, {
					player = currentPlayer,
					playerHumanoid = playerHumanoid,
					playerHumanoidRoot = playerHumanoidRoot
				})
			end
		end
	end
	return playersAlive
end

function minigameModule:isLegalGame()
	if #self:getAlivePlayers() >= settingsModule.minimumPlayers then
		return true
	end
end

function minigameModule:queryGameStart()
	if self.gameRunning then
		return
	elseif self:isPotentialGame() then
		self.gameRunning = true
		remoteEvent:FireAllClients("CeaseGUIs")
		self:runIntermission()

		if self:isLegalGame() then
			if settingsModule.roundDuration > 0 then

				self.currentMap = self:chooseMap()
				local mapWeapons = self.currentMap:FindFirstChild("Weapons")

				local playersAlive = self:getAlivePlayers()
				self.playersAlive = playersAlive

				for index = 1, #playersAlive do
					local currentPlayer = playersAlive[index]
					local backpack = currentPlayer.player.Backpack

					if backpack and mapWeapons then
						for _, weapon in ipairs(mapWeapons:GetChildren()) do
							weapon:Clone().Parent = backpack
						end
					end

					local connection
					connection = currentPlayer.playerHumanoid.Died:Connect(function()
						connection:Disconnect()
						table.remove(playersAlive, index)
						if #playersAlive < 2 then
							local winner = playersAlive[1]
							if winner then
								self:endGame(winner.player.Name .. " has won!", winner.player)
							else
								self:endGame("No one has won!")
							end
						end
					end)
				end

				if mapWeapons then
					mapWeapons:Destroy()
				end

				self:spawnPlayers()

				remoteEvent:FireAllClients("Message", self.currentMap.Name .. " was chosen!", 5)

				for currentTime = settingsModule.roundDuration, 0, -1 do
					if not self.gameRunning then
						return
					end
					remoteEvent:FireAllClients("Timer", currentTime)
					wait(1)
				end
				self:endGame("The timer ran out! No one has won!")
			end

		else
			self:endGame("Not enough players alive to begin the round!")
		end
	else
		local remainingPlayers = settingsModule.minimumPlayers - playersService.NumPlayers
		remoteEvent:FireAllClients("Message", "Waiting for " .. remainingPlayers .. " player" .. (remainingPlayers > 1 and "s" or "") .. " to join.")
	end
end

function minigameModule:endGame(outputMessage, winner)
	if self.gameRunning then

		self.gameRunning = false
		self.currentMap:Destroy()
		self.currentMap = nil

		if winner and onWin then
			onWin(winner)
		end

		for _, player in ipairs(playersService:GetPlayers()) do
			player:LoadCharacter()
		end

		wait(1)

		remoteEvent:FireAllClients("Message", outputMessage, 5)

		wait(5)

		self:queryGameStart()
	end
end

function minigameModule:removePlayer(player)
	if self.gameRunning then
		for index, playerData in ipairs(self.playersAlive) do
			if playerData.player == player then
				table.remove(self.playersAlive, index)
				if #self.playersAlive <= 1 then
					self:endGame("Not enough players to continue the game.")
				end
				break
			end
		end
	end
end

playersService.PlayerAdded:Connect(function()
	minigameModule:queryGameStart()
end)

playersService.PlayerRemoving:Connect(function(player)
	minigameModule:removePlayer(player)
end)

return minigameModule
1 Like
local teamService = game:GetService("Teams")
local teamPlaying = teamService.Playing
local teamNotPlaying = teamService.NotPlaying

local pl = game.Players:GetPlayers() for _,plr in pl do print(plr.Name) 
  if plr.Team == teamNotPlaying then 
    plr.Team = teamPlaying
    plr.Character:MoveTo(Vector3.new(0,0,0)) 
    print(plr.Name .. " set to 'Playing team' and teleported.")
  end 
end 

where would take go in the script, would I put it with the other team change stuff?

After the intermission I assume. Depends on when you want to do it.

This already should set the team to players and teleport. But this could be made much better.

local teamService = game:GetService("Teams")
local teamPlaying = teamService.Playing
local teamNotPlaying = teamService.NotPlaying

function minigameModule:spawnPlayers()
	local playersAlive = self:getAlivePlayers()
        for i,plr in ipairs(playersAlive) do
              if plr.Team == teamNotPlaying then 
                  plr.Team = teamPlaying
                  plr.Character:MoveTo(Vector3.new(0,0,0)) 
                print(plr.Name .. " set to 'Playing team' and teleported.")
            end 
       end
end)

So now noone teleports at all, any help?

Idk what you did, or what’s going wrong.

I’m not sure tbh, I simply put it in place of the other, and it doesn’t teleport or change their team despite them being on not playing.

Errors? Check the output. Put some prints around the code to see what is working and what is not.

There are no errors, and I added a few prints for when it should teleport you and change your team.
image
I’ve got no clue otherwise.

Maybe try using the teamcolors instead of the team object. Player.TeamColor = BrickColor.new()