Data across sub places

Hi DevForum users!

I am trying to send the players data through a place to a sub-place, and i am kind of confused because data changes suddenly and i am confused, and its hard to test because i need to join the main place and try testing the sub place and my internet is failing for some reasson.

Main place code:

Events.StartMatch.OnServerEvent:Connect(function(Player)
	for i, lobby in shared.Lobbies do
		if lobby.Owner == Player.Name then
			local PlayersToTeleport = {}
			local TeleportOptions = Instance.new("TeleportOptions")
			local AllPlayersData = {}
			for x, player in lobby.Players do
				local playerInstance = Players:GetPlayerByUserId(player)
				table.insert(PlayersToTeleport, playerInstance)
				local Data = PlayerData.GetData(playerInstance)
				table.insert(AllPlayersData, Data)
			end
			local TeleportData = {
				lobby.Time,
				lobby.MaxPlayers,
				lobby.Map,
				lobby.Gamemode,
				AllPlayersData,

			}
			
			shared.Lobbies[i] = nil
			lobby = nil
			warn(lobby)
			warn(TeleportData)
			local ReservedServer = TeleportService:ReserveServer(108416481553178)
			TeleportOptions:SetTeleportData(TeleportData)
			TeleportOptions.ShouldReserveServer = true		
			
			TeleportService:TeleportAsync(108416481553178, PlayersToTeleport,TeleportOptions)
		end
	end
end)

Sub-place code

Players.PlayerAdded:Connect(function(player)
	local joinData = player:GetJoinData()
	local teleportData = joinData.TeleportData
	
	if not Map or not Mode then
		Map = teleportData[3]
		Mode = teleportData[4]
	end
	local OwnData = GetPlayerDataInTable(teleportData[5],player.Name)

	SetCharacter(player,OwnData)
	
	player.CharacterAdded:Connect(function()
		player.Character.Humanoid.WalkSpeed = 0
	end)
end)

No way for me to test this. I’ve seen this before.
Tried to improve it to move smaller “packets”.
(as in just who is doing the teleporting)

Main Place
local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")

local function CopyTable(tbl)
    local copy = {}
    for k,v in pairs(tbl) do
        if type(v) == "table" then
            copy[k] = CopyTable(v)
        else
            copy[k] = v
        end
    end
    return copy
end

Events.StartMatch.OnServerEvent:Connect(function(Player)
    for i, lobby in pairs(shared.Lobbies) do
        if lobby.Owner == Player.Name then
            local ReservedServer = TeleportService:ReserveServer(108416481553178)
            for _, userId in pairs(lobby.Players) do
                local plr = Players:GetPlayerByUserId(userId)
                if plr then
                    local TeleportOptions = Instance.new("TeleportOptions")
                    local OwnData = CopyTable(PlayerData.GetData(plr))
                    local TeleportData = {
                        lobby.Time,
                        lobby.MaxPlayers,
                        lobby.Map,
                        lobby.Gamemode,
                        OwnData
                    }
                    TeleportOptions:SetTeleportData(TeleportData)
                    TeleportService:TeleportAsync(108416481553178, {plr}, TeleportOptions)
                end
            end
            shared.Lobbies[i] = nil
        end
    end
end)
Sub-place
local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(player)
    local joinData = player:GetJoinData()
    local teleportData = joinData.TeleportData
    if not teleportData then return end

    if not Map or not Mode then
        Map = teleportData[3]
        Mode = teleportData[4]
    end

    local OwnData = teleportData[5]
    if OwnData then
        SetCharacter(player, OwnData)
    end

    player.CharacterAdded:Connect(function()
        player.Character.Humanoid.WalkSpeed = 0
    end)
end)
1 Like

Thank you! this works perfectly, i just tested it!

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.