Continuing the discussion from 1 player is being teleported only:
I am trying to make a functioning game, but when it teleports the players, only 1 player is teleported. I have tried putting in a wait before the game starts, but that does not work either. Any help would be appreciated.
Script
– Last updated: 2/21/22
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local CollectionService = game:GetService("CollectionService")
local Players = game:GetService("Players")
local mapsFolder = ServerStorage:WaitForChild("Maps")
local statusTag = ReplicatedStorage:WaitForChild("Status")
-- Constants
local GAME_LENGTH = 120
local REWARD = 1
local REWARD_2 = 50
local PLAYERS_REQUIRED = 2
local INTERMISSION_TIME = 15
-- Functions
local function onPlayerAdded(player)
local function onCharacterAdded(character)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
if CollectionService:HasTag(player, "Alive") then
CollectionService:RemoveTag(player, "Alive")
end
end)
end
if player.Character then
onCharacterAdded(player.Character)
end
player.CharacterAdded:Connect(onCharacterAdded)
end
Players.PlayerAdded:Connect(onPlayerAdded)
-- Main loop
while true do
-- Waiting for players
statusTag.Value = "Waiting for enough players"
repeat
task.wait(1)
until
#Players:GetPlayers() >= PLAYERS_REQUIRED
wait(3)
-- Intermission
for i = INTERMISSION_TIME, 0, -1 do
statusTag.Value = "Intermission ["..i.."]"
task.wait(1)
end
-- Choose a map
local allMaps = mapsFolder:GetChildren()
local map = allMaps[math.random(1,#allMaps)]:Clone()
statusTag.Value = map.Name .. " was chosen"
map.Parent = workspace
task.wait(4)
-- Teleport players
local activePlayers = Players:GetPlayers()
local spawns = map:FindFirstChild("SpawnPoints")
if not spawns then
warn("You do not have 'SpawnPoints', fix pl0x")
end
spawns = spawns:GetChildren()
for _, player in pairs(activePlayers) do
local name = player.Name
local body = workspace:FindFirstChild(name)
local hrp = body:WaitForChild("HumanoidRootPart")
if hrp then
local chosenSpawn = spawns[math.random(#spawns)]
hrp.CFrame = chosenSpawn.CFrame
table.remove(spawns, table.find(spawns, chosenSpawn))
-- Give them a sword
local equipped = game.ServerStorage.PlayerData[player.Name].Equipped
if equipped ~= "" then
local weapon = game.ServerStorage.Items[equipped.Value]:Clone()
weapon.Parent = player.Backpack
else
local sword = ServerStorage.ClassicSword:Clone()
sword.Parent = player.Backpack
end
CollectionService:AddTag(player, "Alive")
end
end
statusTag.Value = "Get ready to play!"
task.wait(2)
for i = GAME_LENGTH, 0, -1 do
if #CollectionService:GetTagged("Alive") == 1 then
-- only one player is alive
local winner = CollectionService:GetTagged("Alive")[1]
statusTag.Value = "The winner is "..winner.Name
winner.leaderstats.Wins.Value += REWARD
winner.leaderstats.Coins.Value += REWARD_2
break
elseif #CollectionService:GetTagged("Alive") == 0 then
-- nobody is alive
statusTag.Value = "Nobody won!"
break
elseif i == 0 then
-- timer ran out
statusTag.Value = "Times up!"
break
end
task.wait(1)
statusTag.Value = "There are " .. i .. " seconds remaining, and " .. #CollectionService:GetTagged("Alive") .. " players left"
end
print("END OF GAME")
-- Clean up
for _, player in pairs(activePlayers) do
if CollectionService:HasTag(player, "Alive") then
CollectionService:RemoveTag(player, "Alive")
end
for _, tool in pairs(player.Backpack:GetChildren()) do
if tool:FindFirstChild("Price") then
tool:Destroy()
end
end
for _, tool in pairs(player.Character:GetChildren()) do
if tool:FindFirstChild("Price") then
tool:Destroy()
end
end
player:LoadCharacter()
end
map:Destroy()
statusTag.Value = "Game over"
task.wait(2)
end