Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

TeleportToPrivateServer must be passed an array of players?

Asked by
14dark14 167
2 years ago
Edited 2 years ago

The last couple of days I've been trying to make a script that teleports multiple people that are standing on a Part to a private server. And currently, I'm left with a script that partly works, but sometimes comes up with an error:

[ TeleportToPrivateServer must be passed an array of players ]

not sure what could cause the error because it doesn't address at which line it happen, but im pretty sure it's the function at line 37

-- Player and Place Variables -- 
local Players = game:GetService("Players")
local PlayersTouching = {}
local NeededPlayers = 1
local MaxPlayers = 4
local PlaceId = 0000000000

-- Services -- 

local RunService = game:GetService("RunService")
local TeleportService = game:GetService("TeleportService")

-- SurfaceGUI's for text -- 

local PlayerDisplay = script.Parent.Parent.PlayerDisplay.SurfaceGui:WaitForChild("TextLabel")
local StatusDisplay = script.Parent.Parent.StatusDisplay.SurfaceGui:WaitForChild("TextLabel")
local ServerDisplay = script.Parent.Parent.ServerDisplay.SurfaceGui:WaitForChild("TextLabel")
ServerDisplay.Text = "Server Size: " ..MaxPlayers

-- Other -- 

local Toucher = script.Parent.Parent:WaitForChild("MainPart")
local debounce = true

--/--

function IsPlayer(obj)
    if obj.Parent:IsA("Model") and obj.Parent:findFirstChild("Humanoid") then
        if Players:GetPlayerFromCharacter(obj.Parent) ~= nil then
            return true
        end
    end
    return false
end

-- function that teleports all the people to a private server -- 
function TeleportPlayers() 
    local PrivateServerId = TeleportService:ReserveServer(PlaceId)
    TeleportService:TeleportToPrivateServer(PlaceId, PrivateServerId, PlayersTouching)
end

-- functions that adds or removes players from the table --

Toucher.Touched:connect(function(obj)
    if IsPlayer(obj) then
        local CurChar = obj.Parent
        local CurPlayer = Players:GetPlayerFromCharacter(CurChar) 
        local index

        for i,v in pairs(PlayersTouching) do
            if v == CurPlayer then
                index = i
            end
        end

        if not index then
            table.insert(PlayersTouching, CurPlayer)
        end
        return CurPlayer
    end

end)

Toucher.TouchEnded:connect(function(obj)
    if IsPlayer(obj) then
        local CurChar = obj.Parent
        local CurPlayer = Players:GetPlayerFromCharacter(CurChar)
        local index

        for i,v in pairs(PlayersTouching) do
            if v == CurPlayer then
                index = i
            end
        end

        if index then
            table.remove(PlayersTouching, index)
        end
    end
end)


-- Main function that monitors everything -- 

RunService.Stepped:connect(function()

    if debounce then
        -- This just changes the text of GUI's
        if #PlayersTouching >= NeededPlayers then 
            PlayerDisplay.Text = "Players: " ..#PlayersTouching.. "/ "..MaxPlayers
            else
            PlayerDisplay.Text = "Players: " ..#PlayersTouching.. "/ "..MaxPlayers
        end

    if #PlayersTouching >= MaxPlayers then
          debounce = false

            StatusDisplay.Text = "Status: Teleporting..."           
            TeleportPlayers() -- runs the function ( line 38 )

                wait(8)
    -- This loop will clear the table so next array of players can use the teleporter
                    for k in pairs (PlayersTouching) do
                        PlayersTouching [k] = nil
                    end
                wait(1)

            StatusDisplay.Text = "Status: Waiting For Players"
            PlayerDisplay.Text = "Players: " ..#PlayersTouching.. "/ "..MaxPlayers
          debounce = true
        end
    end
end)

Thank you for your attention

Answer this question