Teletrasporta ai server privati

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Oltre a teletrasportare i giocatori tra server pubblici, TeleportService supporta il teletrasporto a server privati, che sono server riservati a giocatori specifici. Ci sono due tipi di server privati a cui puoi teletrasportarti:

  • Server riservati: server creati dagli sviluppatori accessibili tramite un ID fornito dallo sviluppatore. Utile per partite private, sessioni cooperative o qualsiasi scenario in cui controlli chi si unisce.
  • Server VIP: server privati acquistati dai giocatori. Usa TeleportOptions.VipServerId per indirizzare i giocatori a un server VIP che hanno acquistato.

Teletrasporta a un server riservato

I server riservati vengono creati su richiesta: il primo teletrasporto utilizzando un nuovo ReservedServerId crea il server, e riutilizzare lo stesso ID indirizza i teletrasporti successivi a quel server. Genera l'ID con HttpService:GenerateGUID(false):

local HttpService = game:GetService("HttpService")
local TeleportService = game:GetService("TeleportService")
local Players = game:GetService("Players")
local TARGET_PLACE_ID = 12345678901234
-- Gli utenti da teletrasportare (ad esempio da Players:GetPlayers() o un gruppo di matchmaking)
local player1, player2 = Players:GetPlayers()[1], Players:GetPlayers()[2]
-- Genera un ID unico per il server riservato
local reservedServerId = HttpService:GenerateGUID(false)
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerId = reservedServerId
-- Il primo teletrasporto crea il server
TeleportService:TeleportAsync(TARGET_PLACE_ID, {player1, player2}, teleportOptions)

Riutilizza un ID di server riservato

Per consentire ad altri giocatori di unirsi allo stesso server riservato in seguito, conserva l'ID del server riservato con un data store di DataStoreService in modo che sopravviva tra sessioni e server.

Sul server che crea il server riservato, genera l'ID per il primo teletrasporto, quindi salvalo con una chiave che identifica la sessione (ad esempio un ID di lobby o un ID di festa):

local DataStoreService = game:GetService("DataStoreService")
local HttpService = game:GetService("HttpService")
local TeleportService = game:GetService("TeleportService")
local reservedServersStore = DataStoreService:GetDataStore("ReservedServers")
-- Chiave che identifica la sessione condivisa tra i server
local sessionKey = "lobby-123"
-- Un nuovo ID crea il server riservato all'arrivo nella destinazione
local reservedServerId = HttpService:GenerateGUID(false)
reservedServersStore:SetAsync(sessionKey, reservedServerId)
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerId = reservedServerId
TeleportService:TeleportAsync(TARGET_PLACE_ID, { player }, teleportOptions)

Su qualsiasi altro server che deve inviare i giocatori a quello stesso server riservato, cerca l'ID con la stessa chiave di sessione e impostalo come TeleportOptions.ReservedServerId del teletrasporto:

local DataStoreService = game:GetService("DataStoreService")
local TeleportService = game:GetService("TeleportService")
local reservedServersStore = DataStoreService:GetDataStore("ReservedServers")
local sessionKey = "lobby-123"
local existingId = reservedServersStore:GetAsync(sessionKey)
if existingId then
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerId = existingId
TeleportService:TeleportAsync(TARGET_PLACE_ID, { player }, teleportOptions)
end

Su un server VIP, per rendere disponibile l'ID del server VIP sul server di destinazione senza un data store, allegalo a ciascun giocatore con TeleportOptions:SetTeleportData():

local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.VipServerId = game.PrivateServerId
teleportOptions:SetTeleportData({ vipServerId = game.PrivateServerId })
TeleportService:TeleportAsync(TARGET_PLACE_ID, {player}, teleportOptions)

All'arrivo, leggilo dai dati di accesso del giocatore. Per ulteriori informazioni, vedi Invia dati utente insieme ai teletrasporti.

Identifica un server riservato all'arrivo

Sul server di destinazione, controlla se l'attuale server è un server riservato:

local isReserved = game.PrivateServerId ~= "" and game.PrivateServerOwnerId == 0

DataModel.PrivateServerId corrisponde all'ReservedServerId che hai fornito e rimane costante tra tutte le istanze del server per quel server riservato. DataModel.JobId è unico per ogni istanza in esecuzione e cambia quando il server si riavvia.

Teletrasporta a un server VIP

I server VIP sono server privati che i giocatori possono acquistare dalla pagina del gioco. Per teletrasportare un giocatore a un server VIP, imposta TeleportOptions.VipServerId sull'DataModel.PrivateServerId del server VIP di destinazione.

local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 12345678901234
-- L'PrivateServerId del server VIP di destinazione, ad esempio trasportato
-- nei dati di teletrasporto del giocatore o letto da un data store
local vipServerId = player:GetJoinData().TeleportData.vipServerId
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.VipServerId = vipServerId
TeleportService:TeleportAsync(TARGET_PLACE_ID, {player}, teleportOptions)

TeleportOptions.VipServerId è distinto da TeleportOptions.ReservedServerId. Usa ReservedServerId per server riservati creati dagli sviluppatori e VipServerId per server VIP acquistati dai giocatori.

Un ID di server VIP è limitato all'esperienza che possiede il server VIP: puoi usarlo con l'ID del luogo di qualsiasi luogo in quell'esperienza, ma non con un ID del luogo di un'altra esperienza.

Quando lasci un campo di routing non impostato, il motore sceglie il server di destinazione. Un teletrasporto senza campi di routing per server privati impostati può atterrare su un server pubblico o, se il giocatore si è unito di recente a un server VIP di quell'esperienza, su quel server VIP.

Un caso d'uso comune per questo schema è restituire un giocatore da un server riservato al server VIP del luogo principale dell'esperienza. Poiché l'game.PrivateServerId di un server riservato è il proprio ID riservato piuttosto che quello del server VIP di origine, porta l'ID del server VIP nel server riservato, ad esempio passandolo in teleportData sul teletrasporto in uscita o persistendolo in un data store come mostrato in Riutilizza un ID di server riservato, quindi impostalo come TeleportOptions.VipServerId del teletrasporto di ritorno.

Imposta lo stesso TeleportOptions.VipServerId su ogni teletrasporto per mantenere i giocatori nello stesso server VIP attraverso i luoghi durante il gameplay.

Memorizza e condividi gli ID dei server

L'oggetto TeleportAsyncResult restituito da TeleportService:TeleportAsync() contiene informazioni sulla destinazione:

local result = TeleportService:TeleportAsync(TARGET_PLACE_ID, {player}, teleportOptions)
if result then
print("ID del PrivateServer di destinazione:", result.PrivateServerId)
end

Migra dai codici di accesso legacy

Se il tuo gioco utilizza il deprecato TeleportOptions.ReservedServerAccessCode o TeleportOptions.ShouldReserveServer, migra a ReservedServerId sostituendo il flusso del codice di accesso con un flusso basato su GUID:

  1. Sostituisci ReserveServerAsync() e ReservedServerAccessCode con HttpService:GenerateGUID(false) e ReservedServerId.
  2. Memorizza il GUID generato in modo da poterlo riutilizzare per teletrasporti successivi allo stesso server.
  3. Aggiorna tutti gli utilizzi di TeleportOptions per impostare ReservedServerId invece di ReservedServerAccessCode o ShouldReserveServer.

Prima (deprecato)

-- Deprecato: ReserveServerAsync + ReservedServerAccessCode
local accessCode, privateServerId = TeleportService:ReserveServerAsync(TARGET_PLACE_ID)
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerAccessCode = accessCode
TeleportService:TeleportAsync(TARGET_PLACE_ID, {player}, teleportOptions)

Dopo (attuale)

local HttpService = game:GetService("HttpService")
local TeleportService = game:GetService("TeleportService")
-- Attuale: GenerateGUID + ReservedServerId
local reservedServerId = HttpService:GenerateGUID(false)
local teleportOptions = Instance.new("TeleportOptions")
teleportOptions.ReservedServerId = reservedServerId
TeleportService:TeleportAsync(TARGET_PLACE_ID, {player}, teleportOptions)

Il legacy ReserveServerAsync() e ReservedServerAccessCode rimangono disponibili per la compatibilità retroattiva, ma non sono raccomandati per nuovi lavori. ReserveServerAsync() non riserva effettivamente un server in anticipo, ma genera semplicemente un GUID casuale. I server riservati esistenti creati con codici di accesso continuano a funzionare.

Gestisci i teletrasporti non riusciti

I teletrasporti a server privati possono fallire come qualsiasi chiamata di rete. Avvolgili in pcall e riprova se necessario. Quando un teletrasporto viene avviato ma fallisce all'ultimo momento, TeleportService.TeleportInitFailed si attiva con le originali TeleportOptions in modo da poter riprovare con la stessa destinazione.

Per un'implementazione completa del retry, vedi Gestisci i teletrasporti non riusciti nella guida principale al teletrasporto.

Quando il motore stesso indirizza un teletrasporto semplice a un server VIP, i fallimenti di accesso specifici per VIP come un server pieno o inondato tornano a un accesso pubblico invece di attivare TeleportService.TeleportInitFailed. Solo i teletrasporti con un esplicito TeleportOptions.VipServerId segnalano questi fallimenti al tuo gestore di retry.

Migliori pratiche

  • Genera ID sul server. Chiama sempre HttpService:GenerateGUID(false) da uno Script del server per prevenire che i client prevedano o controllino gli ID dei server riservati.
  • Persisti gli ID dei server riservati. Memorizza il GUID in un data store se i giocatori devono riunirsi allo stesso server riservato tra sessioni.
  • Usa il campo giusto. Usa ReservedServerId per server riservati creati dagli sviluppatori, VipServerId per server VIP acquistati dai giocatori. Non impostare mai entrambi sulla stessa istanza di TeleportOptions.
  • Non mescolare i campi di routing. Puoi impostare solo uno tra ReservedServerId, VipServerId o ServerInstanceId alla volta. Impostare più di uno causa un errore.
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.