Teleport Hub
Key Required

Teleport Hub

[UP] Just a baseplate.FluxDevFluxDev 411 views 369 executesUpdated Aug 10, 2026
Unrated
00
Lua Script•298 lines (9402 chars)
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local CoreGui = game:GetService("CoreGui")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")

local player = Players.LocalPlayer

-- --- SISTEMA ANTI-DUPLICADOS: DESTRUYE CUALQUIER GUI ANTERIOR ---
local oldGui = CoreGui:FindFirstChild("ModernPositionSaver")
if oldGui then
	oldGui:Destroy()
end

-- --- CREACIÓN DE LA NUEVA INTERFAZ (Proporción 16:9 -> 640x360) ---
local sg = Instance.new("ScreenGui")
sg.Name = "ModernPositionSaver"
sg.ResetOnSpawn = false
sg.Parent = CoreGui

-- Panel Principal Oscuro
local main = Instance.new("Frame")
main.Size = UDim2.new(0, 640, 0, 360) -- Proporción 16:9
main.Position = UDim2.new(0.5, -320, 0.5, -180)
main.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
main.BorderSizePixel = 0
main.ClipsDescendants = true
main.Active = true
main.Parent = sg

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 12)
mainCorner.Parent = main

local mainStroke = Instance.new("UIStroke")
mainStroke.Color = Color3.fromRGB(60, 60, 70)
mainStroke.Thickness = 1
mainStroke.Parent = main

-- Barra Superior (Título)
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 40)
titleBar.BackgroundTransparency = 1
titleBar.Parent = main

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -80, 1, 0)
title.Position = UDim2.new(0, 15, 0, 0)
title.Text = "Teleporter to the place"
title.TextColor3 = Color3.fromRGB(240, 240, 240)
title.TextSize = 16
title.Font = Enum.Font.GothamBold
title.TextXAlignment = Enum.TextXAlignment.Left
title.BackgroundTransparency = 1
title.Parent = titleBar

-- Botón de Minimizar (—)
local minimizeBtn = Instance.new("TextButton")
minimizeBtn.Size = UDim2.new(0, 30, 0, 30)
minimizeBtn.Position = UDim2.new(1, -70, 0, 5)
minimizeBtn.BackgroundTransparency = 1
minimizeBtn.Text = "—"
minimizeBtn.TextColor3 = Color3.fromRGB(150, 150, 160)
minimizeBtn.TextSize = 16
minimizeBtn.Font = Enum.Font.GothamBold
minimizeBtn.Parent = titleBar

-- Botón de Cerrar Ventana (✕)
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 30, 0, 30)
closeBtn.Position = UDim2.new(1, -35, 0, 5)
closeBtn.BackgroundTransparency = 1
closeBtn.Text = "✕"
closeBtn.TextColor3 = Color3.fromRGB(150, 150, 160)
closeBtn.TextSize = 16
closeBtn.Font = Enum.Font.GothamBold
closeBtn.Parent = titleBar

-- --- CONTENEDOR CON BARRA DE DESPLAZAMIENTO (SCROLLINGFRAME) ---
local scrollFrame = Instance.new("ScrollingFrame")
scrollFrame.Size = UDim2.new(1, -20, 1, -50)
scrollFrame.Position = UDim2.new(0, 10, 0, 45)
scrollFrame.BackgroundTransparency = 1
scrollFrame.BorderSizePixel = 0
scrollFrame.ScrollBarThickness = 8
scrollFrame.ScrollBarImageColor3 = Color3.fromRGB(90, 90, 105)
scrollFrame.Parent = main

-- LÓGICA DE MINIMIZAR / MAXIMIZAR
local isMinimized = false
minimizeBtn.MouseButton1Click:Connect(function()
	isMinimized = not isMinimized
	local targetSize = isMinimized and UDim2.new(0, 640, 0, 40) or UDim2.new(0, 640, 0, 360)
	
	scrollFrame.Visible = not isMinimized
	TweenService:Create(main, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = targetSize}):Play()
end)

-- Cuadrícula organizada en 3 Columnas/Hileras
local gridLayout = Instance.new("UIGridLayout")
gridLayout.CellSize = UDim2.new(0, 192, 0, 50)
gridLayout.CellPadding = UDim2.new(0, 10, 0, 10)
gridLayout.FillDirectionMaxCells = 3 -- 3 columnas por hilera
gridLayout.Parent = scrollFrame

-- Ajuste automático de la barra desplegable
gridLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
	scrollFrame.CanvasSize = UDim2.new(0, 0, 0, gridLayout.AbsoluteContentSize.Y + 15)
end)

-- Tabla de almacenamiento de posiciones
local savedPositions = {}

-- --- FUNCIÓN PARA CREAR CADA SLOT CON SUS BOTONES ---
local function createSlot(id)
	local slotFrame = Instance.new("Frame")
	slotFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 42)
	slotFrame.BorderSizePixel = 0
	slotFrame.Parent = scrollFrame

	local slotCorner = Instance.new("UICorner")
	slotCorner.CornerRadius = UDim.new(0, 8)
	slotCorner.Parent = slotFrame

	-- 1. BOTÓN GUARDAR
	local saveBtn = Instance.new("TextButton")
	saveBtn.Size = UDim2.new(0, 78, 1, 0)
	saveBtn.Position = UDim2.new(0, 0, 0, 0)
	saveBtn.BackgroundColor3 = Color3.fromRGB(45, 120, 240)
	saveBtn.Text = "P" .. id .. " Guardar"
	saveBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
	saveBtn.Font = Enum.Font.GothamMedium
	saveBtn.TextSize = 11
	saveBtn.BorderSizePixel = 0
	saveBtn.Parent = slotFrame

	local saveCorner = Instance.new("UICorner")
	saveCorner.CornerRadius = UDim.new(0, 8)
	saveCorner.Parent = saveBtn

	-- 2. BOTÓN VIAJAR (FLOTANDO)
	local tpBtn = Instance.new("TextButton")
	tpBtn.Size = UDim2.new(0, 82, 1, 0)
	tpBtn.Position = UDim2.new(0, 82, 0, 0)
	tpBtn.BackgroundColor3 = Color3.fromRGB(40, 170, 90)
	tpBtn.Text = "Viajar ☁️"
	tpBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
	tpBtn.Font = Enum.Font.GothamBold
	tpBtn.TextSize = 11
	tpBtn.BorderSizePixel = 0
	tpBtn.Parent = slotFrame

	local tpCorner = Instance.new("UICorner")
	tpCorner.CornerRadius = UDim.new(0, 8)
	tpCorner.Parent = tpBtn

	-- 3. BOTÓN BORRAR (✕)
	local deleteBtn = Instance.new("TextButton")
	deleteBtn.Size = UDim2.new(0, 24, 1, 0)
	deleteBtn.Position = UDim2.new(1, -24, 0, 0)
	deleteBtn.BackgroundTransparency = 1
	deleteBtn.Text = "✕"
	deleteBtn.TextColor3 = Color3.fromRGB(200, 80, 80)
	deleteBtn.Font = Enum.Font.GothamBold
	deleteBtn.TextSize = 13
	deleteBtn.Parent = slotFrame

	-- LÓGICA: GUARDAR
	saveBtn.MouseButton1Click:Connect(function()
		local char = player.Character
		if char and char:FindFirstChild("HumanoidRootPart") then
			savedPositions[id] = char.HumanoidRootPart.CFrame
			saveBtn.Text = "¡Guardado! ✓"
			task.wait(1)
			saveBtn.Text = "P" .. id .. " Guardar"
		end
	end)

	-- LÓGICA: VIAJAR (FLOTANDO Y SIN BUGS)
	tpBtn.MouseButton1Click:Connect(function()
		local char = player.Character
		if not savedPositions[id] then
			tpBtn.Text = "¡Sin Posición!"
			task.wait(1)
			tpBtn.Text = "Viajar ☁️"
			return
		end

		if char and char:FindFirstChild("HumanoidRootPart") then
			local hrp = char.HumanoidRootPart

			task.spawn(function()
				tpBtn.Text = "¡Volando...!"

				-- Detener inercia
				hrp.AssemblyLinearVelocity = Vector3.zero
				hrp.AssemblyAngularVelocity = Vector3.zero

				-- Elevar un poco (+3 bloques)
				local startCFrame = hrp.CFrame + Vector3.new(0, 3, 0)
				local targetCFrame = savedPositions[id] + Vector3.new(0, 3, 0)
				hrp.CFrame = startCFrame

				-- Fuerza Antigravedad
				local bodyVel = Instance.new("BodyVelocity")
				bodyVel.Name = "AntiBugFloat"
				bodyVel.Velocity = Vector3.zero
				bodyVel.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
				bodyVel.Parent = hrp

				-- Noclip durante el viaje para atravesar paredes
				local noclipConn = RunService.Stepped:Connect(function()
					for _, part in ipairs(char:GetDescendants()) do
						if part:IsA("BasePart") then
							part.CanCollide = false
						end
					end
				end)

				-- Cálculo de tiempo proporcional a distancia
				local distance = (targetCFrame.Position - startCFrame.Position).Magnitude
				local travelTime = math.clamp(distance / 80, 0.8, 4)

				local tween = TweenService:Create(hrp, TweenInfo.new(travelTime, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut), {CFrame = targetCFrame})
				tween:Play()
				tween.Completed:Wait()

				-- Aterrizar suavemente
				local landTween = TweenService:Create(hrp, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {CFrame = savedPositions[id]})
				landTween:Play()
				landTween.Completed:Wait()

				-- Limpieza de física
				noclipConn:Disconnect()
				bodyVel:Destroy()
				hrp.AssemblyLinearVelocity = Vector3.zero

				tpBtn.Text = "¡Llegaste! ✓"
				task.wait(1)
				tpBtn.Text = "Viajar ☁️"
			end)
		end
	end)

	-- LÓGICA: BORRAR
	deleteBtn.MouseButton1Click:Connect(function()
		if savedPositions[id] then
			savedPositions[id] = nil
			tpBtn.Text = "Borrado ✕"
			task.wait(1)
			tpBtn.Text = "Viajar ☁️"
		end
	end)
end

-- Generar los 15 Slots
for i = 1, 15 do
	createSlot(i)
end

-- --- ARRASTRE DE VENTANA (DRAG) ---
local dragging, dragInput, dragStart, startPos
local function update(input)
	local delta = input.Position - dragStart
	main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end

titleBar.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
		dragging = true ; dragStart = input.Position ; startPos = main.Position
		input.Changed:Connect(function()
			if input.UserInputState == Enum.UserInputState.End then dragging = false end
		end)
	end
end)

titleBar.InputChanged:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
		dragInput = input
	end
end)

UIS.InputChanged:Connect(function(input)
	if input == dragInput and dragging then
		update(input)
	end
end)

closeBtn.MouseButton1Click:Connect(function()
	sg:Destroy()
end)

-- Tecla X para alternar visibilidad
UIS.InputBegan:Connect(function(input, gpe)
	if input.KeyCode == Enum.KeyCode.X and not gpe then
		main.Visible = not main.Visible
	end
end)

Features & Information

For use: It only works on a computer and android The blue button is used to save the character's position; it detects the position there. The green button is used to travel to the position set by the blue button. The small button next to the green button is used to remove the character's position; doing this makes it no longer possible to travel. The GUI has 3 rows of 15 buttons; each has a modern interface, it can be dragged with the mouse, and it also has a button to close it. If you want more options to add, let me know and I will do what I can. Enjoy the teleportation script.

Community Comments (1)

FluxDevFluxDevSep 2, 2026

Hi

More Scripts for [UP] Just a baseplate.