--[[ TRI-MENU V6.1: 1. Air Walk (Vuelo por plataformas) 2. Path Builder (Caminos Personalizados) --]] local Player = game.Players.LocalPlayer local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local UserInputService = game:GetService("UserInputService") -- --- CONFIGURACIÓN Y ESTADO --- local Estado = { AirWalk = false, AlturaDeseada = 0, UltimaPlataforma = nil } -- Carpetas de almacenamiento local function GetFolder(name) local f = workspace:FindFirstChild(name) or Instance.new("Folder", workspace) f.Name = name return f end local Folders = { AirWalk = GetFolder("Storage_AirWalk"), Path = GetFolder("Storage_Paths") } -- --- INTERFAZ PRINCIPAL --- local ScreenGui = Instance.new("ScreenGui", Player.PlayerGui) ScreenGui.Name = "TriMenu_V6_Mod" ScreenGui.ResetOnSpawn = false local MainFrame = Instance.new("Frame", ScreenGui) MainFrame.Size = UDim2.new(0, 180, 0, 280) MainFrame.Position = UDim2.new(0.5, -90, 0.4, 0) MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.ClipsDescendants = true Instance.new("UICorner", MainFrame).CornerRadius = UDim.new(0, 10) -- Barra de Título (Arrastrable) local TitleBar = Instance.new("TextButton", MainFrame) TitleBar.Size = UDim2.new(1, 0, 0, 35) TitleBar.Text = " TRI-MENU V6.1" TitleBar.TextColor3 = Color3.new(1, 1, 1) TitleBar.BackgroundColor3 = Color3.fromRGB(30, 30, 35) TitleBar.Font = Enum.Font.GothamBold TitleBar.TextSize = 12 TitleBar.AutoButtonColor = false TitleBar.TextXAlignment = Enum.TextXAlignment.Left Instance.new("UICorner", TitleBar) local MiniBtn = Instance.new("TextButton", TitleBar) MiniBtn.Size = UDim2.new(0, 25, 0, 25) MiniBtn.Position = UDim2.new(1, -30, 0, 5) MiniBtn.Text = "-" MiniBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 55) MiniBtn.TextColor3 = Color3.new(1, 1, 1) Instance.new("UICorner", MiniBtn) -- Lógica de Arrastre local dragging, dragStart, startPos TitleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position local releaseConnection releaseConnection = UserInputService.InputEnded:Connect(function(endInput) if endInput.UserInputType == Enum.UserInputType.MouseButton1 or endInput.UserInputType == Enum.UserInputType.Touch then dragging = false releaseConnection:Disconnect() end end) end end) UserInputService.InputChanged:Connect(function(input) if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end end) -- --- BARRA DE PESTAÑAS (AJUSTADA A 2) --- local TabBar = Instance.new("Frame", MainFrame) TabBar.Size = UDim2.new(1, 0, 0, 30) TabBar.Position = UDim2.new(0, 0, 0, 35) TabBar.BackgroundColor3 = Color3.fromRGB(25, 25, 30) TabBar.BorderSizePixel = 0 local function CreateTabBtn(txt, pos) local b = Instance.new("TextButton", TabBar) b.Size = UDim2.new(0.5, 0, 1, 0) -- 50% de ancho cada una b.Position = UDim2.new(pos, 0, 0, 0) b.Text = txt b.BackgroundColor3 = Color3.fromRGB(35, 35, 40) b.TextColor3 = Color3.fromRGB(200, 200, 200) b.Font = Enum.Font.GothamBold b.TextSize = 10 b.BorderSizePixel = 0 return b end local btnTab1 = CreateTabBtn("WALK", 0) local btnTab2 = CreateTabBtn("PATH", 0.5) -- Contenedores de Pestañas local Pages = Instance.new("Frame", MainFrame) Pages.Size = UDim2.new(1, 0, 1, -65) Pages.Position = UDim2.new(0, 0, 0, 65) Pages.BackgroundTransparency = 1 local function CreatePage() local p = Instance.new("Frame", Pages) p.Size = UDim2.new(1, 0, 1, 0) p.BackgroundTransparency = 1 p.Visible = false local l = Instance.new("UIListLayout", p) l.Padding = UDim.new(0, 5) l.HorizontalAlignment = Enum.HorizontalAlignment.Center Instance.new("UIPadding", p).PaddingTop = UDim.new(0, 10) return p end local pageWalk = CreatePage() local pagePath = CreatePage() local function ShowPage(page) pageWalk.Visible = false; pagePath.Visible = false page.Visible = true end ShowPage(pageWalk) btnTab1.MouseButton1Click:Connect(function() ShowPage(pageWalk) end) btnTab2.MouseButton1Click:Connect(function() ShowPage(pagePath) end) -- --- COMPONENTES UI REUTILIZABLES --- local function UI_Button(txt, col, parent) local b = Instance.new("TextButton", parent) b.Size = UDim2.new(0, 160, 0, 32) b.Text = txt b.BackgroundColor3 = col b.TextColor3 = Color3.new(1, 1, 1) b.Font = Enum.Font.GothamSemibold b.TextSize = 10 Instance.new("UICorner", b) return b end local function UI_Input(ph, parent) local i = Instance.new("TextBox", parent) i.Size = UDim2.new(0, 160, 0, 30) i.PlaceholderText = ph i.Text = "" i.BackgroundColor3 = Color3.fromRGB(40, 40, 45) i.TextColor3 = Color3.new(1, 1, 1) i.Font = Enum.Font.Gotham i.TextSize = 11 Instance.new("UICorner", i) return i end -- --- 1. LÓGICA AIR WALK --- local btnAW_Toggle = UI_Button("ESTADO: OFF", Color3.fromRGB(150, 50, 50), pageWalk) UI_Button("↑ SUBIR (Q)", Color3.fromRGB(45, 130, 180), pageWalk).MouseButton1Click:Connect(function() Estado.AlturaDeseada += 3 end) UI_Button("↓ BAJAR (E)", Color3.fromRGB(120, 60, 150), pageWalk).MouseButton1Click:Connect(function() Estado.AlturaDeseada -= 3 end) UI_Button("LIMPIAR", Color3.fromRGB(80, 80, 80), pageWalk).MouseButton1Click:Connect(function() Folders.AirWalk:ClearAllChildren() end) btnAW_Toggle.MouseButton1Click:Connect(function() Estado.AirWalk = not Estado.AirWalk btnAW_Toggle.Text = Estado.AirWalk and "ESTADO: ON" or "ESTADO: OFF" btnAW_Toggle.BackgroundColor3 = Estado.AirWalk and Color3.fromRGB(50, 150, 80) or Color3.fromRGB(150, 50, 50) if Estado.AirWalk and Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") then Estado.AlturaDeseada = Player.Character.HumanoidRootPart.Position.Y - 3.2 else Folders.AirWalk:ClearAllChildren() end end) -- --- 2. LÓGICA PATH BUILDER --- local inPathLargo = UI_Input("Largo del Camino", pagePath) local inPathAncho = UI_Input("Ancho del Camino", pagePath) UI_Button("GENERAR CAMINO", Color3.fromRGB(100, 50, 150), pagePath).MouseButton1Click:Connect(function() local root = Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") if not root then return end local p = Instance.new("Part", Folders.Path) local l, a = tonumber(inPathLargo.Text) or 100, tonumber(inPathAncho.Text) or 15 p.Size = Vector3.new(a, 1, l); p.Anchored = true; p.Material = Enum.Material.Neon p.Color = Color3.fromRGB(150, 100, 255) p.CFrame = root.CFrame * CFrame.new(0, -3.2, -l/2) end) UI_Button("BORRAR CAMINOS", Color3.fromRGB(150, 50, 50), pagePath).MouseButton1Click:Connect(function() Folders.Path:ClearAllChildren() end) -- --- BUCLE PRINCIPAL (AIR WALK) --- RunService.Heartbeat:Connect(function() if not Estado.AirWalk then return end local root = Player.Character and Player.Character:FindFirstChild("HumanoidRootPart") if not root then return end local pos = root.Position if not Estado.UltimaPlataforma or (Vector2.new(pos.X, pos.Z) - Vector2.new(Estado.UltimaPlataforma.Position.X, Estado.UltimaPlataforma.Position.Z)).Magnitude > 2.5 then if Estado.UltimaPlataforma then local old = Estado.UltimaPlataforma TweenService:Create(old, TweenInfo.new(0.5), {Transparency = 1, Size = Vector3.new(0,0,0)}):Play() game.Debris:AddItem(old, 0.5) end local p = Instance.new("Part", Folders.AirWalk) p.Size = Vector3.new(6, 0.6, 6); p.Anchored = true; p.Material = Enum.Material.Neon p.Color = Color3.fromRGB(0, 255, 255); p.Transparency = 0.4 p.Position = Vector3.new(pos.X, Estado.AlturaDeseada, pos.Z) Estado.UltimaPlataforma = p end end) -- Minimizar local Minimizado = false MiniBtn.MouseButton1Click:Connect(function() Minimizado = not Minimizado TweenService:Create(MainFrame, TweenInfo.new(0.3), {Size = Minimizado and UDim2.new(0, 180, 0, 35) or UDim2.new(0, 180, 0, 280)}):Play() MiniBtn.Text = Minimizado and "+" or "-" Pages.Visible = not Minimizado TabBar.Visible = not Minimizado end) -- Teclas rápidas UserInputService.InputBegan:Connect(function(input, gpe) if gpe then return end if input.KeyCode == Enum.KeyCode.Q then Estado.AlturaDeseada += 3 elseif input.KeyCode == Enum.KeyCode.E then Estado.AlturaDeseada -= 3 end end)