CCCPaste

GalaxityHub

-- Galaxity-Hub Premium Script v5.0
-- Created by Colin

local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local CoreGui = game:GetService("CoreGui")
local Lighting = game:GetService("Lighting")

-- Safe wait function
local function safeWait(time)
    if time then
        for _=1, time*20 do
            task.wait(0.05)
        end
    else
        task.wait()
    end
end

-- Improved Loading Screen with smooth appearance
local LoadingScreen = Instance.new("ScreenGui")
LoadingScreen.Name = "GalaxityLoading"
LoadingScreen.Parent = PlayerGui
LoadingScreen.DisplayOrder = 999

local LoadingBackground = Instance.new("Frame")
LoadingBackground.Size = UDim2.new(0, 400, 0, 120)
LoadingBackground.Position = UDim2.new(0.5, -200, 0.8, -60)
LoadingBackground.BackgroundColor3 = Color3.fromRGB(25, 12, 50)
LoadingBackground.BorderSizePixel = 0
LoadingBackground.BackgroundTransparency = 1 -- Start transparent
LoadingBackground.Parent = LoadingScreen

local LoadingCorner = Instance.new("UICorner")
LoadingCorner.CornerRadius = UDim.new(0, 15)
LoadingCorner.Parent = LoadingBackground

local LoadingStroke = Instance.new("UIStroke")
LoadingStroke.Color = Color3.fromRGB(120, 60, 200)
LoadingStroke.Thickness = 3
LoadingStroke.Parent = LoadingBackground

local LoadingGradient = Instance.new("UIGradient")
LoadingGradient.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(35, 18, 70)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 12, 50))
})
LoadingGradient.Rotation = 45
LoadingGradient.Parent = LoadingBackground

local LoadingLabel = Instance.new("TextLabel")
LoadingLabel.Size = UDim2.new(1, -40, 0, 30)
LoadingLabel.Position = UDim2.new(0, 20, 0, 15)
LoadingLabel.BackgroundTransparency = 1
LoadingLabel.Text = "Loading"
LoadingLabel.TextColor3 = Color3.fromRGB(220, 180, 255)
LoadingLabel.TextSize = 20
LoadingLabel.Font = Enum.Font.SourceSansBold
LoadingLabel.Parent = LoadingBackground

-- Improved dots animation (slower)
local dotsAnimation
local function startDotsAnimation()
    local dots = {"", ".", "..", "..."}
    local current = 1
    local lastUpdate = tick()
    dotsAnimation = RunService.Heartbeat:Connect(function()
        if tick() - lastUpdate > 0.5 then -- Slower animation
            current = (current % 4) + 1
            LoadingLabel.Text = "Loading" .. dots[current]
            lastUpdate = tick()
        end
    end)
end

local LoadingBarBackground = Instance.new("Frame")
LoadingBarBackground.Size = UDim2.new(1, -40, 0, 20)
LoadingBarBackground.Position = UDim2.new(0, 20, 0, 60)
LoadingBarBackground.BackgroundColor3 = Color3.fromRGB(40, 20, 80)
LoadingBarBackground.BorderSizePixel = 0
LoadingBarBackground.Parent = LoadingBackground

local LoadingBarCorner = Instance.new("UICorner")
LoadingBarCorner.CornerRadius = UDim.new(0, 10)
LoadingBarCorner.Parent = LoadingBarBackground

local LoadingBar = Instance.new("Frame")
LoadingBar.Size = UDim2.new(0, 0, 1, 0)
LoadingBar.Position = UDim2.new(0, 0, 0, 0)
LoadingBar.BackgroundColor3 = Color3.fromRGB(120, 60, 200)
LoadingBar.BorderSizePixel = 0
LoadingBar.Parent = LoadingBarBackground

local LoadingBarInnerCorner = Instance.new("UICorner")
LoadingBarInnerCorner.CornerRadius = UDim.new(0, 10)
LoadingBarInnerCorner.Parent = LoadingBar

local LoadingPercent = Instance.new("TextLabel")
LoadingPercent.Size = UDim2.new(1, -40, 0, 20)
LoadingPercent.Position = UDim2.new(0, 20, 0, 85)
LoadingPercent.BackgroundTransparency = 1
LoadingPercent.Text = "0%"
LoadingPercent.TextColor3 = Color3.fromRGB(220, 180, 255)
LoadingPercent.TextSize = 16
LoadingPercent.Font = Enum.Font.SourceSansBold
LoadingPercent.Parent = LoadingBackground

-- Smooth loading appearance
local function startLoadingAnimation()
    -- Fade in loading screen
    local fadeIn = TweenService:Create(LoadingBackground, TweenInfo.new(0.8), {BackgroundTransparency = 0})
    fadeIn:Play()
    
    startDotsAnimation()
    local loadProgress = 0
    local loadStartTime = tick()

    local function updateLoading()
        local elapsed = tick() - loadStartTime
        loadProgress = math.min(100, (elapsed / 2.5) * 100) -- 2.5 seconds total
        
        -- Synchronize bar and percentage
        LoadingBar.Size = UDim2.new(loadProgress / 100, 0, 1, 0)
        LoadingPercent.Text = math.floor(loadProgress) .. "%"
        
        if loadProgress >= 100 then
            if dotsAnimation then
                dotsAnimation:Disconnect()
            end
            -- Fade out loading screen
            local fadeOut = TweenService:Create(LoadingBackground, TweenInfo.new(0.5), {BackgroundTransparency = 1})
            fadeOut:Play()
            fadeOut.Completed:Wait()
            LoadingScreen:Destroy()
            loadMainGUI()
            return false
        end
        return true
    end

    -- Start loading loop
    local loadingConnection
    loadingConnection = RunService.Heartbeat:Connect(function()
        if not updateLoading() then
            loadingConnection:Disconnect()
        end
    end)
end

-- Start loading animation
startLoadingAnimation()

function loadMainGUI()
    -- Main GUI
    local ScreenGui = Instance.new("ScreenGui")
    ScreenGui.Name = "GalaxityHub"
    ScreenGui.Parent = PlayerGui
    ScreenGui.DisplayOrder = 999

    -- Mobile open/close button (outside menu)
    local MobileToggleButton = Instance.new("TextButton")
    MobileToggleButton.Size = UDim2.new(0, 70, 0, 70)
    MobileToggleButton.Position = UDim2.new(0, 20, 0.5, -35)
    MobileToggleButton.BackgroundColor3 = Color3.fromRGB(80, 40, 150)
    MobileToggleButton.BorderSizePixel = 0
    MobileToggleButton.Text = "GXH"
    MobileToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
    MobileToggleButton.TextSize = 18
    MobileToggleButton.Font = Enum.Font.SourceSansBold
    MobileToggleButton.Visible = false
    MobileToggleButton.Parent = ScreenGui

    local MobileToggleCorner = Instance.new("UICorner")
    MobileToggleCorner.CornerRadius = UDim.new(0, 15)
    MobileToggleCorner.Parent = MobileToggleButton

    local MobileToggleStroke = Instance.new("UIStroke")
    MobileToggleStroke.Color = Color3.fromRGB(120, 60, 200)
    MobileToggleStroke.Thickness = 3
    MobileToggleStroke.Parent = MobileToggleButton

    -- Check if mobile
    if UserInputService.TouchEnabled then
        MobileToggleButton.Visible = true
    end

    -- Main Frame (start transparent for smooth appearance)
    local MainFrame = Instance.new("Frame")
    MainFrame.Size = UDim2.new(0, 500, 0, 450)
    MainFrame.Position = UDim2.new(0.5, -250, 0.5, -225)
    MainFrame.BackgroundColor3 = Color3.fromRGB(25, 12, 50)
    MainFrame.BorderSizePixel = 0
    MainFrame.ClipsDescendants = true
    MainFrame.BackgroundTransparency = 1 -- Start transparent
    MainFrame.Parent = ScreenGui

    -- Make frame draggable and resizable
    local dragging = false
    local dragInput
    local dragStart
    local startPos

    local resizing = false
    local resizeStart
    local startSize

    local function update(input)
        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

    local function updateResize(input)
        local delta = input.Position - resizeStart
        local newSize = UDim2.new(0, math.max(400, startSize.X.Offset + delta.X), 0, math.max(300, startSize.Y.Offset + delta.Y))
        MainFrame.Size = newSize
    end

    MainFrame.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then
            if input.Position.X > MainFrame.AbsolutePosition.X + MainFrame.AbsoluteSize.X - 20 and
               input.Position.Y > MainFrame.AbsolutePosition.Y + MainFrame.AbsoluteSize.Y - 20 then
                -- Start resizing from bottom-right corner
                resizing = true
                resizeStart = input.Position
                startSize = MainFrame.Size
                input.Changed:Connect(function()
                    if input.UserInputState == Enum.UserInputState.End then
                        resizing = false
                    end
                end)
            else
                -- Start dragging
                dragging = true
                dragStart = input.Position
                startPos = MainFrame.Position
                
                input.Changed:Connect(function()
                    if input.UserInputState == Enum.UserInputState.End then
                        dragging = false
                    end
                end)
            end
        end
    end)

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

    UserInputService.InputChanged:Connect(function(input)
        if input == dragInput and dragging then
            update(input)
        elseif input == dragInput and resizing then
            updateResize(input)
        end
    end)

    -- Visual elements
    local UICorner = Instance.new("UICorner")
    UICorner.CornerRadius = UDim.new(0, 15)
    UICorner.Parent = MainFrame

    local UIStroke = Instance.new("UIStroke")
    UIStroke.Color = Color3.fromRGB(120, 60, 200)
    UIStroke.Thickness = 3
    UIStroke.Parent = MainFrame

    local Gradient = Instance.new("UIGradient")
    Gradient.Color = ColorSequence.new({
        ColorSequenceKeypoint.new(0, Color3.fromRGB(35, 18, 70)),
        ColorSequenceKeypoint.new(1, Color3.fromRGB(25, 12, 50))
    })
    Gradient.Rotation = 45
    Gradient.Parent = MainFrame

    -- Title Bar
    local TitleBar = Instance.new("Frame")
    TitleBar.Size = UDim2.new(1, 0, 0, 45)
    TitleBar.Position = UDim2.new(0, 0, 0, 0)
    TitleBar.BackgroundColor3 = Color3.fromRGB(50, 25, 100)
    TitleBar.BorderSizePixel = 0
    TitleBar.Parent = MainFrame

    local TitleBarCorner = Instance.new("UICorner")
    TitleBarCorner.CornerRadius = UDim.new(0, 15)
    TitleBarCorner.Parent = TitleBar

    local TitleLabel = Instance.new("TextLabel")
    TitleLabel.Size = UDim2.new(1, -100, 1, 0)
    TitleLabel.Position = UDim2.new(0, 20, 0, 0)
    TitleLabel.BackgroundTransparency = 1
    TitleLabel.Text = "Galaxity-Hub v5.0"
    TitleLabel.TextColor3 = Color3.fromRGB(220, 180, 255)
    TitleLabel.TextSize = 22
    TitleLabel.Font = Enum.Font.SourceSansBold
    TitleLabel.TextXAlignment = Enum.TextXAlignment.Left
    TitleLabel.Parent = TitleBar

    -- Tabs Frame
    local TabsFrame = Instance.new("Frame")
    TabsFrame.Size = UDim2.new(1, -20, 0, 40)
    TabsFrame.Position = UDim2.new(0, 10, 0, 50)
    TabsFrame.BackgroundColor3 = Color3.fromRGB(40, 20, 80)
    TabsFrame.BorderSizePixel = 0
    TabsFrame.Parent = MainFrame

    local TabsCorner = Instance.new("UICorner")
    TabsCorner.CornerRadius = UDim.new(0, 10)
    TabsCorner.Parent = TabsFrame

    -- Content Frame
    local ContentFrame = Instance.new("Frame")
    ContentFrame.Size = UDim2.new(1, -20, 1, -100)
    ContentFrame.Position = UDim2.new(0, 10, 0, 95)
    ContentFrame.BackgroundColor3 = Color3.fromRGB(35, 18, 70)
    ContentFrame.BorderSizePixel = 0
    ContentFrame.Parent = MainFrame

    local ContentCorner = Instance.new("UICorner")
    ContentCorner.CornerRadius = UDim.new(0, 10)
    ContentCorner.Parent = ContentFrame

    -- Tabs
    local Tabs = {"Player", "Visual", "Info"}
    local TabButtons = {}
    local CurrentTab = "Player"

    -- UI Creation Functions
    local function createButton(parent, text, position, size)
        local button = Instance.new("TextButton")
        button.Size = size or UDim2.new(0, 120, 0, 35)
        button.Position = position
        button.BackgroundColor3 = Color3.fromRGB(80, 40, 150)
        button.BorderSizePixel = 0
        button.Text = text
        button.TextColor3 = Color3.fromRGB(255, 255, 255)
        button.TextSize = 14
        button.Font = Enum.Font.SourceSansBold
        button.Parent = parent
        
        local corner = Instance.new("UICorner")
        corner.CornerRadius = UDim.new(0, 8)
        corner.Parent = button
        
        local stroke = Instance.new("UIStroke")
        stroke.Color = Color3.fromRGB(120, 60, 200)
        stroke.Thickness = 1
        stroke.Parent = button
        
        return button
    end

    local function createToggle(parent, text, position, callback)
        local toggleFrame = Instance.new("Frame")
        toggleFrame.Size = UDim2.new(1, -20, 0, 30)
        toggleFrame.Position = position
        toggleFrame.BackgroundTransparency = 1
        toggleFrame.Parent = parent
        
        local toggleLabel = Instance.new("TextLabel")
        toggleLabel.Size = UDim2.new(0.7, 0, 1, 0)
        toggleLabel.Position = UDim2.new(0, 0, 0, 0)
        toggleLabel.BackgroundTransparency = 1
        toggleLabel.Text = text
        toggleLabel.TextColor3 = Color3.fromRGB(220, 180, 255)
        toggleLabel.TextSize = 14
        toggleLabel.TextXAlignment = Enum.TextXAlignment.Left
        toggleLabel.Font = Enum.Font.SourceSans
        toggleLabel.Parent = toggleFrame
        
        local toggleButton = Instance.new("TextButton")
        toggleButton.Size = UDim2.new(0, 50, 0, 25)
        toggleButton.Position = UDim2.new(1, -50, 0.5, -12.5)
        toggleButton.BackgroundColor3 = Color3.fromRGB(60, 30, 100)
        toggleButton.BorderSizePixel = 0
        toggleButton.Text = ""
        toggleButton.Parent = toggleFrame
        
        local toggleCorner = Instance.new("UICorner")
        toggleCorner.CornerRadius = UDim.new(0, 12)
        toggleCorner.Parent = toggleButton
        
        local toggleDot = Instance.new("Frame")
        toggleDot.Size = UDim2.new(0, 21, 0, 21)
        toggleDot.Position = UDim2.new(0, 2, 0.5, -10.5)
        toggleDot.BackgroundColor3 = Color3.fromRGB(120, 60, 200)
        toggleDot.BorderSizePixel = 0
        toggleDot.Parent = toggleButton
        
        local dotCorner = Instance.new("UICorner")
        dotCorner.CornerRadius = UDim.new(0, 10)
        dotCorner.Parent = toggleDot
        
        local isToggled = false
        
        local function updateToggle()
            if isToggled then
                local tween = TweenService:Create(toggleDot, TweenInfo.new(0.2), {Position = UDim2.new(1, -23, 0.5, -10.5)})
                tween:Play()
                toggleButton.BackgroundColor3 = Color3.fromRGB(80, 40, 150)
            else
                local tween = TweenService:Create(toggleDot, TweenInfo.new(0.2), {Position = UDim2.new(0, 2, 0.5, -10.5)})
                tween:Play()
                toggleButton.BackgroundColor3 = Color3.fromRGB(60, 30, 100)
            end
            if callback then
                callback(isToggled)
            end
        end
        
        toggleButton.MouseButton1Click:Connect(function()
            isToggled = not isToggled
            updateToggle()
        end)
        
        return {
            Set = function(value)
                isToggled = value
                updateToggle()
            end,
            Get = function()
                return isToggled
            end
        }
    end

    local function createSlider(parent, text, position, min, max, default, callback)
        local sliderFrame = Instance.new("Frame")
        sliderFrame.Size = UDim2.new(1, -20, 0, 60)
        sliderFrame.Position = position
        sliderFrame.BackgroundTransparency = 1
        sliderFrame.Parent = parent
        
        local sliderLabel = Instance.new("TextLabel")
        sliderLabel.Size = UDim2.new(1, 0, 0, 20)
        sliderLabel.Position = UDim2.new(0, 0, 0, 0)
        sliderLabel.BackgroundTransparency = 1
        sliderLabel.Text = text .. ": " .. tostring(default)
        sliderLabel.TextColor3 = Color3.fromRGB(220, 180, 255)
        sliderLabel.TextSize = 14
        sliderLabel.TextXAlignment = Enum.TextXAlignment.Left
        sliderLabel.Font = Enum.Font.SourceSans
        sliderLabel.Name = text .. "Label"
        sliderLabel.Parent = sliderFrame
        
        local sliderBackground = Instance.new("Frame")
        sliderBackground.Size = UDim2.new(1, 0, 0, 20)
        sliderBackground.Position = UDim2.new(0, 0, 0, 30)
        sliderBackground.BackgroundColor3 = Color3.fromRGB(50, 25, 90)
        sliderBackground.BorderSizePixel = 0
        sliderBackground.Parent = sliderFrame
        
        local backgroundCorner = Instance.new("UICorner")
        backgroundCorner.CornerRadius = UDim.new(0, 10)
        backgroundCorner.Parent = sliderBackground
        
        local sliderFill = Instance.new("Frame")
        sliderFill.Size = UDim2.new((default - min) / (max - min), 0, 1, 0)
        sliderFill.Position = UDim2.new(0, 0, 0, 0)
        sliderFill.BackgroundColor3 = Color3.fromRGB(120, 60, 200)
        sliderFill.BorderSizePixel = 0
        sliderFill.Parent = sliderBackground
        
        local fillCorner = Instance.new("UICorner")
        fillCorner.CornerRadius = UDim.new(0, 10)
        fillCorner.Parent = sliderFill
        
        local sliderButton = Instance.new("TextButton")
        sliderButton.Size = UDim2.new(1, 0, 1, 0)
        sliderButton.Position = UDim2.new(0, 0, 0, 0)
        sliderButton.BackgroundTransparency = 1
        sliderButton.Text = ""
        sliderButton.Parent = sliderBackground
        
        local isSliding = false
        
        local function updateValue(value)
            value = math.clamp(value, min, max)
            local tweenInfo = TweenInfo.new(0.1)
            local tween = TweenService:Create(sliderFill, tweenInfo, {Size = UDim2.new((value - min) / (max - min), 0, 1, 0)})
            tween:Play()
            sliderLabel.Text = text .. ": " .. tostring(math.floor(value))
            if callback then
                callback(value)
            end
        end
        
        sliderButton.MouseButton1Down:Connect(function()
            isSliding = true
        end)
        
        UserInputService.InputEnded:Connect(function(input)
            if input.UserInputType == Enum.UserInputType.MouseButton1 then
                isSliding = false
            end
        end)
        
        game:GetService("UserInputService").InputChanged:Connect(function(input)
            if isSliding and input.UserInputType == Enum.UserInputType.MouseMovement then
                local mousePos = UserInputService:GetMouseLocation()
                local sliderPos = sliderBackground.AbsolutePosition
                local sliderSize = sliderBackground.AbsoluteSize
                local x = math.clamp(mousePos.X - sliderPos.X, 0, sliderSize.X)
                local value = min + (x / sliderSize.X) * (max - min)
                updateValue(value)
            end
        end)
        
        updateValue(default)
        
        return {
            Set = updateValue,
            Get = function()
                return tonumber(string.match(sliderLabel.Text, "%d+"))
            end
        }
    end

    -- Tab Management
    local function showTab(tabName)
        CurrentTab = tabName
        for _, child in ipairs(ContentFrame:GetChildren()) do
            if child:IsA("Frame") then
                child.Visible = false
            end
        end
        local tabContent = ContentFrame:FindFirstChild(tabName)
        if tabContent then
            tabContent.Visible = true
        end
        
        for _, button in pairs(TabButtons) do
            if button.Name == tabName then
                button.BackgroundColor3 = Color3.fromRGB(100, 50, 180)
            else
                button.BackgroundColor3 = Color3.fromRGB(60, 30, 110)
            end
        end
    end

    -- Create tabs
    for i, tabName in ipairs(Tabs) do
        local TabButton = Instance.new("TextButton")
        TabButton.Size = UDim2.new(0.33, -5, 1, 0)
        TabButton.Position = UDim2.new(0.33 * (i - 1), 0, 0, 0)
        TabButton.BackgroundColor3 = Color3.fromRGB(60, 30, 110)
        TabButton.BorderSizePixel = 0
        TabButton.Text = tabName
        TabButton.TextColor3 = Color3.fromRGB(220, 180, 255)
        TabButton.TextSize = 14
        TabButton.Font = Enum.Font.SourceSansBold
        TabButton.Name = tabName
        TabButton.Parent = TabsFrame
        
        local TabCorner = Instance.new("UICorner")
        TabCorner.CornerRadius = UDim.new(0, 8)
        TabCorner.Parent = TabButton
        
        TabButton.MouseButton1Click:Connect(function()
            showTab(tabName)
        end)
        
        TabButtons[tabName] = TabButton
    end

    -- Player Tab
    local PlayerTab = Instance.new("Frame")
    PlayerTab.Size = UDim2.new(1, 0, 1, 0)
    PlayerTab.Position = UDim2.new(0, 0, 0, 0)
    PlayerTab.BackgroundTransparency = 1
    PlayerTab.Visible = true
    PlayerTab.Name = "Player"
    PlayerTab.Parent = ContentFrame

    local PlayerScroll = Instance.new("ScrollingFrame")
    PlayerScroll.Size = UDim2.new(1, 0, 1, 0)
    PlayerScroll.Position = UDim2.new(0, 0, 0, 0)
    PlayerScroll.BackgroundTransparency = 1
    PlayerScroll.BorderSizePixel = 0
    PlayerScroll.ScrollBarThickness = 6
    PlayerScroll.ScrollBarImageColor3 = Color3.fromRGB(120, 60, 200)
    PlayerScroll.Parent = PlayerTab

    local PlayerLayout = Instance.new("UIListLayout")
    PlayerLayout.Padding = UDim.new(0, 15)
    PlayerLayout.Parent = PlayerScroll

    -- Player features
    local speedEnabled = false
    local speedToggle = createToggle(PlayerScroll, "Speed", UDim2.new(0, 0, 0, 10), function(enabled)
        speedEnabled = enabled
        if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
            LocalPlayer.Character.Humanoid.WalkSpeed = enabled and speedSlider.Get() or 16
        end
    end)

    local speedSlider = createSlider(PlayerScroll, "Speed Value", UDim2.new(0, 0, 0, 50), 16, 100, 16, function(value)
        if speedEnabled and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
            LocalPlayer.Character.Humanoid.WalkSpeed = value
        end
    end)

    local jumpEnabled = false
    local jumpToggle = createToggle(PlayerScroll, "Jump Height", UDim2.new(0, 0, 0, 130), function(enabled)
        jumpEnabled = enabled
        if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
            LocalPlayer.Character.Humanoid.JumpPower = enabled and jumpSlider.Get() or 50
        end
    end)

    local jumpSlider = createSlider(PlayerScroll, "Jump Value", UDim2.new(0, 0, 0, 170), 50, 200, 50, function(value)
        if jumpEnabled and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
            LocalPlayer.Character.Humanoid.JumpPower = value
        end
    end)

    -- Fixed Tp-Walk with proper anti-cheat bypass
    local tpWalkEnabled = false
    local tpWalkConnection
    local lastTpTime = 0
    local tpWalkToggle = createToggle(PlayerScroll, "TpWalk", UDim2.new(0, 0, 0, 250), function(enabled)
        tpWalkEnabled = enabled
        if enabled then
            tpWalkConnection = RunService.Heartbeat:Connect(function()
                local currentTime = tick()
                if currentTime - lastTpTime < 0.05 then return end -- Limit to 20 teleports per second
                
                if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and LocalPlayer.Character:FindFirstChild("Humanoid") then
                    local humanoid = LocalPlayer.Character.Humanoid
                    local rootPart = LocalPlayer.Character.HumanoidRootPart
                    
                    -- Check if player is moving and on ground
                    if humanoid.MoveDirection.Magnitude > 0 and humanoid.FloorMaterial ~= Enum.Material.Air then
                        local moveDirection = humanoid.MoveDirection
                        local speed = tpWalkSlider.Get()
                        
                        -- Calculate small teleport distance (bypasses anti-cheat)
                        local teleportDistance = speed * 0.02 -- Very small distance per teleport
                        
                        -- Teleport player in small increments
                        local newPosition = rootPart.Position + (moveDirection * teleportDistance)
                        rootPart.CFrame = CFrame.new(newPosition)
                        
                        lastTpTime = currentTime
                    end
                end
            end)
        else
            if tpWalkConnection then
                tpWalkConnection:Disconnect()
                tpWalkConnection = nil
            end
        end
    end)

    local tpWalkSlider = createSlider(PlayerScroll, "TpWalk Speed", UDim2.new(0, 0, 0, 290), 10, 200, 50, function(value)
        -- Used in tpWalk connection
    end)

    -- Noclip moved to Player tab
    local noclipEnabled = false
    local noclipToggle = createToggle(PlayerScroll, "Noclip", UDim2.new(0, 0, 0, 370), function(enabled)
        noclipEnabled = enabled
    end)

    -- Noclip functionality
    RunService.Stepped:Connect(function()
        if noclipEnabled and LocalPlayer.Character then
            for _, part in pairs(LocalPlayer.Character:GetDescendants()) do
                if part:IsA("BasePart") then
                    part.CanCollide = false
                end
            end
        end
    end)

    -- Visual Tab
    local VisualTab = Instance.new("Frame")
    VisualTab.Size = UDim2.new(1, 0, 1, 0)
    VisualTab.Position = UDim2.new(0, 0, 0, 0)
    VisualTab.BackgroundTransparency = 1
    VisualTab.Visible = false
    VisualTab.Name = "Visual"
    VisualTab.Parent = ContentFrame

    local VisualScroll = Instance.new("ScrollingFrame")
    VisualScroll.Size = UDim2.new(1, 0, 1, 0)
    VisualScroll.Position = UDim2.new(0, 0, 0, 0)
    VisualScroll.BackgroundTransparency = 1
    VisualScroll.BorderSizePixel = 0
    VisualScroll.ScrollBarThickness = 6
    VisualScroll.ScrollBarImageColor3 = Color3.fromRGB(120, 60, 200)
    VisualScroll.Parent = VisualTab

    local VisualLayout = Instance.new("UIListLayout")
    VisualLayout.Padding = UDim.new(0, 15)
    VisualLayout.Parent = VisualScroll

    -- Fixed ESP System with purple colors
    local espFunctions = {
        ESP = {active = false, data = {}}
    }

    -- Enhanced ESP with purple colors and reliable toggling
    local function updateESP()
        -- Cleanup first
        for _, data in pairs(espFunctions.ESP.data) do
            if data.highlight then 
                pcall(function() 
                    data.highlight:Destroy() 
                end) 
            end
            if data.tag then 
                pcall(function() 
                    data.tag:Destroy() 
                end) 
            end
            if data.connection then 
                pcall(function() 
                    data.connection:Disconnect() 
                end) 
            end
            if data.colorAnim then 
                pcall(function() 
                    data.colorAnim:Disconnect() 
                end) 
            end
        end
        espFunctions.ESP.data = {}

        if not espFunctions.ESP.active then return end

        for _, player in pairs(Players:GetPlayers()) do
            if player ~= LocalPlayer then
                coroutine.wrap(function()
                    local character = player.Character
                    if not character then
                        player.CharacterAdded:Wait()
                        character = player.Character
                        safeWait(1)
                    end
                    
                    local humanoid = character:FindFirstChildOfClass("Humanoid")
                    if not humanoid then return end
                    
                    local highlight = Instance.new("Highlight")
                    highlight.Parent = character
                    highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
                    highlight.FillTransparency = 0.4
                    highlight.OutlineTransparency = 0.1
                    
                    -- Purple colors for ESP
                    highlight.FillColor = Color3.fromRGB(120, 60, 200)  -- Main purple
                    highlight.OutlineColor = Color3.fromRGB(60, 30, 100) -- Dark purple outline

                    -- Tag setup with darker colors
                    local tag = Instance.new("BillboardGui")
                    tag.Parent = character:FindFirstChild("Head") or character:WaitForChild("Head", 2)
                    if not tag.Parent then return end
                    
                    tag.Size = UDim2.new(4, 0, 1.5, 0)
                    tag.StudsOffset = Vector3.new(0, 3.5, 0)
                    tag.AlwaysOnTop = true
                    tag.Enabled = true
                    
                    local label = Instance.new("TextLabel")
                    label.Parent = tag
                    label.Size = UDim2.new(1, 0, 1, 0)
                    label.Text = player.DisplayName.." | "..player.Name.." | 0m"
                    label.TextColor3 = Color3.fromRGB(180, 140, 220) -- Darker purple for text
                    label.BackgroundTransparency = 1
                    label.Font = Enum.Font.SourceSansBold
                    label.TextSize = 14
                    label.TextStrokeColor3 = Color3.fromRGB(40, 20, 80) -- Very dark purple stroke
                    label.TextStrokeTransparency = 0.3
                    
                    local connection = RunService.Heartbeat:Connect(function()
                        if not character or not character.Parent then
                            connection:Disconnect()
                            return
                        end
                        
                        if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and character:FindFirstChild("HumanoidRootPart") then
                            local distance = math.floor((LocalPlayer.Character.HumanoidRootPart.Position - character.HumanoidRootPart.Position).Magnitude)
                            label.Text = player.DisplayName.." | "..player.Name.." | "..distance.."m"
                        end
                    end)
                    
                    espFunctions.ESP.data[player] = {
                        highlight = highlight,
                        tag = tag,
                        connection = connection
                    }
                end)()
            end
        end
    end

    -- ESP Toggle with reliable cleanup
    local espToggle = createToggle(VisualScroll, "ESP", UDim2.new(0, 0, 0, 10), function(enabled)
        espFunctions.ESP.active = enabled
        if not enabled then
            -- Immediate cleanup when turning off
            for _, data in pairs(espFunctions.ESP.data) do
                if data.highlight then 
                    pcall(function() 
                        data.highlight:Destroy() 
                    end) 
                end
                if data.tag then 
                    pcall(function() 
                        data.tag:Destroy() 
                    end) 
                end
                if data.connection then 
                    pcall(function() 
                        data.connection:Disconnect() 
                    end) 
                end
            end
            espFunctions.ESP.data = {}
        else
            updateESP()
        end
    end)

    -- Sky Changer
    local skyChangerEnabled = false
    local originalSky
    local skyChangerToggle = createToggle(VisualScroll, "Sky Changer", UDim2.new(0, 0, 0, 60), function(enabled)
        skyChangerEnabled = enabled
        if enabled then
            -- Save original sky
            originalSky = Lighting:FindFirstChildOfClass("Sky")
            
            -- Create beautiful purple sky
            local newSky = Instance.new("Sky")
            newSky.SkyboxBk = "http://www.roblox.com/asset/?id=271042516" -- Purple gradient
            newSky.SkyboxDn = "http://www.roblox.com/asset/?id=271042556"
            newSky.SkyboxFt = "http://www.roblox.com/asset/?id=271042516"
            newSky.SkyboxLf = "http://www.roblox.com/asset/?id=271042556"
            newSky.SkyboxRt = "http://www.roblox.com/asset/?id=271042516"
            newSky.SkyboxUp = "http://www.roblox.com/asset/?id=271042579"
            newSky.Name = "GalaxitySky"
            newSky.Parent = Lighting
            
            -- Add stars
            Lighting.StarCount = 5000
            
            -- Animate sky colors
            local pulseValue = 0
            local skyAnimation = RunService.Heartbeat:Connect(function()
                if not skyChangerEnabled then
                    skyAnimation:Disconnect()
                    return
                end
                
                pulseValue = (pulseValue + 0.01) % 1
                local colorValue = 0.7 + (math.sin(pulseValue * math.pi) * 0.3)
                
                Lighting.Ambient = Color3.fromRGB(80 * colorValue, 40 * colorValue, 160 * colorValue)
                Lighting.OutdoorAmbient = Color3.fromRGB(60 * colorValue, 30 * colorValue, 120 * colorValue)
            end)
        else
            -- Restore original sky
            if originalSky then
                local currentSky = Lighting:FindFirstChild("GalaxitySky")
                if currentSky then
                    currentSky:Destroy()
                end
                Lighting.StarCount = 3000
                Lighting.Ambient = Color3.fromRGB(127, 127, 127)
                Lighting.OutdoorAmbient = Color3.fromRGB(127, 127, 127)
            end
        end
    end)

    -- Redux (Graphics Enhancer)
    local reduxEnabled = false
    local reduxToggle = createToggle(VisualScroll, "Redux Graphics", UDim2.new(0, 0, 0, 110), function(enabled)
        reduxEnabled = enabled
        if enabled then
            -- Enhance graphics with purple theme
            Lighting.Brightness = 2
            Lighting.GlobalShadows = true
            Lighting.FogColor = Color3.fromRGB(40, 20, 80)
            Lighting.FogEnd = 1000
            Lighting.ColorShift_Bottom = Color3.fromRGB(60, 30, 100)
            Lighting.ColorShift_Top = Color3.fromRGB(120, 60, 200)
            
            -- Add bloom effect
            local bloom = Instance.new("BloomEffect")
            bloom.Intensity = 0.4
            bloom.Size = 24
            bloom.Threshold = 0.9
            bloom.Name = "GalaxityBloom"
            bloom.Parent = Lighting
            
            -- Add color correction
            local colorCorrection = Instance.new("ColorCorrectionEffect")
            colorCorrection.Brightness = 0.1
            colorCorrection.Contrast = 0.2
            colorCorrection.Saturation = 0.3
            colorCorrection.TintColor = Color3.fromRGB(255, 240, 255)
            colorCorrection.Name = "GalaxityColorCorrection"
            colorCorrection.Parent = Lighting
        else
            -- Restore original graphics
            Lighting.Brightness = 1
            Lighting.GlobalShadows = false
            Lighting.FogColor = Color3.fromRGB(191, 191, 191)
            Lighting.FogEnd = 100000
            Lighting.ColorShift_Bottom = Color3.fromRGB(0, 0, 0)
            Lighting.ColorShift_Top = Color3.fromRGB(0, 0, 0)
            
            local bloom = Lighting:FindFirstChild("GalaxityBloom")
            if bloom then bloom:Destroy() end
            
            local colorCorrection = Lighting:FindFirstChild("GalaxityColorCorrection")
            if colorCorrection then colorCorrection:Destroy() end
        end
    end)

    -- Info Tab
    local InfoTab = Instance.new("Frame")
    InfoTab.Size = UDim2.new(1, 0, 1, 0)
    InfoTab.Position = UDim2.new(0, 0, 0, 0)
    InfoTab.BackgroundTransparency = 1
    InfoTab.Visible = false
    InfoTab.Name = "Info"
    InfoTab.Parent = ContentFrame

    local InfoText = Instance.new("TextLabel")
    InfoText.Size = UDim2.new(1, -20, 0, 150)
    InfoText.Position = UDim2.new(0, 10, 0, 20)
    InfoText.BackgroundTransparency = 1
    InfoText.Text = "Galaxity-Hub Premium v5.0\n\n• Исправленный Tp-Walk (обход анти-чита)\n• Надежная система ESP в фиолетовых тонах\n• Красивый Sky Changer с анимацией\n• Улучшенная графика Redux\n• Плавные анимации загрузки\n\nСкрипт будет дорабатываться!"
    InfoText.TextColor3 = Color3.fromRGB(220, 180, 255)
    InfoText.TextSize = 16
    InfoText.TextWrapped = true
    InfoText.Font = Enum.Font.SourceSans
    InfoText.Parent = InfoTab

    local ExitButton = createButton(InfoTab, "Exit Script", UDim2.new(0.5, -80, 0, 190), UDim2.new(0, 160, 0, 40))

    -- Menu open/close functionality
    local menuOpen = true

    local function toggleMenu()
        menuOpen = not menuOpen
        if menuOpen then
            local tween = TweenService:Create(MainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {Size = UDim2.new(0, 500, 0, 450)})
            tween:Play()
        else
            local tween = TweenService:Create(MainFrame, TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.In), {Size = UDim2.new(0, 0, 0, 0)})
            tween:Play()
        end
    end

    -- Input bindings
    UserInputService.InputBegan:Connect(function(input, gameProcessed)
        if not gameProcessed then
            if input.KeyCode == Enum.KeyCode.Insert then
                toggleMenu()
            end
        end
    end)

    MobileToggleButton.MouseButton1Click:Connect(toggleMenu)

    ExitButton.MouseButton1Click:Connect(function()
        -- Clean up everything
        if tpWalkConnection then
            tpWalkConnection:Disconnect()
        end
        
        -- Clean up ESP
        for _, data in pairs(espFunctions.ESP.data) do
            if data.highlight then pcall(function() data.highlight:Destroy() end) end
            if data.tag then pcall(function() data.tag:Destroy() end) end
            if data.connection then pcall(function() data.connection:Disconnect() end) end
        end
        
        -- Clean up visual effects
        if skyChangerEnabled then
            local currentSky = Lighting:FindFirstChild("GalaxitySky")
            if currentSky then currentSky:Destroy() end
            Lighting.StarCount = 3000
            Lighting.Ambient = Color3.fromRGB(127, 127, 127)
            Lighting.OutdoorAmbient = Color3.fromRGB(127, 127, 127)
        end
        
        if reduxEnabled then
            Lighting.Brightness = 1
            Lighting.GlobalShadows = false
            Lighting.FogColor = Color3.fromRGB(191, 191, 191)
            Lighting.FogEnd = 100000
            Lighting.ColorShift_Bottom = Color3.fromRGB(0, 0, 0)
            Lighting.ColorShift_Top = Color3.fromRGB(0, 0, 0)
            
            local bloom = Lighting:FindFirstChild("GalaxityBloom")
            if bloom then bloom:Destroy() end
            
            local colorCorrection = Lighting:FindFirstChild("GalaxityColorCorrection")
            if colorCorrection then colorCorrection:Destroy() end
        end
        
        -- Reset player values
        if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Humanoid") then
            LocalPlayer.Character.Humanoid.WalkSpeed = 16
            LocalPlayer.Character.Humanoid.JumpPower = 50
        end
        
        ScreenGui:Destroy()
    end)

    -- Update scroll sizes
    PlayerLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
        PlayerScroll.CanvasSize = UDim2.new(0, 0, 0, PlayerLayout.AbsoluteContentSize.Y + 20)
    end)

    VisualLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
        VisualScroll.CanvasSize = UDim2.new(0, 0, 0, VisualLayout.AbsoluteContentSize.Y + 20)
    end)

    -- Character added event
    LocalPlayer.CharacterAdded:Connect(function(character)
        wait(1)
        if speedEnabled then
            character:WaitForChild("Humanoid").WalkSpeed = speedSlider.Get()
        end
        if jumpEnabled then
            character:WaitForChild("Humanoid").JumpPower = jumpSlider.Get()
        end
    end)

    -- Player handlers for ESP
    Players.PlayerAdded:Connect(function(player)
        player.CharacterAdded:Connect(function()
            safeWait(0.5)
            if espFunctions.ESP.active then updateESP() end
        end)
    end)

    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer then
            player.CharacterAdded:Connect(function()
                safeWait(0.5)
                if espFunctions.ESP.active then updateESP() end
            end)
        end
    end

    -- Smooth menu appearance
    local menuAppear = TweenService:Create(MainFrame, TweenInfo.new(0.8), {BackgroundTransparency = 0})
    menuAppear:Play()

    showTab("Player")
end