Teleportasi Antara Tempat

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Jika Anda ingin membangun pengalaman dengan banyak tempat yang berbeda, seperti dunia fantasi dengan banyak kota, kastil, ruang bawah tanah, dan hutan yang luas, Anda dapat menggunakan TeleportService untuk mengaktifkan pengguna untuk berteleportasi di antara tempat-tempat di alam semesta, server, atau bahkan ke pengalaman lain.

Mengatur Teleportasi

Untuk mengaktifkan teleportasi dalam pengalaman Anda, gunakan TeleportService:TeleportAsync() . Metode menerima tiga parameter:

  • Class.DataModel.PlaceId|PlaceId untuk pengguna untuk berteleportasi ke.
  • Sebuah matriks yang berisi Player instans yang mewakili pengguna untuk berteleportasi.
  • Sebuah instansi TeleportOptions yang berisi propinsi khusus untuk panggilan TeleportAsync() .

local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 1234 -- ganti dengan ID tempat Anda sendiri
local playerToTeleport = Players:GetPlayers()[1] -- dapatkan pengguna pertama dalam pengalaman
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)

Jika Anda ingin mengambil perlindungan saat menangani kesalahan saat menyiapkan teleportasi, lihat Menangani Failed Teleports.

Mengaktifkan Teleportasi Pengalaman Bersama

Untuk tujuan keamanan, teleportasi pengguna dari pengalaman Anda ke pengalaman lain yang dimiliki orang lain, atau cara lain di sekitar, gagal secara default. Untuk mengaktifkan teleportasi pengalamanCross, buka Pengaturan Permainan > Keamanan dan aktifkan Izinkan Pengiriman Pihak Ketiga di Studio.

Membuat Layar Teleport Kustom

Ketika pengguna mengaktifkan berteleportasi, mereka melihat layar pemuatan Roblox standar saat menunggu tempat baru dimuat. Anda dapat menambahkan layar teleport khusus


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

Sesuaikan Opsi Teleport

Anda dapat menyesuaikan teleportasi, seperti teleportasi pengguna ke server tertentu dan mengirim data pengguna bersama dengan teleportasi, dengan menetapkan instansi TeleportOptions dan menghadapinya metode 2> Class.TeleportService:TeleportAsync() .

Teleportasi ke Server Tertentu

Untuk mengirimkan pengguna ke server tertentu, tetapkan server target menggunakan TeleportOptions dan berikan ke metode TeleportService:TeleportAsync(). Jika Anda tidak menentukan server, pengguna dikirim ke server matchmade publik. Informasi pengguna pertama dalam daftar akan digunakan untuk matchmaking ke server publik itu.

Untuk mengirim pengguna ke server publik khusus, atur TeleportOptions.ServerInstanceId property sebagai ID instans yang valid, yang merupakan identifikator unik untuk server publik.


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

Untuk mengirim pengguna ke server yang direservasi khusus, tetapkan kode akses TeleportOptions.ReservedServerAccessCode yang benar, yang merupakan kode unik untuk memasuki server yang direservasi.


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

Untuk mengirim pengguna ke server cadangan baru, atur TeleportOptions.ShouldReserveServer ke benar.


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

Mengirim Data Pengguna Bersama dengan Teleport

Mengirim pengguna di antara tempat-tempat menghilangkan data lokal yang terkait dengan pengguna itu. Anda dapat menggunakan pendekatan berikut untuk menangani persistensi data di antara tempat.

  • Jika pengalaman Anda menggunakan data pengguna yang aman seperti mata uang dalam pengalaman atau inventaris, implementasi toko data atau toko memori untuk menyimpan data dari tempat ke tempat.

  • Untuk mengirim data tidak aman dari tempat ke tempat, panggil TeleportOptions:SetTeleportData() sebelum mengirim ke TeleportAsync() .


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

Untuk mengumpulkan semua data seorang pengguna yang tiba dari teleport di server, gunakan fungsi Player:GetJoinData(), yang mengembalikan daftar kata yang mencakup data yang terkait dengan pengguna.


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)

Untuk mengambil hanya data teleportasi di klien, Anda dapat menggunakan TeleportService:GetLocalPlayerTeleportData() .

Penanganan Gagal Teleport

Seperti setiap panggilan API yang melibatkan permintaan jaringan, teleport mungkin gagal dan menghasilkan kesalahan. Bahkan jika panggilan berhasil dan teleportasi dimulai, itu masih bisa gagal pada saat terakhir tanpa menghasilkan kesalahan dan meninggalkan pengguna di server. Ketika ini terjadi, itu menyebabkan TeleportService.TeleportInitFailed .

Wrap teleports in a protected call ( pcall() ) dan retry if it fails. The following example ModuleScript definisi fungsi SafeTeleport untuk teleportasi pengguna dalam panggilan terlindung dan fungsi 1> HandleFailedTeleport1> untuk mencoba


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 -- definisikan hasil panggilan di luar siklus sehingga hasil dapat dilaporkan nanti
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- teleportasi pengguna dalam panggilan terlindungi untuk mencegah kesalahan
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- berhenti mencoba untuk berteleportasi jika panggilan berhasil, atau jika batas gagal dicapai
if not success then
warn(result) -- cetak alasan kesalahan untuk keluar
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
-- jika teleport tidak valid, laporkan kesalahan bukan mencoba kembali
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport

Fungsi SafeTeleport menerima argumen yang sama dengan fungsi TeleportAsync(). Anda dapat menggunakan ModuleScript dengan fungsi 1> SafeTeleport1> untuk melakukan teleport dari lokasi mana pun di pengalaman Anda untuk mengurangi teleport yang gagal.


local Players = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local SafeTeleport = require(ServerScriptService.SafeTeleport)
local TARGET_PLACE_ID = 1818 -- ganti dengan ID tempat Anda sendiri
local playerToTeleport = Players:GetPlayers()[1] -- dapatkan pengguna pertama dalam game
SafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)