
Key Required

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)
Hi