Yerler arasında teleport

*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 oyun, kasabalar, kaleler, zindanlar ve geniş ormanlar gibi birden fazla yer ile alt bölümlere ayrılmıştır. Kullanıcıları yerler arasında, farklı sunuculara veya hatta diğer oyunlara teleport etmek için TeleportService'i kullanın.

Oyuncuları teleport et

Oyuncuları teleport etmek için TeleportService:TeleportAsync() kullanın. Bu yöntem üç parametre alır:

  • Kullanıcıların teleport edileceği PlaceId.
  • Teleport etmek istediğiniz Player örneklerini içeren bir dizi.
  • TeleportAsync() çağrısı için özel özellikler içeren isteğe bağlı bir TeleportOptions örneği.
local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 12345678901234 -- kendi yerinizle değiştirin
local playerToTeleport = Players:GetPlayers()[1] -- oyundaki ilk kullanıcıyı alın
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport})

Teleport edilecek uygun oyuncuları almak için, bireysel bir Player almak için bir BasePart.Touched veya ProximityPrompt.Triggered olayını kullanabilirsiniz. Ardından, oyuncunun bir takımın (Player.Team) veya partinin (Player.PartyId) parçası olup olmadığını kontrol edebilirsiniz. Son olarak, tüm grubu teleport etmek istiyorsanız Team:GetPlayers() veya SocialService:GetPlayersByPartyId() kullanabilirsiniz.

Güvenli teleportasyonu yapılandır

Üç ayar teleport güvenliğini yönetir.

AyarAçıklama
(Yaratıcı Kontrol Paneli) Hedef Kitle > Erişim Ayarları > Yerler için Erişim KontrolüOyuncuların oyununuzdaki herhangi bir yere katılıp katılamayacağını veya önce başlangıç yerini katılmaları gerekip gerekmediğini kontrol eder.
(Yaratıcı Kontrol Paneli) Yer > Erişim > Doğrudan Erişim KontrolüBaşlangıç yeri olmayan bir yer için oyun düzeyindeki Yerler için Erişim Kontrolü ayarınızı geçersiz kılar.
(Stüdyo) Dosya > Deneyim Ayarları > Güvenlik > Üçüncü Taraf Teleportlarına İzin VerOyununuzdan sahip olmadığınız oyunlara teleportları kontrol eder. Bu ayarı devre dışı bırakabilir ve yine de sahip olduğunuz yayınlanmış oyunlar arasında oyuncuları teleport edebilirsiniz.

Yerler için Erişim Kontrolü, oyuncuların oyununuzun içine teleport olmasını kontrol eder ve teleport tabanlı istismarları önlemede en kritik ayardır.

Yaratıcı Hub'da yerler için erişim kontrolü

  • Tamamen Açık seçeneğini seçerseniz, oyuncular herhangi bir oyundan, derin bağlantılar, oyun davetleri, bir arkadaşına katılma ve daha fazlası dahil olmak üzere, oyununuzdaki herhangi bir yere teleport ile katılabilirler.

    Bu, oyununuzda birkaç yer varsa ve arkadaşların hangi yerde olurlarsa olsunlar birbirlerine kolayca katılabilmelerini istiyorsanız iyi bir seçimdir. Bu seçeneği seçmezseniz, başlangıç yeri olmayan yerlerde arkadaşlarına katılmaya çalışan oyuncular, oyununuzun başlangıç yerine katılacaklardır.

  • Aynı evrene sınırlı seçeneğini seçerseniz, oyuncular yalnızca oyunlarınız içindeki teleportlar aracılığıyla başlangıç yeri olmayan yerlere katılabilirler. Bu ayar, hem istemci hem de sunucu tarafından başlatılan teleportları sağlar.

    Bu, güvenli teleportlara geçmek istemediğiniz eski bir oyununuz varsa iyi bir seçimdir.

  • Sadece evren içinde güvenli seçeneğini seçerseniz, oyuncular yalnızca bu oyundaki sunucu tarafından başlatılan teleportlar aracılığıyla başlangıç yeri olmayan yerlere katılabilirler.

    Bu, oyuncuların belirli alanlara erişmeden önce katı bir ilerleme sistemine sahip bir oyununuz varsa iyi bir seçimdir. Ayrıca, oyuncuların erişmemesi gereken bir test yeri veya yalnızca rezerve sunucuları kullanan yerler için de iyi bir seçimdir.

Güvenli teleportlara geçiş yap

Eğer istemci tarafı teleportları kullanan mevcut bir oyununuz varsa ve sunucu tarafından başlatılan teleportları zorunlu kılmak istiyorsanız, hedef, tüm teleport mantığını istemci betiklerinden sunucu betiklerine taşımaktır:

  1. Teleport() çağrısı yapan tüm istemci betiklerini bulun.
  2. Bu çağrıları, uzaktan olaylar ateşleyecek şekilde değiştirin. Alternatif olarak, çağrıları ProximityPrompts, ClickDetectors veya sadece BasePart.Touched olayını kullanacak şekilde değiştirebilirsiniz.
  3. TeleportAsync() kullanarak bir sunucu betiğinde teleportu yeniden uygulayın.
  4. Artık Teleport() çağrısı kalmadığında, Yerler için Erişim Kontrolü ayarını Güvenli olarak değiştirin.

Özel teleport ekranları oluştur

Bir kullanıcı bir teleport tetiklediğinde, yeni yerin yüklenmesini beklerken standart Roblox yükleme ekranını görür. İsterseniz, istemcide TeleportService:SetTeleportGui() çağrısını yaparak özel bir teleport ekranı ekleyebilirsiniz.

Aşağıdaki örnek, ReplicatedStorage'dan özelleştirilmiş bir ScreenGui ayarlar. ScreenGui içindeki herhangi bir betik çalışmaz.

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

Teleport seçeneklerini özelleştir

Teleportları özelleştirebilir, örneğin kullanıcıları belirli bir sunucuya teleport etmek ve kullanıcı verilerini teleportlarla birlikte göndermek için TeleportOptions örneğini ayarlayıp TeleportService:TeleportAsync() yöntemine geçirebilirsiniz.

Belirli sunuculara teleport et

Kullanıcıları belirli sunuculara teleport etmek için, hedef sunucuyu TeleportOptions kullanarak ayarlayın ve bunu TeleportAsync() yöntemine geçirin. Bir sunucu belirtmezseniz, kullanıcılar genel bir sunucuya teleport edilir; listedeki ilk kullanıcının bilgileri eşleştirme için kullanılır.

Kullanıcıları belirli bir genel sunucuya teleport etmek için, TeleportOptions.ServerInstanceId özelliğini geçerli bir örnek kimliği olarak ayarlayın; bu, genel bir sunucu için benzersiz bir tanımlayıcıdır.

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

Kullanıcıları belirli bir rezerve sunucuya teleport etmek için, geçerli bir TeleportOptions.ReservedServerAccessCode ayarlayın; bu, rezerve sunucuya giriş için benzersiz bir koddur.

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

Kullanıcıları yeni bir rezerve sunucuya teleport etmek için, TeleportOptions.ShouldReserveServer'ı true olarak ayarlayın.

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

Kullanıcı verilerini teleportlarla birlikte gönder

Bir kullanıcıyı yerler arasında teleport etmek, o kullanıcıyla ilişkili herhangi bir yerel veriyi atar. Yerler arasında veri sürekliliğini sağlamak için aşağıdaki yaklaşımları kullanabilirsiniz:

  • Oyununuza güvenli kullanıcı verileri (oyun içi para veya envanter gibi) kullanıyorsanız, yerden yere veri tutmak için veri depoları veya bellek depoları uygulayın.

  • Yerler arasında temel güvensiz verileri göndermek için, TeleportOptions:SetTeleportData() çağrısını yapın ve bunu TeleportAsync()'ya geçirin. Bu yöntemle güvenli verileri geçmeyin; veriler istemciye görünür ve şifrelenmemiştir.

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

Bir kullanıcı teleport sonrası yeni yere geldiğinde tüm verileri almak için, Player:GetJoinData() fonksiyonunu kullanın; bu, TeleportData anahtarına sahip 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 .. " katıldı ve numarası " .. randomNumber)
end
Players.PlayerAdded:Connect(onPlayerAdded)

İstemcide yalnızca teleport verilerini almak için TeleportService:GetLocalPlayerTeleportData() kullanabilirsiniz.

Başarısız teleportları yönet

Ağ isteklerini içeren herhangi bir API çağrısı gibi, teleportlar başarısız olabilir ve bir hata fırlatabilir. Bunları korumalı çağrılara (pcall()) sarın. Bazı hatalar, özellikle rezerve sunucularla ilgili olanlar, yeniden denemelerden fayda görebilir, bu nedenle başarısızlık durumunda belirli bir sayıda yeniden denemeyi öneririz.

Bir çağrı başarılı olsa ve teleport başlatılsa bile, son anda hata vermeden başarısız olabilir ve kullanıcıyı sunucuda bırakabilir. Bu durumda, TeleportService.TeleportInitFailed olayı tetiklenir.

Aşağıdaki örnek ModuleScript, oyuncuları korumalı bir çağrıda teleport eden tek bir SafeTeleport fonksiyonu döndürür ve çağrının başarılı olduğu ancak teleportun gerçekleşmediği durumlarla başa çıkmak için bir handleFailedTeleport fonksiyonu içerir.

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ı döngü dışında tanımlayın, böylece sonuçlar daha sonra rapor edilebilir
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- hataları önlemek için korumalı bir çağrıda kullanıcıyı teleport et
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- çağrı başarılı olursa veya yeniden deneme limiti aşılırsa teleport etmeyi durdur
if not success then
warn(result) -- hata nedenini çıktıya 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
-- teleport geçersizse, yeniden denemek yerine hatayı rapor et
error(("Geçersiz teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport

SafeTeleport fonksiyonu, TeleportAsync() fonksiyonuyla aynı argümanları alır. Aşağıdaki betiği SafeTeleport fonksiyonu ile kullanarak oyununuzun herhangi bir yerinden teleportlar gerçekleştirebilirsiniz:

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)
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.