Hi, I have a private server system and it is pretty much finished, but I don’t know how to teleport players to others private server when they click the join button
Full script:
local servers = {}
local DataStoreService = game:GetService("DataStoreService")
local playerData = DataStoreService:GetDataStore("#ServersData[pcall1]Save")
local runService = game:GetService("RunService")
local playerUserId = "#ServersData[pcall1]Data"
local data = playerData:GetAsync(playerUserId) --Checks if player has stored data
if data then
servers = data
end
game:BindToClose(function()
wait(10)
end)
local arrayofunions = {}
local TS = game:GetService("TeleportService")
local Players = game:GetService("Players")
local messagingService = game:GetService("MessagingService")
local httpService = game:GetService("HttpService")
local rs = game:GetService("ReplicatedStorage")
local asktoinvite = rs.AskToInvite
local tp = rs.TeleportToServer
local newserver = rs.CreateServer
--local code = TS:ReserveServer(9619375620) -- Returns a code
--local players = Players:GetPlayers() -- Get a list of all players
--wait(5)
--TS:TeleportToPrivateServer(9619375620,code,players) -- Actually teleport the players
local CurServerId = game.PrivateServerId
local CurServerNumber = 0
local isReserved = game.PrivateServerId ~= "" and game.PrivateServerOwnerId == 0
local function ServerUpdate(ServerId,UserId,Psid)
local createnewarr = true
local data = playerData:GetAsync(playerUserId) --Checks if player has stored data
if data then
servers = data
end
--if servers then
-- for i,v in ipairs(servers) do
--
-- end
--end
for i,v in ipairs(servers) do
if v.server == ServerId and v.plr == UserId then
createnewarr = false
end
end
local arr = {server = ServerId,plr = UserId,id = nil}
if Psid then
for i,v in ipairs(servers) do
if v.server == ServerId and v.id == nil then
v.id = Psid
createnewarr = false
end
end
end
if Psid == nil then
for i,v in ipairs(servers) do
if v.server == ServerId and v.id then
createnewarr = false
end
end
end
if createnewarr == true then
table.insert(servers,arr)
end
local success, err = pcall(function()
local playerUserId = "#ServersData[pcall1]Data"
playerData:SetAsync(playerUserId,servers) --Saves player data
end)
if not success then
warn('Could not save data!')
print(err)
end
end
Players.PlayerRemoving:Connect(function(player)
CurServerNumber -= 1
for i,v in ipairs(servers) do
if game.PrivateServerId == v.id and isReserved then
local messageData = {}
messageData["sender"] = v.id
messageData["message"] = CurServerNumber
local encoded = httpService:JSONEncode(messageData)
messagingService:PublishAsync("#ServersData[pcall1]Data", encoded)
end
end
end)
Players.PlayerAdded:Connect(function(player)
for i,v in ipairs(servers) do
if v.plr == player.UserId and isReserved and v.id == nil then
ServerUpdate(v.server,v.plr,game.PrivateServerId)
end
end
CurServerNumber += 1
for i,v in ipairs(servers) do
if game.PrivateServerId == v.id and isReserved then
local messageData = {}
messageData["sender"] = v.id
messageData["message"] = CurServerNumber
local encoded = httpService:JSONEncode(messageData)
messagingService:PublishAsync("#ServersData[pcall1]Data", encoded)
end
end
end)
local function addtolist(PrivateServerId,amount,player)
coroutine.wrap(function()
local List = player.PlayerGui:WaitForChild("System",10).Frame.List
local StandartFrame = game:GetService("ReplicatedStorage").Frame:Clone()
StandartFrame.Parent = List
local Owner = StandartFrame:FindFirstChild("Owner")
local UserId = StandartFrame:FindFirstChild("UserId")
local Players = StandartFrame:FindFirstChild("Players")
local data
for i,v in ipairs(servers) do
if v.id == PrivateServerId then
data = v
end
end
if data then
UserId.Text = "UserId: "..tostring(data.plr)
Players.Text = "Players: "..tostring(amount).." / 50"
Owner.Text = "Owner: "..game:GetService("Players"):GetNameFromUserIdAsync(data.plr)
end
end)()
end
function callbackFunction(serviceData)
local decodedData = httpService:JSONDecode(serviceData.Data)
arrayofunions[decodedData.sender] = decodedData.message
if decodedData.message == 0 then
arrayofunions[decodedData.sender] = nil
end
--for i,v in ipairs(game:GetService("Players"):GetChildren()) do
--addtolist(decodedData.sender,decodedData.message,v)
--end
end
messagingService:SubscribeAsync("#ServersData[pcall1]Data", callbackFunction)
newserver.OnServerEvent:Connect(function(plr)
local bool = false
for i,v in ipairs(servers) do
if game.PrivateServerId == v.id and v.plr == plr.UserId then
bool = true
break
end
if v.plr == plr.UserId and v.id ~= game.PrivateServerId then
TS:TeleportToPrivateServer(9619375620,v.server,{plr})
bool = true
end
end
if bool == false then
local code = TS:ReserveServer(9619375620) -- Returns a code
ServerUpdate(code,plr.UserId)
TS:TeleportToPrivateServer(9619375620,code,{plr})
end
end)
coroutine.wrap(function()
while wait(10) do
for i,v in ipairs(servers) do
if game.PrivateServerId == v.id and isReserved then
local messageData = {}
messageData["sender"] = v.id
messageData["message"] = CurServerNumber
local encoded = httpService:JSONEncode(messageData)
messagingService:PublishAsync("#ServersData[pcall1]Data", encoded)
end
end
end
end)()
coroutine.wrap(function()
while wait(1) do
for i,plr in ipairs(game:GetService("Players"):GetChildren()) do
coroutine.wrap(function()
for i,c in ipairs(plr.PlayerGui:WaitForChild("System",10).Frame.List:GetChildren()) do
if c:IsA("Frame") then
c:Destroy()
end
end
end)()
end
for i,v in ipairs(servers) do
if v.id ~= nil and arrayofunions[v.id] then
for i,j in ipairs(game:GetService("Players"):GetChildren()) do
coroutine.wrap(function()
addtolist(v.id,arrayofunions[v.id],j)
end)()
end
end
end
end
end)()
Any help would be appreciated, thanks!
