Veel games zijn onderverdeeld in meerdere plaatsen, zoals een fantasiewereld met steden, kastelen, kerkers en een uitgestrekt bos. Gebruik TeleportService om gebruikers tussen plaatsen, naar verschillende servers of zelfs naar andere games te teleporteren.
Spelers teleporteren
Om spelers te teleporteren, gebruik je TeleportService:TeleportAsync(). Deze methode accepteert drie parameters:
- De PlaceId waarnaar gebruikers moeten worden geteleporteerd.
- Een array met de Player instanties die je wilt teleporteren.
- Een optionele TeleportOptions instantie die aangepaste eigenschappen bevat voor de TeleportAsync() aanroep.
local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 12345678901234 -- vervang door je eigen
local playerToTeleport = Players:GetPlayers()[1] -- krijg de eerste gebruiker in de game
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport})Om de juiste spelers te teleporteren, kun je een BasePart.Touched of een ProximityPrompt.Triggered evenement gebruiken om een individuele Player te krijgen. Vervolgens kun je controleren of de speler deel uitmaakt van een team (Player.Team) of een feest (Player.PartyId). Ten slotte kun je Team:GetPlayers() of SocialService:GetPlayersByPartyId() gebruiken als je de hele groep wilt teleporteren in plaats van alleen de individuele speler.
Configureer veilige teleportatie
Drie instellingen regelen de teleportbeveiliging.
| Instelling | Beschrijving |
|---|---|
| (Creator Dashboard) Doelgroep > Toegangsinstellingen > Toegangscontrole voor Plaatsen | Beheert of spelers zich bij elke plaats in je game kunnen voegen of eerst de startplaats moeten betreden. |
| (Creator Dashboard) Plaats > Toegang > Directe Toegangscontrole | Overschrijft je game-niveau Toegangscontrole voor Plaatsen instelling voor een niet-startplaats. |
| (Studio) Bestand > Ervaringsinstellingen > Beveiliging > Sta Derde Partij Teleportaties toe | Beheert teleportaties van je game naar games die je niet bezit. Je kunt deze instelling uitgeschakeld laten en toch spelers tussen gepubliceerde games die je bezit teleporteren. |
Toegangscontrole voor Plaatsen beheert spelers die in je game teleporteren en is de meest kritische instelling om teleport-gebaseerde exploits te voorkomen.

Als je Volledig open kiest, kunnen spelers zich bij elke plaats in je game voegen via teleportaties vanuit elke game, inclusief deeplinks, game-uitnodigingen, het joinen van een vriend, en meer.
Dit is een goede keuze als je game meerdere plaatsen heeft en je wilt dat vrienden elkaar gemakkelijk kunnen joinen, ongeacht welke plaats ze zich bevinden. Als je deze optie niet kiest, zullen spelers die proberen zich bij hun vrienden in niet-startplaatsen te voegen in plaats daarvan de startplaats van je game betreden.
Als je Beperkt tot dezelfde universum kiest, kunnen spelers zich alleen bij niet-startplaatsen voegen via teleportaties binnen je games. Deze instelling staat zowel client- als server-geïnitieerde teleportaties toe.
Dit is een goede keuze als je een legacy game hebt die je niet wilt migreren naar veilige teleportaties.
Als je Veilig binnen universum alleen kiest, kunnen spelers zich alleen bij niet-startplaatsen voegen via server-geïnitieerde teleportaties binnen deze game.
Dit is een goede keuze als je game een strikt voortgangssysteem heeft voordat spelers toegang krijgen tot bepaalde gebieden. Het is ook een goede keuze als je game een testplaats heeft waar spelers geen toegang toe zouden moeten hebben of voor plaatsen die uitsluitend gebruik maken van gereserveerde servers.
Migreren naar veilige teleportaties
Als je een bestaande game hebt die client-side teleportaties gebruikt en je wilt server-geïnitieerde teleportaties vereisen, is het doel om alle teleportlogica uit client-scripts en in serverscripts te verplaatsen:
- Zoek alle client-scripts die Teleport() aanroepen.
- Verander deze aanroepen in plaats daarvan om remote events te activeren. Alternatief kun je de aanroepen veranderen in plaats daarvan gebruik te maken van ProximityPrompts, ClickDetectors, of zelfs gewoon het BasePart.Touched evenement.
- Herimplementeren van de teleport in een serverscript met TeleportAsync().
- Wanneer er geen Teleport() aanroepen meer bestaan, verander Toegangscontrole voor Plaatsen naar Veilig.
Maak aangepaste teleportschermen
Wanneer een gebruiker een teleport activeert, ziet hij het standaard Roblox laadscherm terwijl hij wacht tot de nieuwe plaats is geladen. Indien gewenst, kun je een aangepast teleportscherm toevoegen door TeleportService:SetTeleportGui() aan te roepen op de client.
Het volgende voorbeeld stelt een gepersonaliseerde ScreenGui in vanuit ReplicatedStorage. Alle scripts binnen de ScreenGui worden niet uitgevoerd.
local TeleportService = game:GetService("TeleportService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportGui = ReplicatedStorage.TeleportGui
TeleportService:SetTeleportGui(teleportGui)Pas teleportopties aan
Je kunt teleportaties aanpassen, zoals gebruikers naar een specifieke server teleporteren en gebruikersgegevens samen met teleportaties verzenden, door de TeleportOptions instantie in te stellen en deze door te geven aan de TeleportService:TeleportAsync() methode.
Teleporteren naar specifieke servers
Om gebruikers naar specifieke servers te teleporteren, stel je de doelsserver in met TeleportOptions en geef je deze door aan de TeleportAsync() methode. Als je geen server opgeeft, worden gebruikers in een openbare server geteleporteerd; de informatie van de eerste gebruiker in de lijst wordt gebruikt voor matchmaking.
Om gebruikers naar een specifieke openbare server te teleporteren, stel je de TeleportOptions.ServerInstanceId eigenschap in als een geldige instantie-ID, die een unieke identificatie is voor een openbare server.
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ServerInstanceId = targetServerIdOm gebruikers naar een specifieke gereserveerde server te teleporteren, stel je een geldige TeleportOptions.ReservedServerAccessCode in, wat een unieke code is voor toegang tot een gereserveerde server.
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerAccessCode = reservedServerCodeOm gebruikers naar een nieuwe gereserveerde server te teleporteren, stel je TeleportOptions.ShouldReserveServer in op true.
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ShouldReserveServer = trueStuur gebruikersgegevens mee met teleportaties
Het teleporteren van een gebruiker tussen plaatsen verwerpt alle lokale gegevens die aan die gebruiker zijn gekoppeld. Je kunt de volgende benaderingen gebruiken om gegevenspersistentie tussen plaatsen te beheren:
Als je game veilige gebruikersgegevens gebruikt, zoals in-game valuta of inventaris, implementeer dan gegevensopslag of geheugenopslag om gegevens van plaats naar plaats te behouden.
Om basis niet-veilige gegevens van plaats naar plaats te verzenden, roep je TeleportOptions:SetTeleportData() aan voordat je deze doorgeeft aan TeleportAsync(). Verzend geen veilige gegevens met deze methode; de gegevens zijn zichtbaar voor de client en niet versleuteld.
local teleportData = {
randomNumber = RNG:NextInteger(1, 100),
}
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions:SetTeleportData(teleportData)Om alle gegevens op te halen wanneer een gebruiker aankomt op de nieuwe plaats na een teleport, gebruik je de Player:GetJoinData() functie, die een woordenboek retourneert met een TeleportData sleutel.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local joinData = player:GetJoinData()
local teleportData = joinData.TeleportData
local randomNumber = teleportData.randomNumber
print(player.Name .. " voegde zich toe met het nummer " .. randomNumber)
end
Players.PlayerAdded:Connect(onPlayerAdded)Om alleen de teleportgegevens aan de client op te halen, kun je TeleportService:GetLocalPlayerTeleportData() gebruiken.
Behandel mislukte teleportaties
Net als bij elke API-aanroep die netwerkverzoeken omvat, kunnen teleportaties mislukken en een fout genereren. Wikkel ze in beschermde aanroepen (pcall()). Sommige mislukkingen profiteren van herhalingen, vooral die met gereserveerde servers, dus we raden aan om een aantal keren opnieuw te proberen bij een mislukking.
Zelfs als een aanroep succesvol is en de teleportatie wordt geïnitieerd, kan deze nog steeds op het laatste moment mislukken zonder een fout te genereren en de gebruiker in de server achterlaten. Wanneer dit gebeurt, wordt het TeleportService.TeleportInitFailed evenement geactiveerd.
Het volgende voorbeeld ModuleScript retourneert een enkele SafeTeleport functie die spelers in een beschermde aanroep met herhalingslogica teleporteert. Het heeft ook een handleFailedTeleport functie om om te gaan met situaties waarin de aanroep succesvol was, maar de teleportatie niet plaatsvond.
local TeleportService = game:GetService("TeleportService")
local ATTEMPT_LIMIT = 5
local RETRY_DELAY = 1
local FLOOD_DELAY = 15
local function SafeTeleport(placeId, players, options)
local attemptIndex = 0
local success, result -- definieer pcall resultaten buiten de lus zodat resultaten later kunnen worden gerapporteerd
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teleport de gebruiker in een beschermde aanroep om fouten te voorkomen
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- stop met proberen te teleporteren als de aanroep succesvol was, of als de retry-limiet is bereikt
if not success then
warn(result) -- print de reden van de mislukking naar de output
end
return success, result
end
local function handleFailedTeleport(player, teleportResult, errorMessage, targetPlaceId, teleportOptions)
if teleportResult == Enum.TeleportResult.Flooded then
task.wait(FLOOD_DELAY)
elseif teleportResult == Enum.TeleportResult.Failure then
task.wait(RETRY_DELAY)
else
-- als de teleport ongeldig is, rapporteer de fout in plaats van opnieuw te proberen
error(("Ongeldige teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleportDe SafeTeleport functie ontvangt dezelfde argumenten als de TeleportAsync() functie. Je kunt het volgende script gebruiken met de SafeTeleport functie om teleportaties vanuit elke plek in je game uit te voeren:
local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local ServerScriptService = game:GetService("ServerScriptService")
local SafeTeleport = require(ServerScriptService.SafeTeleport)
local PLACE_TO_TELEPORT_TO = 12345678
local function teleport(touchPart)
local playerToTeleport = game.Players:GetPlayerFromCharacter(touchPart.Parent)
if playerToTeleport then
SafeTeleport(PLACE_TO_TELEPORT_TO, {playerToTeleport})
end
end
script.Parent.Touched:Connect(teleport)