การเทเลพอร์ตระหว่างสถานที่

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

หากคุณต้องการสร้างประสบการณ์ที่มีสถานที่หลายแห่ง เช่นโลกแห่งความฝันที่มีเมืองหลายเมืองปราสาทดันเจี้ยนและป่ากว้างขวาง คุณสามารถใช้ TeleportService เพื่อเปิดให้ผู้ใช

การติดตั้งการเคลื่อนที่ทางไกล

เพื่อเปิดใช้งานการเคลื่อนย้ายในประสบการณ์ของคุณให้ใช้ TeleportService:TeleportAsync() วิธีการรับประกันสามประมาณตัว:

  • Class.DataModel.PlaceId|PlaceId สำหรับผู้ใช้ที่จะเทเลพอร์ตไปยัง
  • รายการที่ประกอบด้วย Player ตัวอย่างที่เป็นตัวแทนผู้ใช้เพื่อเทเลพอร์ต
  • ตัวอย่าง TeleportOptions ที่มีสมบัติสมบัติที่กำหนดเองสำหรับการโทร TeleportAsync() โทร

local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local TARGET_PLACE_ID = 1234 -- แทนที่ด้วยรหัสสถานที่ของคุณเอง
local playerToTeleport = Players:GetPlayers()[1] -- รับผู้ใช้ตัวแรกในประสบการณ์
TeleportService:TeleportAsync(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)

หากคุณต้องการใช้มาตรการป้องกันข้อผิดพลาดในการติดตั้งการเคลื่อนย้าย, ดู การจัดการล้มเหลวการเคลื่อนย้าย .

เปิดใช้งานการเคลื่อนย้ายข้ามประสบการณ์

เพื่อวัตถุประสงค์ด้านความปลอดภัย การเคลื่อนย้ายผู้ใช้จากประสบการณ์ของคุณไปยังประสบการณ์ของผู้อื่น หรือวิธีการอื่น ๆ จะล้มเหลวโดยปกติ เพื่อเปิดใช้งานการเค

การสร้างหน้าจอเทเลพอร์ตที่กําหนดเอง

เทเลพอร์ตพวกเขาจะเห็นหน้าจอการโหลดแ


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

การปรับแต่งตัวเลือกการเคลื่อนย้าย

คุณสามารถปรับแต่งการเคลื่อนย้ายได้, เช่น การเคลื่อนย้ายผู้ใช้ไปยังเซิร์ฟเวอร์ที่กำหนดเอง และ การส่งข้อมูลผู้ใช้พร้อมกับการเคลื่อนย้าย

การเทเลพอร์ตไปยังเซิร์ฟเวอร์ที่กำหนดเฉพาะ

เพื่อเทเลพอร์ตผู้ใช้ไปยังเซิร์ฟเวอร์เฉพาะให้ใช้ TeleportOptions และส่งมันไปยังวิธี TeleportService:TeleportAsync() หากคุณไม่ระบุเซิร์ฟเวอร์ผู้ใช้จะถูกเทเล

เพื่อเทเลพอร์ตผู้ใช้ไปยังเซิร์ฟเวอร์สาธารณะเฉพาะ TeleportOptions.ServerInstanceId โปรไฟล์ให้เป็นรหัสริงที่เป็นเอกลักษณ์สำหรับเซิร์ฟเวอร์สาธารณะ


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

เพื่อนำผู้ใช้ไปยังเซิร์ฟเวอร์ที่จองไว้เป็นพิเศษ, ตั้ง TeleportOptions.ReservedServerAccessCode ที่เป็นรหัสเฉพาะเพื่อการเข้าถึงเซิร์ฟเวอร์ที่จองไว้


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

เพื่อเทเลพอร์ตผู้ใช้ไปยังเซิร์ฟเวอร์ที่จองไว้ใหม่ให้ตั้ง TeleportOptions.ShouldReserveServer เป็นค่าจริง


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

การส่งข้อมูลผู้ใช้พร้อมกับการเคลื่อนย้าย

การเคลื่อนย้ายผู้ใช้ระหว่างสถานที่จะทิ้งข้อมูลใด ๆ ที่เกี่ยวข้องกับผู้ใช้นั้น คุณสามารถใช้วิธีการต่อไปนี้เพื่อจัดการความอดทนของข้อมูลระหว่างสถานที่

  • หากประสบการณ์ของคุณใช้ข้อมูลผู้ใช้ คลังไอเท็มเช่นเงินในประสบการณ์หรือกระเป๋าเป้ ให้ใช้ ห้องเก็บข้อมูล หรือ ห้องเก็บข้อมูล เพื่อให้ข้อมูลจากสถานที่หนึ่งไปยังอีกสถ

  • เพื่อส่งข้อมูลพื้นฐาน ไม่ปลอดภัย จากสถานที่หนึ่งไปยังอีกสถานที่หนึ่งโดยใช้ TeleportOptions:SetTeleportData() ก่อนส่งมันไปยัง TeleportAsync()


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

เพื่อรวบรวมข้อมูลทั้งหมดของผู้ใช้ที่มาจากเซิร์ฟเวอร์ส่งผ่านการเทเลพอร์ตในเซิร์ฟเวอร์ใช้งานฟังก์ชัน Player:GetJoinData() ซึ่งจะสร้างพจนารูปแบบข้อมูลรวมถึงข้อมูลที่เกี่ยวข้องกับผู้ใช้


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)

เพื่อดึงข้อมูลการเคลื่อนย้ายเท่านั้นในลูกค้าของคุณคุณสามารถใช้ TeleportService:GetLocalPlayerTeleportData()

การจัดการการล้มเหลวของ Teleports

เช่นเดียวกับการโทร API ที่เกี่ยวข้องกับคำขอเครือข่าย, การเคลื่อนที่อาจล้มเหลวและแสดงข้อผิดพลาด แม้ว่าการโทรสำเร็จและเริ่มต้น, มันยังสามารถเกิดขึ้นในขณะสุดท้

หุ้มเทเลพอร์ตในการโทรครั้งป้องกัน ( pcall() ) และทำซ้ำหากมันล้มเหลว ตัวอย่างต่อไปนี้ ModuleScript จะกำ


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 -- กำหนดผล pcall นอกของล็อปให้ผลสามารถรายงานได้ในภายหลัง
repeat
success, result = pcall(function()
return TeleportService:TeleportAsync(placeId, players, options) -- เคลื่อนย้ายผู้ใช้ในการโทรที่ป้องกันเพื่อป้องกันความผิดพลาด
end)
attemptIndex += 1
if not success then
task.wait(RETRY_DELAY)
end
until success or attemptIndex == ATTEMPT_LIMIT -- หยุดพยายามที่จะเทเลพอร์ตหากโทรสำเร็จหรือถ้าขีดจำกัดการทดลองถูกเข้าถึง
if not success then
warn(result) -- พิมพ์เหตุผลที่ล้มเหลวเพื่อออก
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 ไม่ถูกต้อง รายงานข้อผิดพลาดแทนที่จะลองใหม่
error(("Invalid teleport [%s]: %s"):format(teleportResult.Name, errorMessage))
end
SafeTeleport(targetPlaceId, {player}, teleportOptions)
end
TeleportService.TeleportInitFailed:Connect(handleFailedTeleport)
return SafeTeleport

ฟังก์ชัน SafeTeleport รับอาร์กุตเดียวกับฟังก์ชัน TeleportAsync() คุณสามารถใช้ ModuleScript ด้วย 1> SafeTeleport1> ฟังก์ชันเพื่อดำเนินการ


local Players = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local SafeTeleport = require(ServerScriptService.SafeTeleport)
local TARGET_PLACE_ID = 1818 -- แทนที่ด้วยรหัสสถานที่ของคุณเอง
local playerToTeleport = Players:GetPlayers()[1] -- รับผู้ใช้คนแรกในเกม
SafeTeleport(TARGET_PLACE_ID, {playerToTeleport}, teleportOptions)