When a player joins the game, he spawns at a spawn location and then gets teleported onto one of the spawn plates. The spawn plates have a bool value which state if a player has taken a spawn plate or not. Once a player takes it, it will set a value in their PlayerGui to true. This works pretty well but sometimes two or three players might be teleported to the same plate. Also, sometimes the player doesn't get teleported at all and stays at the original spawn location. There are no errors.
local takenPlates = {} -- empty table containing used plates
takenPlates[1] = 0
takenPlates[2] = 0
takenPlates[3] = 0
takenPlates[4] = 0
takenPlates[5] = 0
takenPlates[6] = 0
takenPlates[7] = 0
takenPlates[8] = 0
takenPlates[9] = 0
takenPlates[10] = 0
takenPlates[11] = 0
takenPlates[12] = 0
takenPlates[13] = 0
takenPlates[14] = 0
takenPlates[15] = 0
takenPlates[16] = 0
takenPlates[17] = 0
takenPlates[18] = 0
takenPlates[19] = 0
takenPlates[20] = 0
-- What you would need to do is create enough plates to accomodate a full server, so if a server holds 20 maximim plateyers, create 20 plates.
local platesModel = workspace.spawnPlates
for _,plr in pairs(game.Players:GetPlayers()) do
local num = math.random(1,20)
local plate = platesModel["T"..num] --Pick random plate
local p = game.Players.LocalPlayer.Character
print(num)
if num ~= takenPlates[num] then --Check that the selected plate is already taken
--Code teleportation plr:MoveTo(game.Workspace.spawnPlates["T"..num].Part.Position)
print("Entered 1")
if num == 1 then
p:MoveTo(workspace.spawnPlates.T1.Part.Position)
end
if num == 2 then
p:MoveTo(workspace.spawnPlates.T2.Part.Position)
end
if num == 3 then
p:MoveTo(workspace.spawnPlates.T3.Part.Position)
end
if num == 4 then
p:MoveTo(workspace.spawnPlates.T4.Part.Position)
end
if num == 5 then
p:MoveTo(workspace.spawnPlates.T5.Part.Position)
end
if num == 6 then
p:MoveTo(workspace.spawnPlates.T6.Part.Position)
end
if num == 7 then
p:MoveTo(workspace.spawnPlates.T7.Part.Position)
end
if num == 8 then
p:MoveTo(workspace.spawnPlates.T8.Part.Position)
end
if num == 9 then
p:MoveTo(workspace.spawnPlates.T9.Part.Position)
end
if num == 10 then
p:MoveTo(workspace.spawnPlates.T10.Part.Position)
end
if num == 11 then
p:MoveTo(workspace.spawnPlates.T11.Part.Position)
end
if num == 12 then
p:MoveTo(workspace.spawnPlates.T12.Part.Position)
end
if num == 13 then
p:MoveTo(workspace.spawnPlates.T13.Part.Position)
end
if num == 14 then
p:MoveTo(workspace.spawnPlates.T14.Part.Position)
end
if num == 15 then
p:MoveTo(workspace.spawnPlates.T15.Part.Position)
end
if num == 16 then
p:MoveTo(workspace.spawnPlates.T16.Part.Position)
end
if num == 17 then
p:MoveTo(workspace.spawnPlates.T17.Part.Position)
end
if num == 18 then
p:MoveTo(workspace.spawnPlates.T18.Part.Position)
end
if num == 19 then
p:MoveTo(workspace.spawnPlates.T19.Part.Position)
end
if num == 20 then
p:MoveTo(workspace.spawnPlates.T20.Part.Position)
end
takenPlates[num] = num --Insert taken plate into table
else
repeat num = math.random(1,20) plate = platesModel["T"..num] wait() until plate ~= num -- Keep trying to find an available plate until one has been found
--plr:MoveTo(game.Workspace.spawnPlates["T"..num].Part.Position)
print("Entered 2")
if num == 1 then
p:MoveTo(game.Workspace.spawnPlates.T1.Part.Position)
end
if num == 2 then
p:MoveTo(game.Workspace.spawnPlates.T2.Part.Position)
end
if num == 3 then
p:MoveTo(game.Workspace.spawnPlates.T3.Part.Position)
end
if num == 4 then
p:MoveTo(game.Workspace.spawnPlates.T4.Part.Position)
end
if num == 5 then
p:MoveTo(game.Workspace.spawnPlates.T5.Part.Position)
end
if num == 6 then
p:MoveTo(game.Workspace.spawnPlates.T6.Part.Position)
end
if num == 7 then
p:MoveTo(game.Workspace.spawnPlates.T7.Part.Position)
end
if num == 8 then
p:MoveTo(game.Workspace.spawnPlates.T8.Part.Position)
end
if num == 9 then
p:MoveTo(game.Workspace.spawnPlates.T9.Part.Position)
end
if num == 10 then
p:MoveTo(game.Workspace.spawnPlates.T10.Part.Position)
end
if num == 11 then
p:MoveTo(game.Workspace.spawnPlates.T11.Part.Position)
end
if num == 12 then
p:MoveTo(game.Workspace.spawnPlates.T12.Part.Position)
end
if num == 13 then
p:MoveTo(game.Workspace.spawnPlates.T13.Part.Position)
end
if num == 14 then
p:MoveTo(game.Workspace.spawnPlates.T14.Part.Position)
end
if num == 15 then
p:MoveTo(game.Workspace.spawnPlates.T15.Part.Position)
end
if num == 16 then
p:MoveTo(game.Workspace.spawnPlates.T16.Part.Position)
end
if num == 17 then
p:MoveTo(game.Workspace.spawnPlates.T17.Part.Position)
end
if num == 18 then
p:MoveTo(game.Workspace.spawnPlates.T18.Part.Position)
end
if num == 19 then
p:MoveTo(game.Workspace.spawnPlates.T19.Part.Position)
end
if num == 20 then
p:MoveTo(game.Workspace.spawnPlates.T20.Part.Position)
end
end
end
After a player is done customizing their character from the spawn plate and they hit spawn to teleport to the map, this code runs. It makes the boolean from their PlayerGui false.
game.Workspace:WaitForChild(game.Players.LocalPlayer.Name)
local plr = game.Players.LocalPlayer
script.Parent.MouseButton1Click:connect(function()
if script.Parent.Value.Value == 1 then
workspace.SpawnTowers.T1.Taken.Value = false
elseif script.Parent.Value.Value == 2 then
workspace.SpawnTowers.T2.Taken.Value = false
elseif script.Parent.Value.Value == 3 then
workspace.SpawnTowers.T3.Taken.Value = false
elseif script.Parent.Value.Value == 4 then
workspace.SpawnTowers.T4.Taken.Value = false
elseif script.Parent.Value.Value == 5 then
workspace.SpawnTowers.T5.Taken.Value = false
elseif script.Parent.Value.Value == 6 then
workspace.SpawnTowers.T6.Taken.Value = false
elseif script.Parent.Value.Value == 7 then
workspace.SpawnTowers.T7.Taken.Value = false
elseif script.Parent.Value.Value == 8 then
workspace.SpawnTowers.T8.Taken.Value = false
elseif script.Parent.Value.Value == 9 then
workspace.SpawnTowers.T9.Taken.Value = false
elseif script.Parent.Value.Value == 10 then
workspace.SpawnTowers.T10.Taken.Value = false
elseif script.Parent.Value.Value == 11 then
workspace.SpawnTowers.T11.Taken.Value = false
elseif script.Parent.Value.Value == 12 then
workspace.SpawnTowers.T12.Taken.Value = false
elseif script.Parent.Value.Value == 13 then
workspace.SpawnTowers.T13.Taken.Value = false
elseif script.Parent.Value.Value == 14 then
workspace.SpawnTowers.T14.Taken.Value = false
elseif script.Parent.Value.Value == 15 then
workspace.SpawnTowers.T15.Taken.Value = false
elseif script.Parent.Value.Value == 16 then
workspace.SpawnTowers.T16.Taken.Value = false
elseif script.Parent.Value.Value == 17 then
workspace.SpawnTowers.T17.Taken.Value = false
elseif script.Parent.Value.Value == 18 then
workspace.SpawnTowers.T18.Taken.Value = false
elseif script.Parent.Value.Value == 19 then
workspace.SpawnTowers.T19.Taken.Value = false
elseif script.Parent.Value.Value == 20 then
workspace.SpawnTowers.T20.Taken.Value = false
end
