Teletransportarse entre lugares

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Si desea construir una experiencia con muchos lugares distintos, como un mundo de fantasía con múltiples ciudades, castillos, mazmorras y un bosque vasto, puede usar TeleportService para habilitar a los usuarios para teletransportarse entre lugares en un universo, servidores o incluso a otra experiencia.

Configurando teletransporte

Para habilitar la teletransportación en tu experiencia, usa TeleportService:TeleportAsync() . El método acepta tres parámetros:

  • El PlaceId para que los usuarios se teletransporten a.
  • Un matriz que contiene las instancias Player representando los usuarios para teletransportación.
  • Una instancia TeleportOptions opcional que contiene propiedades personalizadas para la llamada TeleportAsync() .

local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 1234 -- reemplazar con su propio ID de lugar
local playerToTeleport = Players:GetPlayers()[1] -- consigue al primer usuario en la experiencia
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)

Si desea tomar precauciones al manejar errores al configurar la teletransportación, consulte Manejo de teletransportes fallidos .

Habilitando teletransporte de experiencia cruzada

Para fines de seguridad, teletransportar a un usuario de tu experiencia a otra experiencia propiedad de otros, o al revés, falla por defecto. Para habilitar el teletransporte de experiencia cruzada, abre Configuración del juego > Seguridad y habilita Permitir teletransportes de terceros en Studio.

Creando pantallas de teletransporte personalizadas

Cuando un usuario activa un teletransportación, ve la pantalla de carga estándar de Roblox mientras espera a que se cargue el nuevo lugar. Puedes agregar una pantalla de teletransporte personalizada para mejorar la in


local TeleportService = game:GetService("TeleportService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local teleportGui = ReplicatedStorage.TeleportGui
TeleportService:SetTeleportGui(teleportGui)

Personalizar Opciones de Teletransporte

Puede personalizar las teletransportaciones, como teletransportar a los usuarios a un servidor específico y enviar datos del usuario junto con las teletransportaciones , al configurar la instancia TeleportOptions y pasarla al método 1> Class.TeleportService:TeleportAsync() .

Teletransportarse a servidores específicos

Para teletransportar a los usuarios a servidores específicos, configura el servidor objetivo usando TeleportOptions y pasalo a TeleportService:TeleportAsync() método. Si no especificas un servidor, los usuarios se teletransportan a un servidor público. La información del primer usuario en la lista se usa para hacer coincidir con ese servidor público.

Para teletransportar a los usuarios a un servidor público específico, establece la propiedad TeleportOptions.ServerInstanceId como un ID de instancia válido, que es un identificador único para un servidor público.


local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ServerInstanceId = targetServerId

Para teletransportar a los usuarios a un servidor reservado específico, establece un código de acceso de TeleportOptions.ReservedServerAccessCode , que es un código de acceso único para ingresar a un servidor reservado.


local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerAccessCode = reservedServerCode

Para teletransportar a los usuarios a un nuevo servidor reservado, establece TeleportOptions.ShouldReserveServer en verdadero.


local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ShouldReserveServer = true

Enviar datos del usuario junto con los teletransportes

Teletransportar a un usuario entre lugares descarta cualquier dato local asociado con ese usuario. Puedes usar las siguientes aproximaciones para manejar la persistencia de los datos entre lugares.

  • Si tu experiencia utiliza datos de usuario seguros como moneda y inventario en la experiencia, implementa almacenamiento de datos o almacenamiento de memoria para mantener los datos desde el lugar a el lugar.

  • Para enviar datos básicos de no seguros de lugar en lugar, llame a Class.TeleportOptions:SetTeleportData() antes de enviarlos a Class.TeleportService:TeleportAsync()|TeleportAsync() .


local teleportData = {
randomNumber = RNG:NextInteger(1, 100),
}
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions:SetTeleportData(teleportData)

Para obtener todos los datos de un usuario que llega a un teletransporte en el servidor, use la función Player:GetJoinData(), que devuelve un diccionario que incluye los datos asociados con el usuario.


local Players = game:GetService("Players")
local function onPlayerAdded(player)
local joinData = player:GetJoinData()
local teleportData = joinData.TeleportData
local randomNumber = teleportData.randomNumber
print(player.Name .. "joined with the number" .. randomNumber)
end
Players.PlayerAdded:Connect(onPlayerAdded)

Para recuperar solo los datos de teletransporte en el cliente, puede usar TeleportService:GetLocalPlayerTeleportData() .

Tratamiento de teletransportes fallidos

Como cualquier llamada de API que involucra solicitudes de red, los teletransportes pueden fallar y lanzar un error. Incluso si una llamada tiene éxito y el teletransporte se inicia, todavía puede fallar en el último momento sin lanzar un error y dejar al usuario en el servidor. Cuando esto sucede, se activa TeleportService.TeleportInitFailed .

Wrap teleports in a protected call ( pcall() ) and retry if it fails. El siguiente ejemplo ModuleScript define una función de SafeTeleport para teletransportar al usuario en un llamado protegido y una función de 1> HandleFailedTeleport1> para intentar fallos de teletransporte que son h


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 -- 定义 pcall 结果在 loop 外 para que los resultados se puedan informar más tarde
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teleportar al usuario en una llamada protegida para evitar errores
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- deja de intentar teletransportarte si la llamada tuvo éxito, o si se alcanzó el límite de intentos
if not success then
warn(result) -- imprimir el motivo de fallo para salida
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
-- si el teletransporte no es no válido, informe el error en lugar de intentarlo de nuevo
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport

La función SafeTeleport recibe los mismos argumentos que la función TeleportAsync(). Puedes usar la siguiente ModuleScript con la función 1>SafeTeleport1> para realizar teletransportes desde cualquier lugar de tu experiencia para reducir los teletransportes fallidos.


local Players = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local SafeTeleport = require(ServerScriptService.SafeTeleport)
local TARGET_PLACE_ID = 1818 -- reemplazar con su propio ID de lugar
local playerToTeleport = Players:GetPlayers()[1] -- obtén el primer usuario en el juego
SafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)