I have tried this as a server script, and a local script.
game:GetService('TeleportService').CustomizedTeleportUI = true ds = game:GetService("DataStoreService"):GetGlobalDataStore() local Button = script.Parent function getPlayer(Part) local Humanoid = Part.Parent:FindFirstChild('Humanoid') if (Humanoid ~= nil) then local Character = Humanoid.Parent if (Character ~= nil) then return game:GetService('Players'):GetPlayerFromCharacter(Character) end end end function _sendPlayerToBuildZone(player) local playerIdentity = player.Name .. '(' .. player.userId .. ')' local playerKey = 'player_' .. player.userId local playerData = ds:GetAsync(playerKey) if playerData then if playerData.personalPlaceId <= 0 then playerData = nil end end if not playerData then newPlaceId = game:GetService(AssetService):CreatePlaceAsync(script.Parent.Parent.GameName.Text .. ' by ' .. playerIdentity, 92697995) playerData = { personalPlaceId = newPlaceId } ds:SetAsync(playerKey, playerData) end if playerData and playerData.personalPlaceId then game:GetService('TeleportService'):Teleport(playerData.personalPlaceId, player) end end function Create() local player = getPlayer(Source) if player then if player.userId > 0 then sendPlayerToBuildZone(player) end end end script.Parent.MouseButton1Click:connect(Create)