Yerler Arasında Işınlanma

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Birçok farklı yerleşim, bir fantzi dünyasında birçok şehir, kale, zindan ve geniş bir orman kullanarak bir deneyim oluşturmak istiyorsanız, TeleportService kullanabilirsiniz, böylece kullanıcıları bir evrenin, sunucunun veya hatta başka bir deneyimin arasında ışınlanabilirsiniz.

Işınlanmayı Ayarlama

Tecrübenizde ışınlanmayı etkinleştirmek için TeleportService:TeleportAsync() kullanın. Yöntem üç parametre kabul eder:

  • Kullanıcıların ışınlanması için PlaceId olarak.
  • Class.Player kullanıcılarınızı ışınlanmak için temsil eden instansları içeren bir matris.
  • Class.TeleportOptions bir örneği, TeleportAsync() çağrısı için özel özellikler içerir.

local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 1234 -- kendi yerinizin ID ile değiştirin
local playerToTeleport = Players:GetPlayers()[1] -- deneyimdeki ilk kullanıcıyı al
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)

Işınlanma kurarken hatalardan korunmayı öğrenmek istiyorsanız, bunu Işınlanma Hatalarına Nasıl Korunulur? bölümünde görün.

Kavşak Tecrübe Işınlanmasını Etkileşim

Güvenlik amaçlarıyla, bir kullanıcıyı deneyiminizden başka birine ışınlanmak veya diğer yönlendirme yoluyla başarısız olur. Kullanıcı deneyiminizden ışınlanmayı etkinleştirmek için, Oyun Ayarları > Güvenlik > Üçüncü Partilere İzin ve 2>İzin Vermeyi2>

Özel Teleport Ekranları Oluşturulması

Bir kullanıcı bir ışınlanmayı tetiklediğinde, yeni yerin yüklenmesini beklerken standart Roblox yükleme ekranını görür.


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

Işınlanma Seçeneklerini Özelleştirme

Kullanıcıları belirli bir sunucuya ışınlanmayı, kullanıcı verilerini teleport ile birlikte göndermeyi ve kullanıcı verilerini ışınlanma ile birlikte göndermeyi ayarlayarak, TeleportOptions instansını ve 1> Class.TeleportService:TeleportAsync() metoduna geçişle kullan

Belirli Sunuculara Işınlanma

Kullanıcıları belirli sunuculara ışınlamak için, TeleportOptions kullanarak hedef sunucuyu ayarla ve TeleportService:TeleportAsync() metoduna geç. Eğer bir sunucuyu belirtmezseniz, kullanıcılar o listede ilk belirtilen kullanıcının bilgisi kullanılır.

Kullanıcıları özel bir sunucuya ışınlamak için, TeleportOptions.ServerInstanceId özelliğini bir geçerli instans ID olarak ayarlayın, bu bir hizmet sunucusu için benzersiz bir tanımlayıcıdır.


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

Kullanıcıları rezerv bir sunucuya ışınlamak için, gereken yerleşik bir sunucuya erişim kodunu ayarlayınız: TeleportOptions.ReservedServerAccessCode, bu, bir rezerv sunucusuna giriş için benzersiz bir kod.


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

Kullanıcıları yeni bir yedek sunucuya ışınlamak için, TeleportOptions.ShouldReserveServer değerini doğru ayarla.


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

Kullanıcı Verilerini Işınlayarak Işınlayarak

Bir kullanıcıyı bir yerden diğerine ışınlanırsa, bu kullanıcının ilgili yerlerle ilgili herhangi bir yerel verisini ortadan kaldırır. Bu kullanıcının veri persistansını yönetmek için aşağıdaki yaklaşımları kullanabilirsiniz.

  • Tecrübeniz deneyim içi para birimi veya envanter gibi güvenli kullanıcı verilerini kullanır, veri depoları veya bellek depoları uygulayın para dünyaarasında verileri korumak için.

  • Yerden dünyatemel güvenli olmayan verileri göndermek için, bunları TeleportOptions:SetTeleportData() önce TeleportAsync() ile göndermeden önce çağırın.


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

Bir sunucuteleport'tan gelen tüm verilerini almak için, Class.Player:GetJoinData() fonksiyonunu kullanın, bu da kullanıcı ile ilgili verileri içeren bir sözlük döndürür.


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)

Sadece istemciye ışınlanma verilerini almak için TeleportService:GetLocalPlayerTeleportData() kullanabilirsiniz.

Kullanıcının Kontrolü Hatası

Ağ isteklerini içeren herhangi bir API çağrısı, ışınlanma başarılı olabilir ve bir hata oluşturabilir. Ağ başarılı ışınlanma çağrısı yaparsa bile, bir hata oluşturmadan son ana kadar ışınlanmayı başarısız bırakabilir ve kullanıcıyı sunucuda bırakabilir. Bu durumda, Class.TeleportService

Işınlanmaları korunmuş bir çağrıda ( pcall() ) Wrap teleports in a protected call ( ModuleScript ) and retry if it fails. The following example SafeTeleport define a 1> SafeTeleport1> function to teleport the user in a protected


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 -- sonuçların döngü dışındaki pcall sonuçlarını tanımlayın, böylece sonuçlar daha sonra rapor edilebilir
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- hata yapmak için kullanıcıyı koruma altındaki bir çağrıda yönlendir
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- çağrı başarılı olduğunda ışınlanmayı durdur, yoksa ışınlanma sınırına ulaşıldı
if not success then
warn(result) -- çıktıya hata nedeni yazdır
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
-- işınlanma geçersizse, yerine hata bildirin
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport

Class.TeleportService:TeleportAsync()|TeleportAsync() işlevi, aynı argeleri alır TeleportAsync() ile Class.Teleport işlevi. You can use the following ModuleScript with the 1>Class.Teleport1> işlevi to perform teleports from anywhere in your experience to reduce failed teleports.


local Players = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local SafeTeleport = require(ServerScriptService.SafeTeleport)
local TARGET_PLACE_ID = 1818 -- kendi yerinizin ID ile değiştirin
local playerToTeleport = Players:GetPlayers()[1] -- oyunilk kullanıcıyı al
SafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)