
Key Required

-- VICTOR HUB — GUI Moderno, Arrastrable con Minimizar
-- LocalScript en StarterGui
local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local UIS = game:GetService("UserInputService")
local player = Players.LocalPlayer
local pGui = player:WaitForChild("PlayerGui")
local char = player.Character or player.CharacterAdded:Wait()
-- ══════════════════════════════════════════════
-- COLORES
-- ══════════════════════════════════════════════
local C = {
BG = Color3.fromRGB(8, 12, 22),
PANEL = Color3.fromRGB(12, 18, 35),
HEADER = Color3.fromRGB(20, 30, 55),
ACCENT = Color3.fromRGB(110, 60, 240),
ACCENT2 = Color3.fromRGB(60, 180, 255),
TEXT = Color3.fromRGB(230, 225, 255),
TEXTDIM = Color3.fromRGB(130, 120, 170),
DANGER = Color3.fromRGB(220, 40, 60),
SUCCESS = Color3.fromRGB(50, 200, 110),
}
-- ══════════════════════════════════════════════
-- HELPERS
-- ══════════════════════════════════════════════
local function addCorner(p, r)
local c = Instance.new("UICorner", p)
c.CornerRadius = UDim.new(0, r or 10)
return c
end
local function addStroke(p, col, th)
local s = Instance.new("UIStroke", p)
s.Color = col
s.Thickness = th or 1.5
return s
end
local function addGradient(p, c0, c1, rot)
local g = Instance.new("UIGradient", p)
g.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, c0),
ColorSequenceKeypoint.new(1, c1),
})
g.Rotation = rot or 90
return g
end
-- ══════════════════════════════════════════════
-- SCREENGUI
-- ══════════════════════════════════════════════
local SG = Instance.new("ScreenGui")
SG.Name = "VictorHub"
SG.ResetOnSpawn = false
SG.IgnoreGuiInset = true
SG.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
SG.Parent = pGui
-- ══════════════════════════════════════════════
-- PANEL PRINCIPAL
-- ══════════════════════════════════════════════
local PW, PH = 420, 520
local Panel = Instance.new("Frame")
Panel.Name = "VictorHubPanel"
Panel.Size = UDim2.new(0, PW, 0, PH)
Panel.Position = UDim2.new(0.5, -PW/2, 0.5, -PH/2)
Panel.BackgroundColor3= C.BG
Panel.BorderSizePixel = 0
Panel.ZIndex = 50
Panel.Active = true
Panel.Parent = SG
addCorner(Panel, 18)
addGradient(Panel, Color3.fromRGB(15, 20, 40), Color3.fromRGB(8, 10, 25), 140)
addStroke(Panel, C.ACCENT, 2.5)
-- ── HEADER ──────────────────────────────────
local Header = Instance.new("TextButton")
Header.Size = UDim2.new(1, 0, 0, 50)
Header.BackgroundColor3 = C.HEADER
Header.BorderSizePixel = 0
Header.Text = ""
Header.AutoButtonColor = false
Header.ZIndex = 51
Header.Active = true
Header.Parent = Panel
addCorner(Header, 18)
local hFix = Instance.new("Frame", Header)
hFix.Size = UDim2.new(1, 0, 0.5, 0)
hFix.Position = UDim2.new(0, 0, 0.5, 0)
hFix.BackgroundColor3 = C.HEADER
hFix.BorderSizePixel = 0
hFix.ZIndex = 51
-- Ícono
local hIcon = Instance.new("TextLabel", Header)
hIcon.Size = UDim2.new(0, 44, 1, 0)
hIcon.Position = UDim2.new(0, 10, 0, 0)
hIcon.BackgroundTransparency = 1
hIcon.Text = "⚡"
hIcon.TextSize = 26
hIcon.Font = Enum.Font.GothamBold
hIcon.TextColor3 = C.ACCENT2
hIcon.ZIndex = 52
-- Título
local hTitle = Instance.new("TextLabel", Header)
hTitle.Size = UDim2.new(1, -110, 1, 0)
hTitle.Position = UDim2.new(0, 56, 0, 0)
hTitle.BackgroundTransparency = 1
hTitle.Text = "VICTOR HUB"
hTitle.TextColor3 = C.TEXT
hTitle.TextSize = 18
hTitle.Font = Enum.Font.GothamBold
hTitle.TextXAlignment = Enum.TextXAlignment.Left
hTitle.ZIndex = 52
-- Gradiente en título
local tg = Instance.new("UIGradient", hTitle)
tg.Color = ColorSequence.new({
ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 100, 200)),
ColorSequenceKeypoint.new(0.5, Color3.fromRGB(100, 200, 255)),
ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 255, 150)),
})
tg.Rotation = 0
-- Animar gradiente
task.spawn(function()
local r = 0
while hTitle and hTitle.Parent do
r = (r + 1.5) % 360
tg.Rotation = r
task.wait(0.04)
end
end)
-- Botón minimizar
local MinBtn = Instance.new("TextButton", Header)
MinBtn.Size = UDim2.new(0, 32, 0, 32)
MinBtn.Position = UDim2.new(1, -74, 0.5, -16)
MinBtn.BackgroundColor3 = Color3.fromRGB(80, 120, 200)
MinBtn.Text = "−"
MinBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
MinBtn.TextSize = 20
MinBtn.Font = Enum.Font.GothamBold
MinBtn.AutoButtonColor = false
MinBtn.ZIndex = 53
addCorner(MinBtn, 8)
addStroke(MinBtn, C.ACCENT, 1.5)
-- Botón cerrar
local CloseBtn = Instance.new("TextButton", Header)
CloseBtn.Size = UDim2.new(0, 32, 0, 32)
CloseBtn.Position = UDim2.new(1, -36, 0.5, -16)
CloseBtn.BackgroundColor3 = C.DANGER
CloseBtn.Text = "✕"
CloseBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseBtn.TextSize = 16
CloseBtn.Font = Enum.Font.GothamBold
CloseBtn.AutoButtonColor = false
CloseBtn.ZIndex = 53
addCorner(CloseBtn, 8)
-- ── TABS ────────────────────────────────────
-- (Todo el código de tabs, contenido, habilidades se mantiene exactamente igual)
local tabNames = {"⚡ Habilidades"}
local tabs = {}
local tabActivo = 1
local TabBar = Instance.new("Frame", Panel)
TabBar.Size = UDim2.new(1, -20, 0, 36)
TabBar.Position = UDim2.new(0, 10, 0, 58)
TabBar.BackgroundColor3= C.PANEL
TabBar.BorderSizePixel = 0
TabBar.ZIndex = 51
addCorner(TabBar, 10)
local tabLay = Instance.new("UIListLayout", TabBar)
tabLay.FillDirection = Enum.FillDirection.Horizontal
tabLay.SortOrder = Enum.SortOrder.LayoutOrder
tabLay.Padding = UDim.new(0, 4)
local tabPad = Instance.new("UIPadding", TabBar)
tabPad.PaddingLeft = UDim.new(0, 4)
tabPad.PaddingTop = UDim.new(0, 4)
tabPad.PaddingBottom = UDim.new(0, 4)
local Content = Instance.new("Frame", Panel)
Content.Size = UDim2.new(1, -20, 1, -110)
Content.Position = UDim2.new(0, 10, 0, 102)
Content.BackgroundColor3= C.PANEL
Content.BorderSizePixel = 0
Content.ZIndex = 51
addCorner(Content, 10)
for i, name in ipairs(tabNames) do
local btn = Instance.new("TextButton", TabBar)
btn.Size = UDim2.new(0, (PW-28-16), 1, 0)
btn.BackgroundColor3 = C.ACCENT
btn.Text = name
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.TextSize = 12
btn.Font = Enum.Font.GothamBold
btn.AutoButtonColor = false
btn.ZIndex = 52
btn.LayoutOrder = i
addCorner(btn, 8)
local frame = Instance.new("Frame", Content)
frame.Size = UDim2.new(1, 0, 1, 0)
frame.BackgroundTransparency = 1
frame.Visible = i == 1
frame.ZIndex = 52
tabs[i] = frame
btn.Activated:Connect(function()
tabActivo = i
for j, b in ipairs(TabBar:GetChildren()) do
if b:IsA("TextButton") then
TweenService:Create(b, TweenInfo.new(0.15), {
BackgroundColor3 = j == i and C.ACCENT or Color3.fromRGB(30, 22, 60),
}):Play()
end
end
for j, f in ipairs(tabs) do
f.Visible = j == i
end
end)
end
-- ══════════════════════════════════════════════
-- TAB: HABILIDADES
-- ══════════════════════════════════════════════
local scrollHab = Instance.new("ScrollingFrame", tabs[1])
scrollHab.Size = UDim2.new(1, -10, 1, -10)
scrollHab.Position = UDim2.new(0, 5, 0, 5)
scrollHab.BackgroundTransparency = 1
scrollHab.ScrollBarThickness = 4
scrollHab.CanvasSize = UDim2.new(0, 0, 0, 0)
scrollHab.AutomaticCanvasSize = Enum.AutomaticSize.Y
scrollHab.ZIndex = 53
local habLay = Instance.new("UIListLayout", scrollHab)
habLay.SortOrder = Enum.SortOrder.LayoutOrder
habLay.Padding = UDim.new(0, 8)
local habPad = Instance.new("UIPadding", scrollHab)
habPad.PaddingLeft = UDim.new(0, 5)
habPad.PaddingRight = UDim.new(0, 5)
habPad.PaddingTop = UDim.new(0, 5)
local habilidades = {
{emoji="🚀", nombre="Infiniti Jump", desc="Salta infinitamente", toggle=true},
{emoji="👻", nombre="Noclip", desc="Atraviesa paredes", toggle=true},
{emoji="⚡", nombre="Speed Boost", desc="Aumenta tu velocidad x2", toggle=true},
{emoji="💨", nombre="Boost", desc="Propulsa hacia adelante", button=true},
{emoji="🛡️", nombre="Anti Void", desc="No caes al vacío", toggle=true},
{emoji="🟢", nombre="Anti Lag", desc="Optimiza rendering", toggle=true},
{emoji="👁️", nombre="ESP Players", desc="Ve a otros jugadores", toggle=true},
}
for i, hab in ipairs(habilidades) do
local row = Instance.new("Frame", scrollHab)
row.Size = UDim2.new(1, 0, 0, 46)
row.BackgroundColor3 = Color3.fromRGB(18, 13, 40)
row.BorderSizePixel = 0
row.ZIndex = 53
row.LayoutOrder = i
addCorner(row, 10)
addStroke(row, C.ACCENT, 1)
local emoji = Instance.new("TextLabel", row)
emoji.Size = UDim2.new(0, 40, 1, 0)
emoji.BackgroundTransparency = 1
emoji.Text = hab.emoji
emoji.TextSize = 20
emoji.Font = Enum.Font.GothamBold
emoji.ZIndex = 54
local nombre = Instance.new("TextLabel", row)
nombre.Size = UDim2.new(0.55, 0, 0.5, 0)
nombre.Position = UDim2.new(0, 45, 0, 4)
nombre.BackgroundTransparency = 1
nombre.Text = hab.nombre
nombre.TextColor3 = C.ACCENT2
nombre.TextSize = 13
nombre.Font = Enum.Font.GothamBold
nombre.TextXAlignment = Enum.TextXAlignment.Left
nombre.ZIndex = 54
local desc = Instance.new("TextLabel", row)
desc.Size = UDim2.new(0.55, 0, 0.5, 0)
desc.Position = UDim2.new(0, 45, 0, 20)
desc.BackgroundTransparency = 1
desc.Text = hab.desc
desc.TextColor3 = C.TEXTDIM
desc.TextSize = 11
desc.Font = Enum.Font.Gotham
desc.TextXAlignment = Enum.TextXAlignment.Left
desc.ZIndex = 54
if hab.toggle then
local toggleBG = Instance.new("Frame", row)
toggleBG.Size = UDim2.new(0, 50, 0, 24)
toggleBG.Position = UDim2.new(1, -58, 0.5, -12)
toggleBG.BackgroundColor3 = Color3.fromRGB(40, 30, 70)
toggleBG.BorderSizePixel = 0
toggleBG.ZIndex = 54
addCorner(toggleBG, 12)
addStroke(toggleBG, C.ACCENT, 1.5)
local toggleBtn = Instance.new("TextButton", toggleBG)
toggleBtn.Size = UDim2.new(0, 20, 0, 20)
toggleBtn.Position = UDim2.new(0, 2, 0.5, -10)
toggleBtn.BackgroundColor3 = Color3.fromRGB(100, 80, 150)
toggleBtn.Text = ""
toggleBtn.AutoButtonColor = false
toggleBtn.ZIndex = 55
addCorner(toggleBtn, 4)
local activo = false
toggleBtn.Activated:Connect(function()
activo = not activo
if activo then
TweenService:Create(toggleBtn, TweenInfo.new(0.2), {Position = UDim2.new(0, 28, 0.5, -10), BackgroundColor3 = C.SUCCESS}):Play()
TweenService:Create(toggleBG, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(30, 50, 40)}):Play()
else
TweenService:Create(toggleBtn, TweenInfo.new(0.2), {Position = UDim2.new(0, 2, 0.5, -10), BackgroundColor3 = Color3.fromRGB(100, 80, 150)}):Play()
TweenService:Create(toggleBG, TweenInfo.new(0.2), {BackgroundColor3 = Color3.fromRGB(40, 30, 70)}):Play()
end
end)
else
local actionBtn = Instance.new("TextButton", row)
actionBtn.Size = UDim2.new(0, 50, 0, 28)
actionBtn.Position = UDim2.new(1, -58, 0.5, -14)
actionBtn.BackgroundColor3 = C.ACCENT
actionBtn.Text = "→"
actionBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
actionBtn.TextSize = 14
actionBtn.Font = Enum.Font.GothamBold
actionBtn.AutoButtonColor = false
actionBtn.ZIndex = 54
addCorner(actionBtn, 7)
actionBtn.MouseEnter:Connect(function()
TweenService:Create(actionBtn, TweenInfo.new(0.12), {BackgroundColor3 = C.ACCENT:Lerp(Color3.fromRGB(255,255,255), 0.15)}):Play()
end)
actionBtn.MouseLeave:Connect(function()
TweenService:Create(actionBtn, TweenInfo.new(0.12), {BackgroundColor3 = C.ACCENT}):Play()
end)
actionBtn.Activated:Connect(function()
print("[BOOST] Activado")
end)
end
end
-- ══════════════════════════════════════════════
-- HOVER Y CLICK (botones)
-- ══════════════════════════════════════════════
MinBtn.MouseEnter:Connect(function()
TweenService:Create(MinBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(100, 140, 220)}):Play()
end)
MinBtn.MouseLeave:Connect(function()
TweenService:Create(MinBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(80, 120, 200)}):Play()
end)
CloseBtn.MouseEnter:Connect(function()
TweenService:Create(CloseBtn, TweenInfo.new(0.1), {BackgroundColor3 = Color3.fromRGB(240, 60, 80)}):Play()
end)
CloseBtn.MouseLeave:Connect(function()
TweenService:Create(CloseBtn, TweenInfo.new(0.1), {BackgroundColor3 = C.DANGER}):Play()
end)
-- ══════════════════════════════════════════════
-- MINIMIZAR Y CERRAR (sin cambios)
-- ══════════════════════════════════════════════
local minimizado = false
MinBtn.Activated:Connect(function()
minimizado = not minimizado
if minimizado then
TweenService:Create(Panel, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.In), {
Size = UDim2.new(0, PW, 0, 50),
Position = UDim2.new(0.5, -PW/2, 1, -60),
}):Play()
MinBtn.Text = "▲"
for _, child in ipairs(Panel:GetChildren()) do
if child ~= Header and child:IsA("GuiObject") then
child.Visible = false
end
end
else
for _, child in ipairs(Panel:GetChildren()) do
if child ~= Header and child:IsA("GuiObject") then
child.Visible = true
end
end
TweenService:Create(Panel, TweenInfo.new(0.4, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
Size = UDim2.new(0, PW, 0, PH),
Position = UDim2.new(0.5, -PW/2, 0.5, -PH/2),
}):Play()
MinBtn.Text = "−"
end
end)
CloseBtn.Activated:Connect(function()
TweenService:Create(Panel, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
Size = UDim2.new(0, PW, 0, 0),
Position = UDim2.new(0.5, -PW/2, 0.5, 0),
BackgroundTransparency = 1,
}):Play()
task.wait(0.4)
Panel.Visible = false
end)
-- ══════════════════════════════════════════════
-- ARRASTRE OPTIMIZADO PARA DELTA
-- ══════════════════════════════════════════════
local dragging = false
local dragStart = nil
local startPos = nil
Header.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = true
dragStart = input.Position
startPos = Panel.AbsolutePosition
end
end)
UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
dragging = false
end
end)
UIS.InputChanged:Connect(function(input)
if not dragging then return end
if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
local delta = input.Position - dragStart
local viewport = workspace.CurrentCamera.ViewportSize
local panelSize = Panel.AbsoluteSize
local newX = math.clamp(startPos.X + delta.X, 0, viewport.X - panelSize.X)
local newY = math.clamp(startPos.Y + delta.Y, 0, viewport.Y - panelSize.Y)
Panel.Position = UDim2.new(0, newX, 0, newY)
-- Actualizar startPos para movimiento continuo
dragStart = input.Position
startPos = Vector2.new(newX, newY)
end
end)
print("✅ VICTOR HUB listo (arrastrable optimizado para Delta)")No comments yet for this script.
