How to make a Chapter menu teleport gui

You can write your topic however you want, but you need to answer these questions:

  1. What do you want to achieve? Keep it simple and clear!
    I woould like to make a chapter menu the player can select the chapter they want to play that tables the player up to a certain number and time for example 30 second.

  2. What is the issue? Include screenshots / videos if possible!
    I have tried to make this in the pas by converting a story game reserved serve walk in style chapter selector but keep crashing

  3. What solutions have you tried so far? Did you look for solutions on the Developer Hub?
    I had this menu working in a gui format but after a few teleport it jams and stops working,

This is the code i used then converted it to a GUI :

local TS = game:GetService(“TeleportService”)
local TweenService = game:GetService(“TweenService”)
local placeId = “8625098126”
local leaveGuiEvent = game.ReplicatedStorage.LeaveGuiEvent
local TransitionEvent = game.ReplicatedStorage.TransitionEvent
local list = {}
local gui = script.Parent.GuiPart.SurfaceGui
local billboard = script.Parent.billboardPart.billboardGui
local timer
local teleporting = false
local spawnTeleport = script.Parent.spawn

local function updateGui()
gui.Frame.players.Text = #list
billboard.Frame.players.Text = #list
end

local function removeFromList(character)
for i=1,#list do
if list[i] == character.Name then
table.remove(list,i)
updateGui()
end
end
end

local function teleportPlayers()
if #list > 0 then
script.Parent.GuiPart.SurfaceGui.Frame.Status.Text = “TELEPORTING”
script.Parent.GuiPart.SurfaceGui.Frame.Status.TextColor3 = Color3.new(1,0,0)
local playersToTeleport = {}
local teleportTime = 0
for i=1,#list do
if game.Players:findFirstChild(list[i]) then
table.insert(playersToTeleport,game.Players:findFirstChild(list[i]))
TransitionEvent:FireClient(game.Players:findFirstChild(list[i]))
else
table.remove(list,i)
end
end
local code = TS:ReserveServer(placeId)
teleporting = true
TS:TeleportToPrivateServer(placeId,code,playersToTeleport)
repeat wait() until #list <= 0
script.Parent.GuiPart.SurfaceGui.Frame.Status.Text = “READY”
script.Parent.GuiPart.SurfaceGui.Frame.Status.TextColor3 = Color3.new(34/255,255/255,20/255)
teleporting = false
end
end

script.Parent.Gate.Touched:Connect(function(hit)
if hit.Parent:findFirstChild(“Humanoid”) then
if teleporting == false then
local char = hit.Parent
local player = game.Players:FindFirstChild(char.Name)
local alreadyExists = false

		for i=1,#list do
			if list[i] == char.Name then
				alreadyExists = true
			end
		end
		
		if alreadyExists == false then
			if #list < 6 then
				table.insert(list,char.Name)
				char.PrimaryPart.CFrame = spawnTeleport.CFrame
				updateGui()
				leaveGuiEvent:FireClient(player)
			end
			
			player.CharacterRemoving:connect(function(character)
				removeFromList(character)
			end)
		end
		
	end
end

end)

leaveGuiEvent.OnServerEvent:Connect(function(player)
if player.Character then
player.Character.HumanoidRootPart.Anchored = false
wait()
player.Character.Humanoid.Jump = true
wait()
player.Character:MoveTo(game.Workspace.leaveRoomPart.Position)
removeFromList(player.Character)
end
end)

while wait() do
timer = 30
for i=1,timer do
timer = timer - 1
gui.Frame.time.Text = timer
billboard.Frame.time.Text = timer
wait(1)
end
teleportPlayers()
end

1 Like