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)