Birçok oyun, kasabalar, kaleler, zindanlar ve geniş ormanlar gibi bir fantastik dünyaya sahip birden fazla yer ile 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 etme
Oyuncuları teleport etmek için TeleportService:TeleportAsync() yöntemini kullanın. Bu yöntem üç parametre alır:
- Kullanıcıların teleport olacağı 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 yerinizi buraya yazınlocal playerToTeleport = Players:GetPlayers()[1] -- oyundaki ilk kullanıcıyı alınTeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport})
Uygun oyuncuları teleport etmek için, bir BasePart.Touched veya ProximityPrompt.Triggered olayı kullanarak bireysel bir Player alabilirsiniz. Daha sonra oyuncunun bir takımın (Player.Team) veya partinin (Player.PartyId) parçası olup olmadığını kontrol edebilirsiniz. Son olarak, yalnızca bireyi değil, tüm grubu teleport etmek istiyorsanız Team:GetPlayers() veya SocialService:GetPlayersByPartyId() kullanabilirsiniz.
Güvenli teleportasyonu yapılandırma
Üç ayar, teleport güvenliğini yönetir.
| Ayar | Açıklama |
|---|---|
| (Yapımcı Paneli) Hedef Kitle > Erişim Ayarları > Yerler için Erişim Kontrolü | Oyuncuların oyununuzdaki herhangi bir yere katılıp katılamayacağını ya da önce başlangıç yerini katılmak zorunda olup olmadıklarını kontrol eder. |
| (Yapımcı 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ı geçersiz kılar. |
| (Stüdyo) Dosya > Deneyim Ayarları > Güvenlik > Üçüncü Taraf Teleportlarına İzin Ver | Oyununuzdan sahip olmadığınız oyunlara teleportları kontrol eder. Bu ayarı devre dışı bırakabilirsiniz ve yine de sahip olduğunuz yayınlanmış oyunlar arasında oyuncuları teleport edebilirsiniz. |
Yerler için Erişim Kontrolü, oyuncuların oyununuza giriş yapmasını kontrol eder ve teleport tabanlı istismarları önlemek için en kritik ayardır.

Tamamen açık seçeneğini seçerseniz, oyuncular, oyun içindeki arkadaşlarını davet etme, derin bağlantılar, arkadaşlarla katılma gibi her türlü yolla oyununuzdaki herhangi bir yere katılabilir.
Bu, oyununuzda birkaç yer varsa ve arkadaşların hangi yerlerde olurlarsa olsunlar kolayca birbirlerine katılabilmelerini sağlamak istiyorsanız iyi bir tercihtir. Bu seçeneği seçmezseniz, başlangıç yeri olmayan bir yeri katılmaya çalışan oyuncular oyununuzun başlangıç yerine katılacaklardır.
Aynı evrenle sınırlı seçeneğini seçerseniz, oyuncular yalnızca oyunlarınız içindeki teleportlar ile başlangıç yeri olmayan yerlere katılabilirler. Bu ayar, istemci ve sunucu tarafından başlatılan teleportları hem destekler.
Güvenli teleportlara geçmek istemediğiniz eski bir oyununuz varsa bu iyi bir seçimdir.
Sadece evren içinde güvenli seçeneğini seçerseniz, oyuncular yalnızca bu oyun içindeki sunucu başlatmalı teleportlar aracılığıyla başlangıç yeri olmayan yerlere katılabilirler.
Bu, oyuncuların belirli alanlara erişmeden önce sıkı bir ilerleme sistemi olan bir oyun için iyi bir tercihtir. Ayrıca, oyuncuların erişmemesi gereken bir test yeri veya yalnızca rezerve edilmiş sunucuları kullanan yerler için de iyi bir tercihtir.
Güvenli teleportlara geçiş yapma
Var olan bir oyununuz varsa ve istemci tarafında teleportları kullanıyorsanız ve sunucu başlatmalı teleportlara geçiş yapmak istiyorsanız, tüm teleport mantığını istemci betiklerinden görünür hale getirmeniz ve sunucu betiklerine geçirmeniz gerekecektir:
- Teleport() çağrısı yapan tüm istemci betiklerini bulun.
- Bu çağrıları, uzaktan olaylar ateşleyecek şekilde değiştirin. Alternatif olarak, ProximityPrompts, ClickDetectors veya sadece BasePart.Touched olayını kullanarak değiştirin.
- TeleportAsync() kullanarak bir sunucu betiğinde teleport işlemini yeniden uygulayın.
- Artık Teleport() çağrıları kalmadığında, Yerler için Erişim Kontrolü ayarını Güvenli olarak değiştirin.
Özel teleport ekranları oluşturma
Bir kullanıcı bir teleportu 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.TeleportGuiTeleportService:SetTeleportGui(teleportGui)
Teleport seçeneklerini özelleştirme
TeleportOptions örneğini ayarlayarak ve bunu TeleportService:TeleportAsync() yöntemine geçirerek, kullanıcıları belirli sunuculara teleport etme ve teleportlarla birlikte kullanıcı verilerini gönderme gibi teleport işlemlerini özelleştirebilirsiniz.
Belirli sunuculara teleport etme
Kullanıcıları belirli sunuculara teleport etmek için, hedef sunucuyu TeleportOptions ile ayarlayın ve 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 da bir genel sunucu için benzersiz bir tanımlayıcıdır.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ServerInstanceId = targetServerId
Kullanıcıları belirli bir rezerve edilmiş sunucuya teleport etmek için, geçerli bir TeleportOptions.ReservedServerAccessCode ayarlayın, bu da rezerve edilmiş bir sunucuya giriş yapmak için benzersiz bir koddur.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ReservedServerAccessCode = reservedServerCode
Kullanıcıları yeni bir rezerve edilmiş sunucuya teleport etmek için, TeleportOptions.ShouldReserveServer özelliğini true olarak ayarlayın.
local teleportOptions = Instance.new("TeleportOptions")teleportOptions.ShouldReserveServer = true
Teleportlarla birlikte kullanıcı verilerini gönderme
Bir kullanıcıyı yerler arasında teleport etmek, o kullanıcıya ait herhangi bir yerel veriyi kaldırır. Yerler arasında veri sürekliliğini sağlamak için aşağıdaki yaklaşımları kullanabilirsiniz:
Oyun içi para veya envanter gibi güvenli kullanıcı verisi kullanan bir oyununuz varsa, yerden yere veri saklamak için veri depolarını veya bellek depolarını uygulayın.
Temel güvenli olmayan verileri yerler arasında göndermek için, TeleportOptions:SetTeleportData() çağrısını yapmadan önce TeleportAsync() geçirin. Güvenli verileri bu yöntemle geçirmeyin; 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 fonksiyon, TeleportData anahtarıyla bir sözlük döner.
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)
Sadece istemcide teleport verilerini almak için, TeleportService:GetLocalPlayerTeleportData() kullanabilirsiniz.
Başarısız teleportları yönetme
Ağ istekleri içeren herhangi bir API çağrısı gibi, teleportlar hatalı olabilir ve bir hata oluşturabilir. Bunları korunaklı çağrılara (pcall()) sarın. Bazı hatalar, özellikle rezerve edilmiş sunucularla ilgili olanlar, yeniden denemelerden fayda görebilir, bu nedenle başarısızlık durumunda bir sayı kadar yeniden denemeyi öneririz.
Bir çağrı başarılı olsa ve teleport başlatılsa bile, hala en son anda bir hata oluşabilir ve kullanıcıyı sunucuda bırakabilir. Bu olduğunda, TeleportService.TeleportInitFailed olayı tetiklenir.
Aşağıdaki örnek ModuleScript, oyuncuları korunaklı bir çağrıyla teleport eden tek bir SafeTeleport fonksiyonu döner. Ayrıca, bu çağrının başarılı olduğu durumlarda teleportun gerçekleşmediği durumlarda 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ımla, böylece daha sonra bildirilebilir
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- hataları önlemek için korunaklı 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 denemeyi 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 hatalıysa, yeniden denemek yerine hatayı bildir
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() fonksiyonuna aynı argümanları alır. Bu scripti SafeTeleport fonksiyonu ile oyununuzun herhangi bir yerinden teleportları gerçekleştirmek için kullanabilirsiniz:
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)