Space Toolbox(Automation Suite)
Key Required

Space Toolbox(Automation Suite)

[🌌] Space IncrementalAdministratorsAdministrators 7.2K views 132 executesUpdated Nov 8, 2025
5.0/ 5(3 votes)
30100% Positive
Lua Script•1352 lines (49627 chars)
local player = game.Players.LocalPlayer
local screenGui = Instance.new('ScreenGui', player:WaitForChild('PlayerGui'))

-- Get the upgrade remotes
local UpgradeEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('Upgrade')
local GemUpgradeEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('GemUpgrade')
local PerkEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('Perk')
local MachinePowerEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('MachinePower')
local RollRuneEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('RollRune')
local CreateRuneEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('CreateRune')
local MineEvent = game:GetService('ReplicatedStorage'):WaitForChild('Events'):WaitForChild('Mine')

-- ---------- Main Frame ----------
local mainFrame = Instance.new('Frame', screenGui)
mainFrame.Size = UDim2.new(0, 300, 0, 670)
mainFrame.Position = UDim2.new(0.5, -150, 0.1, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.Visible = false

local corner = Instance.new('UICorner', mainFrame)
corner.CornerRadius = UDim.new(0, 12)

local grad = Instance.new('UIGradient', mainFrame)
grad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 50, 120)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(50, 30, 80)),
})
grad.Rotation = 90

-- Title
local title = Instance.new('TextLabel', mainFrame)
title.Size = UDim2.new(1, -60, 0, 35)
title.Position = UDim2.new(0, 0, 0, 5)
title.Text = '[🌌] Space Toolbox'
title.Font = Enum.Font.Cartoon
title.TextSize = 22
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.BackgroundTransparency = 1

-- Minimize Button
local minimizeBtn = Instance.new('TextButton', mainFrame)
minimizeBtn.Size = UDim2.new(0, 25, 0, 25)
minimizeBtn.Position = UDim2.new(0, 5, 0, 10)
minimizeBtn.Text = '_'
minimizeBtn.Font = Enum.Font.Cartoon
minimizeBtn.TextSize = 24
minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 0)

local minCorner = Instance.new('UICorner', minimizeBtn)
minCorner.CornerRadius = UDim.new(0, 6)

-- Close Button
local closeBtn = Instance.new('TextButton', mainFrame)
closeBtn.Size = UDim2.new(0, 25, 0, 25)
closeBtn.Position = UDim2.new(1, -30, 0, 10)
closeBtn.Text = 'X'
closeBtn.Font = Enum.Font.Cartoon
closeBtn.TextSize = 18
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)

local closeCorner = Instance.new('UICorner', closeBtn)
closeCorner.CornerRadius = UDim.new(0, 6)

-- Upgrade Status Label (Essence)
local upgradeStatusLabel = Instance.new('TextLabel', mainFrame)
upgradeStatusLabel.Size = UDim2.new(1, -20, 0, 18)
upgradeStatusLabel.Position = UDim2.new(0, 10, 0, 45)
upgradeStatusLabel.Text = 'Essence Status: OFF'
upgradeStatusLabel.Font = Enum.Font.Code
upgradeStatusLabel.TextSize = 14
upgradeStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
upgradeStatusLabel.BackgroundTransparency = 1
upgradeStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Essence Upgrades Button
local upgradesBtn = Instance.new('TextButton', mainFrame)
upgradesBtn.Size = UDim2.new(0, 270, 0, 35)
upgradesBtn.Position = UDim2.new(0.5, -135, 0, 68)
upgradesBtn.Text = 'START ESSENCE UPGRADES'
upgradesBtn.Font = Enum.Font.Cartoon
upgradesBtn.TextSize = 18
upgradesBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
upgradesBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 200)

local upgradesBtnCorner = Instance.new('UICorner', upgradesBtn)
upgradesBtnCorner.CornerRadius = UDim.new(0, 8)

local upgradesBtnGrad = Instance.new('UIGradient', upgradesBtn)
upgradesBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 150, 200)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 180, 240)),
})
upgradesBtnGrad.Rotation = 90

-- Diamond Upgrade Status Label
local diamondStatusLabel = Instance.new('TextLabel', mainFrame)
diamondStatusLabel.Size = UDim2.new(1, -20, 0, 18)
diamondStatusLabel.Position = UDim2.new(0, 10, 0, 110)
diamondStatusLabel.Text = 'Diamond Status: OFF'
diamondStatusLabel.Font = Enum.Font.Code
diamondStatusLabel.TextSize = 14
diamondStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
diamondStatusLabel.BackgroundTransparency = 1
diamondStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Diamond Upgrades Button
local diamondBtn = Instance.new('TextButton', mainFrame)
diamondBtn.Size = UDim2.new(0, 270, 0, 35)
diamondBtn.Position = UDim2.new(0.5, -135, 0, 133)
diamondBtn.Text = 'START DIAMOND UPGRADES'
diamondBtn.Font = Enum.Font.Cartoon
diamondBtn.TextSize = 17
diamondBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
diamondBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 200)

local diamondBtnCorner = Instance.new('UICorner', diamondBtn)
diamondBtnCorner.CornerRadius = UDim.new(0, 8)

local diamondBtnGrad = Instance.new('UIGradient', diamondBtn)
diamondBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 180, 200)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 220, 255)),
})
diamondBtnGrad.Rotation = 90

-- Perk Status Label
local perkStatusLabel = Instance.new('TextLabel', mainFrame)
perkStatusLabel.Size = UDim2.new(1, -20, 0, 18)
perkStatusLabel.Position = UDim2.new(0, 10, 0, 175)
perkStatusLabel.Text = 'Perk Status: OFF'
perkStatusLabel.Font = Enum.Font.Code
perkStatusLabel.TextSize = 14
perkStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
perkStatusLabel.BackgroundTransparency = 1
perkStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Automate Perks Button
local perkBtn = Instance.new('TextButton', mainFrame)
perkBtn.Size = UDim2.new(0, 235, 0, 35)
perkBtn.Position = UDim2.new(0, 15, 0, 198)
perkBtn.Text = 'AUTOMATE PERKS'
perkBtn.Font = Enum.Font.Cartoon
perkBtn.TextSize = 17
perkBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
perkBtn.BackgroundColor3 = Color3.fromRGB(120, 50, 150)

local perkBtnCorner = Instance.new('UICorner', perkBtn)
perkBtnCorner.CornerRadius = UDim.new(0, 8)

local perkBtnGrad = Instance.new('UIGradient', perkBtn)
perkBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 50, 150)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 100, 220)),
})
perkBtnGrad.Rotation = 90

-- Help Icon Button
local helpBtn = Instance.new('TextButton', mainFrame)
helpBtn.Size = UDim2.new(0, 30, 0, 35)
helpBtn.Position = UDim2.new(0, 255, 0, 198)
helpBtn.Text = '?'
helpBtn.Font = Enum.Font.Cartoon
helpBtn.TextSize = 24
helpBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
helpBtn.BackgroundColor3 = Color3.fromRGB(100, 50, 130)

local helpBtnCorner = Instance.new('UICorner', helpBtn)
helpBtnCorner.CornerRadius = UDim.new(0, 8)

-- Tooltip Frame (initially hidden)
local tooltipFrame = Instance.new('Frame', screenGui)
tooltipFrame.Size = UDim2.new(0, 300, 0, 60)
tooltipFrame.Position = UDim2.new(0, 0, 0, 0)
tooltipFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
tooltipFrame.BorderSizePixel = 1
tooltipFrame.BorderColor3 = Color3.fromRGB(120, 120, 120)
tooltipFrame.Visible = false
tooltipFrame.ZIndex = 100

local tooltipCorner = Instance.new('UICorner', tooltipFrame)
tooltipCorner.CornerRadius = UDim.new(0, 8)

local tooltipText = Instance.new('TextLabel', tooltipFrame)
tooltipText.Size = UDim2.new(1, -20, 1, -20)
tooltipText.Position = UDim2.new(0, 10, 0, 10)
tooltipText.Text = 'Only upgrades Essence, Faster Spawn, Double Spawn, And Essence II in that order'
tooltipText.Font = Enum.Font.Code
tooltipText.TextSize = 13
tooltipText.TextColor3 = Color3.fromRGB(255, 255, 255)
tooltipText.BackgroundTransparency = 1
tooltipText.TextWrapped = true
tooltipText.TextXAlignment = Enum.TextXAlignment.Left
tooltipText.TextYAlignment = Enum.TextYAlignment.Top
tooltipText.ZIndex = 101

-- Divider Line
local divider = Instance.new('Frame', mainFrame)
divider.Size = UDim2.new(1, -40, 0, 2)
divider.Position = UDim2.new(0, 20, 0, 243)
divider.BackgroundColor3 = Color3.fromRGB(100, 100, 150)
divider.BorderSizePixel = 0

-- Farm Status Label
local farmStatusLabel = Instance.new('TextLabel', mainFrame)
farmStatusLabel.Size = UDim2.new(1, -20, 0, 18)
farmStatusLabel.Position = UDim2.new(0, 10, 0, 253)
farmStatusLabel.Text = 'Farm Status: OFF'
farmStatusLabel.Font = Enum.Font.Code
farmStatusLabel.TextSize = 14
farmStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
farmStatusLabel.BackgroundTransparency = 1
farmStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Start Essence Farm Button
local farmBtn = Instance.new('TextButton', mainFrame)
farmBtn.Size = UDim2.new(0, 270, 0, 40)
farmBtn.Position = UDim2.new(0.5, -135, 0, 276)
farmBtn.Text = 'START ESSENCE FARM'
farmBtn.Font = Enum.Font.Cartoon
farmBtn.TextSize = 18
farmBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
farmBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 0)

local farmBtnCorner = Instance.new('UICorner', farmBtn)
farmBtnCorner.CornerRadius = UDim.new(0, 8)

local farmBtnGrad = Instance.new('UIGradient', farmBtn)
farmBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 150, 0)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 200, 0)),
})
farmBtnGrad.Rotation = 90

-- Mining Status Label
local miningStatusLabel = Instance.new('TextLabel', mainFrame)
miningStatusLabel.Size = UDim2.new(1, -20, 0, 18)
miningStatusLabel.Position = UDim2.new(0, 10, 0, 323)
miningStatusLabel.Text = 'Mining Status: OFF'
miningStatusLabel.Font = Enum.Font.Code
miningStatusLabel.TextSize = 14
miningStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
miningStatusLabel.BackgroundTransparency = 1
miningStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Start Mining Button
local miningBtn = Instance.new('TextButton', mainFrame)
miningBtn.Size = UDim2.new(0, 270, 0, 40)
miningBtn.Position = UDim2.new(0.5, -135, 0, 346)
miningBtn.Text = 'START MINING'
miningBtn.Font = Enum.Font.Cartoon
miningBtn.TextSize = 18
miningBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
miningBtn.BackgroundColor3 = Color3.fromRGB(150, 0, 0)

local miningBtnCorner = Instance.new('UICorner', miningBtn)
miningBtnCorner.CornerRadius = UDim.new(0, 8)

local miningBtnGrad = Instance.new('UIGradient', miningBtn)
miningBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(150, 0, 0)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 0, 0)),
})
miningBtnGrad.Rotation = 90

-- Volts Status Label
local voltsStatusLabel = Instance.new('TextLabel', mainFrame)
voltsStatusLabel.Size = UDim2.new(1, -20, 0, 18)
voltsStatusLabel.Position = UDim2.new(0, 10, 0, 393)
voltsStatusLabel.Text = 'Volts Status: OFF'
voltsStatusLabel.Font = Enum.Font.Code
voltsStatusLabel.TextSize = 14
voltsStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
voltsStatusLabel.BackgroundTransparency = 1
voltsStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Automate Volts Button
local voltsBtn = Instance.new('TextButton', mainFrame)
voltsBtn.Size = UDim2.new(0, 270, 0, 40)
voltsBtn.Position = UDim2.new(0.5, -135, 0, 416)
voltsBtn.Text = 'AUTOMATE VOLTS'
voltsBtn.Font = Enum.Font.Cartoon
voltsBtn.TextSize = 18
voltsBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
voltsBtn.BackgroundColor3 = Color3.fromRGB(165, 145, 110)

local voltsBtnCorner = Instance.new('UICorner', voltsBtn)
voltsBtnCorner.CornerRadius = UDim.new(0, 8)

local voltsBtnGrad = Instance.new('UIGradient', voltsBtn)
voltsBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(165, 145, 110)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(195, 175, 140)),
})
voltsBtnGrad.Rotation = 90

-- Rune Status Label
local runeStatusLabel = Instance.new('TextLabel', mainFrame)
runeStatusLabel.Size = UDim2.new(1, -20, 0, 18)
runeStatusLabel.Position = UDim2.new(0, 10, 0, 463)
runeStatusLabel.Text = 'Rune Status: OFF'
runeStatusLabel.Font = Enum.Font.Code
runeStatusLabel.TextSize = 14
runeStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
runeStatusLabel.BackgroundTransparency = 1
runeStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Open Stardust Button (Left)
local openRuneBtn = Instance.new('TextButton', mainFrame)
openRuneBtn.Size = UDim2.new(0, 130, 0, 35)
openRuneBtn.Position = UDim2.new(0, 15, 0, 486)
openRuneBtn.Text = 'OPEN STARDUST'
openRuneBtn.Font = Enum.Font.Cartoon
openRuneBtn.TextSize = 14
openRuneBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
openRuneBtn.BackgroundColor3 = Color3.fromRGB(255, 100, 200)

local openRuneBtnCorner = Instance.new('UICorner', openRuneBtn)
openRuneBtnCorner.CornerRadius = UDim.new(0, 8)

local openRuneBtnGrad = Instance.new('UIGradient', openRuneBtn)
openRuneBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 100, 200)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 150, 220)),
})
openRuneBtnGrad.Rotation = 90

-- Create Rune Button (Right)
local createRuneBtn = Instance.new('TextButton', mainFrame)
createRuneBtn.Size = UDim2.new(0, 130, 0, 35)
createRuneBtn.Position = UDim2.new(0, 155, 0, 486)
createRuneBtn.Text = 'CREATE STARDUST'
createRuneBtn.Font = Enum.Font.Cartoon
createRuneBtn.TextSize = 13
createRuneBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
createRuneBtn.BackgroundColor3 = Color3.fromRGB(255, 100, 200)

local createRuneBtnCorner = Instance.new('UICorner', createRuneBtn)
createRuneBtnCorner.CornerRadius = UDim.new(0, 8)

local createRuneBtnGrad = Instance.new('UIGradient', createRuneBtn)
createRuneBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 100, 200)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 150, 220)),
})
createRuneBtnGrad.Rotation = 90

-- Deep Rune Status Label
local deepRuneStatusLabel = Instance.new('TextLabel', mainFrame)
deepRuneStatusLabel.Size = UDim2.new(1, -20, 0, 18)
deepRuneStatusLabel.Position = UDim2.new(0, 10, 0, 528)
deepRuneStatusLabel.Text = 'Deep Rune Status: OFF'
deepRuneStatusLabel.Font = Enum.Font.Code
deepRuneStatusLabel.TextSize = 14
deepRuneStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
deepRuneStatusLabel.BackgroundTransparency = 1
deepRuneStatusLabel.TextXAlignment = Enum.TextXAlignment.Left

-- Open Deep Button (Left)
local openDeepBtn = Instance.new('TextButton', mainFrame)
openDeepBtn.Size = UDim2.new(0, 130, 0, 35)
openDeepBtn.Position = UDim2.new(0, 15, 0, 551)
openDeepBtn.Text = 'OPEN DEEP'
openDeepBtn.Font = Enum.Font.Cartoon
openDeepBtn.TextSize = 14
openDeepBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
openDeepBtn.BackgroundColor3 = Color3.fromRGB(80, 30, 120)

local openDeepBtnCorner = Instance.new('UICorner', openDeepBtn)
openDeepBtnCorner.CornerRadius = UDim.new(0, 8)

local openDeepBtnGrad = Instance.new('UIGradient', openDeepBtn)
openDeepBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 30, 120)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 60, 160)),
})
openDeepBtnGrad.Rotation = 90

-- Create Deep Button (Right)
local createDeepBtn = Instance.new('TextButton', mainFrame)
createDeepBtn.Size = UDim2.new(0, 130, 0, 35)
createDeepBtn.Position = UDim2.new(0, 155, 0, 551)
createDeepBtn.Text = 'CREATE DEEP'
createDeepBtn.Font = Enum.Font.Cartoon
createDeepBtn.TextSize = 14
createDeepBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
createDeepBtn.BackgroundColor3 = Color3.fromRGB(80, 30, 120)

local createDeepBtnCorner = Instance.new('UICorner', createDeepBtn)
createDeepBtnCorner.CornerRadius = UDim.new(0, 8)

local createDeepBtnGrad = Instance.new('UIGradient', createDeepBtn)
createDeepBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 30, 120)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 60, 160)),
})
createDeepBtnGrad.Rotation = 90

-- Toggle All Button
local toggleAllBtn = Instance.new('TextButton', mainFrame)
toggleAllBtn.Size = UDim2.new(0, 270, 0, 35)
toggleAllBtn.Position = UDim2.new(0.5, -135, 0, 596)
toggleAllBtn.Text = 'TOGGLE ALL SYSTEMS'
toggleAllBtn.Font = Enum.Font.Cartoon
toggleAllBtn.TextSize = 16
toggleAllBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
toggleAllBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 50)

local toggleAllBtnCorner = Instance.new('UICorner', toggleAllBtn)
toggleAllBtnCorner.CornerRadius = UDim.new(0, 8)

local toggleAllBtnGrad = Instance.new('UIGradient', toggleAllBtn)
toggleAllBtnGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(70, 70, 70)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 100, 100)),
})
toggleAllBtnGrad.Rotation = 90

-- Open Button (shows when minimized)
local openBtn = Instance.new('TextButton', screenGui)
openBtn.Size = UDim2.new(0, 180, 0, 50)
openBtn.Position = UDim2.new(0.5, -90, 0.05, 0)
openBtn.Text = '[🌌] Space Toolbox'
openBtn.Font = Enum.Font.Cartoon
openBtn.TextSize = 18
openBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
openBtn.BackgroundColor3 = Color3.fromRGB(80, 50, 120)
openBtn.Active = true
openBtn.Draggable = true

local openCorner = Instance.new('UICorner', openBtn)
openCorner.CornerRadius = UDim.new(0, 10)

local openGrad = Instance.new('UIGradient', openBtn)
openGrad.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 50, 120)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 70, 140)),
})
openGrad.Rotation = 90

-- ---------- Functionality ----------
local farmRunning = false
local upgradesRunning = false
local diamondUpgradesRunning = false
local perkRunning = false
local voltsRunning = false
local openRuneRunning = false
local createRuneRunning = false
local miningRunning = false
local openDeepRunning = false
local createDeepRunning = false

local function getObjects()
    local objectsFolder = workspace:FindFirstChild('Objects')
    if not objectsFolder then
        return {}
    end
    
    local objects = {}
    for _, obj in ipairs(objectsFolder:GetChildren()) do
        if tonumber(obj.Name) then
            table.insert(objects, obj)
        end
    end
    
    return objects
end

local function farmLoop()
    while farmRunning do
        local character = player.Character
        if character and character:FindFirstChild('HumanoidRootPart') then
            local objects = getObjects()
            
            if #objects == 0 then
                farmStatusLabel.Text = 'Farm Status: RUNNING'
                farmStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
                task.wait(1)
            else
                for _, obj in ipairs(objects) do
                    if not farmRunning then break end
                    
                    pcall(function()
                        if obj:IsA('BasePart') then
                            character.HumanoidRootPart.CFrame = obj.CFrame
                        elseif obj:IsA('Model') then
                            local part = obj.PrimaryPart or obj:FindFirstChildWhichIsA('BasePart')
                            if part then
                                character.HumanoidRootPart.CFrame = part.CFrame
                            end
                        end
                    end)
                    
                    task.wait(0.01)
                end
            end
        end
        task.wait(0.01)
    end
end

-- Auto Upgrade Loop
local function upgradeLoop()
    local upgradeLimits = {
        [1] = 50,
        [2] = 9,
        [3] = 90,
        [4] = 50
    }
    
    while upgradesRunning do
        local stats = player:WaitForChild('Stats')
        local allMaxed = true
        
        -- Check each upgrade and only fire if not maxed
        for i = 1, 4 do
            if not upgradesRunning then break end
            
            local upgradeStat = stats:FindFirstChild('Upgrade' .. i)
            if upgradeStat then
                local currentValue = upgradeStat.Value
                local maxValue = upgradeLimits[i]
                
                -- Only fire if not at max
                if currentValue < maxValue then
                    allMaxed = false
                    pcall(function()
                        UpgradeEvent:FireServer(i, true)
                    end)
                    task.wait(0.05)
                end
            end
        end
        
        -- If all upgrades are maxed, stop the loop
        if allMaxed then
            upgradesRunning = false
            upgradesBtn.Text = 'MAXED'
            upgradesBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
            upgradesBtnGrad.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 100)),
                ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 120, 120)),
            })
            upgradesBtn.Active = false -- Disable the button
            
            upgradeStatusLabel.Text = 'Essence Status: ALL MAXED!'
            upgradeStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
            break
        end
        
        task.wait(0.1)
    end
end

-- Diamond Upgrade Loop
local function diamondUpgradeLoop()
    local upgradeLimits = {
        [1] = 15,
        [2] = 50,
        [3] = 98,
        [4] = 98
    }
    
    while diamondUpgradesRunning do
        local stats = player:WaitForChild('Stats')
        local allMaxed = true
        
        -- Check each upgrade and only fire if not maxed
        for i = 1, 4 do
            if not diamondUpgradesRunning then break end
            
            local upgradeStat = stats:FindFirstChild('GemUpgrade' .. i)
            if upgradeStat then
                local currentValue = upgradeStat.Value
                local maxValue = upgradeLimits[i]
                
                -- Only fire if not at max
                if currentValue < maxValue then
                    allMaxed = false
                    pcall(function()
                        GemUpgradeEvent:FireServer(i, false)
                    end)
                    task.wait(0.05)
                end
            end
        end
        
        -- If all upgrades are maxed, stop the loop
        if allMaxed then
            diamondUpgradesRunning = false
            diamondBtn.Text = 'MAXED'
            diamondBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
            diamondBtnGrad.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 100)),
                ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 120, 120)),
            })
            diamondBtn.Active = false -- Disable the button
            
            diamondStatusLabel.Text = 'Diamond Status: ALL MAXED!'
            diamondStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
            break
        end
        
        task.wait(0.1)
    end
end

-- Perk Upgrade Loop (Sequential)
local function perkUpgradeLoop()
    local perkSequence = {
        {id = 1, max = 10, name = "Essence"},
        {id = 2, max = 10, name = "Faster Spawn"},
        {id = 6, max = 1, name = "Double Spawn"},
        {id = 5, max = 90, name = "Essence II"}
    }
    
    while perkRunning do
        local stats = player:WaitForChild('Stats')
        local allMaxed = true
        
        -- Go through perks in sequence
        for _, perk in ipairs(perkSequence) do
            if not perkRunning then break end
            
            local perkStat = stats:FindFirstChild('Perk' .. perk.id)
            if perkStat then
                local currentValue = perkStat.Value
                
                -- Keep upgrading this perk until it's maxed
                while perkRunning and currentValue < perk.max do
                    pcall(function()
                        PerkEvent:FireServer(perk.id, true)
                    end)
                    task.wait(0.1)
                    currentValue = perkStat.Value
                end
                
                -- If this perk didn't reach max, not all are maxed
                if currentValue < perk.max then
                    allMaxed = false
                    break
                end
            end
        end
        
        -- If all perks are maxed, stop the loop
        if allMaxed then
            perkRunning = false
            perkBtn.Text = 'MAXED'
            perkBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
            perkBtnGrad.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 100)),
                ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 120, 120)),
            })
            perkBtn.Active = false
            
            perkStatusLabel.Text = 'Perk Status: ALL MAXED!'
            perkStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
            break
        end
        
        task.wait(0.1)
    end
end

-- Volts Loop
local function voltsLoop()
    while voltsRunning do
        pcall(function()
            MachinePowerEvent:FireServer()
        end)
        task.wait(0.1) -- Fire 10 times per second
    end
end

-- Open Rune Loop
local function openRuneLoop()
    while openRuneRunning do
        pcall(function()
            RollRuneEvent:FireServer(1)
        end)
        task.wait(0.03) -- Faster: ~33 times per second
    end
end

-- Create Rune Loop
local function createRuneLoop()
    while createRuneRunning do
        pcall(function()
            CreateRuneEvent:FireServer(1)
        end)
        task.wait(0.03) -- Faster: ~33 times per second
    end
end

-- Mining Loop
local function miningLoop()
    while miningRunning do
        pcall(function()
            MineEvent:FireServer()
        end)
        task.wait(0.05) -- Faster: 20 times per second
    end
end

-- Open Deep Rune Loop
local function openDeepLoop()
    while openDeepRunning do
        pcall(function()
            RollRuneEvent:FireServer(2)
        end)
        task.wait(0.03) -- Faster: ~33 times per second
    end
end

-- Create Deep Rune Loop
local function createDeepLoop()
    while createDeepRunning do
        pcall(function()
            CreateRuneEvent:FireServer(2)
        end)
        task.wait(0.03) -- Faster: ~33 times per second
    end
end

-- Button Handlers
local dragging, mouseDown = false, nil

openBtn.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        mouseDown = input.Position
        dragging = false
    end
end)

openBtn.InputChanged:Connect(function(input)
    if (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) and mouseDown then
        if (input.Position - mouseDown).Magnitude > 3 then
            dragging = true
        end
    end
end)

openBtn.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        mouseDown = nil
    end
end)

openBtn.MouseButton1Click:Connect(function()
    if not dragging then
        mainFrame.Visible = true
        openBtn.Visible = false
    end
end)

minimizeBtn.MouseButton1Click:Connect(function()
    mainFrame.Visible = false
    openBtn.Visible = true
end)

closeBtn.MouseButton1Click:Connect(function()
    -- Stop all running loops
    farmRunning = false
    upgradesRunning = false
    diamondUpgradesRunning = false
    perkRunning = false
    voltsRunning = false
    openRuneRunning = false
    createRuneRunning = false
    miningRunning = false
    openDeepRunning = false
    createDeepRunning = false
    
    -- Wait a moment for loops to stop
    task.wait(0.2)
    
    -- Destroy the GUI
    screenGui:Destroy()
end)

-- Essence Upgrades Button Handler
upgradesBtn.MouseButton1Click:Connect(function()
    -- Check if all upgrades are maxed
    local stats = player:WaitForChild('Stats')
    local upgradeLimits = {
        [1] = 50,
        [2] = 9,
        [3] = 90,
        [4] = 50
    }
    
    local allMaxed = true
    for i = 1, 4 do
        local upgradeStat = stats:FindFirstChild('Upgrade' .. i)
        if upgradeStat and upgradeStat.Value < upgradeLimits[i] then
            allMaxed = false
            break
        end
    end
    
    -- If maxed, don't allow toggling
    if allMaxed then
        upgradesBtn.Text = 'MAXED'
        upgradesBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
        upgradesBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 100)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 120, 120)),
        })
        upgradesBtn.Active = false
        upgradeStatusLabel.Text = 'Essence Status: ALL MAXED!'
        upgradeStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
        return
    end
    
    upgradesRunning = not upgradesRunning
    
    if upgradesRunning then
        upgradesBtn.Text = 'STOP ESSENCE UPGRADES'
        upgradesBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        upgradesBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        upgradeStatusLabel.Text = 'Essence Status: RUNNING'
        upgradeStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        
        task.spawn(upgradeLoop)
    else
        upgradesBtn.Text = 'START ESSENCE UPGRADES'
        upgradesBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 200)
        upgradesBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 150, 200)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 180, 240)),
        })
        
        upgradeStatusLabel.Text = 'Essence Status: OFF'
        upgradeStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Diamond Upgrades Button Handler
diamondBtn.MouseButton1Click:Connect(function()
    -- Check if all diamond upgrades are maxed
    local stats = player:WaitForChild('Stats')
    local upgradeLimits = {
        [1] = 15,
        [2] = 50,
        [3] = 98,
        [4] = 98
    }
    
    local allMaxed = true
    for i = 1, 4 do
        local upgradeStat = stats:FindFirstChild('GemUpgrade' .. i)
        if upgradeStat and upgradeStat.Value < upgradeLimits[i] then
            allMaxed = false
            break
        end
    end
    
    -- If maxed, don't allow toggling
    if allMaxed then
        diamondBtn.Text = 'MAXED'
        diamondBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
        diamondBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 100)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 120, 120)),
        })
        diamondBtn.Active = false
        diamondStatusLabel.Text = 'Diamond Status: ALL MAXED!'
        diamondStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
        return
    end
    
    diamondUpgradesRunning = not diamondUpgradesRunning
    
    if diamondUpgradesRunning then
        diamondBtn.Text = 'STOP DIAMOND UPGRADES'
        diamondBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        diamondBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        diamondStatusLabel.Text = 'Diamond Status: RUNNING'
        diamondStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        
        task.spawn(diamondUpgradeLoop)
    else
        diamondBtn.Text = 'START DIAMOND UPGRADES'
        diamondBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 200)
        diamondBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 180, 200)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(100, 220, 255)),
        })
        
        diamondStatusLabel.Text = 'Diamond Status: OFF'
        diamondStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Help Button Hover (Tooltip)
helpBtn.MouseEnter:Connect(function()
    tooltipFrame.Visible = true
    -- Position tooltip near the help button
    local buttonPos = helpBtn.AbsolutePosition
    tooltipFrame.Position = UDim2.new(0, buttonPos.X - 250, 0, buttonPos.Y - 60)
end)

helpBtn.MouseLeave:Connect(function()
    tooltipFrame.Visible = false
end)

-- Automate Perks Button Handler
perkBtn.MouseButton1Click:Connect(function()
    -- Check if all perks are maxed
    local stats = player:WaitForChild('Stats')
    local perkLimits = {
        [1] = 10,
        [2] = 10,
        [6] = 1,
        [5] = 90
    }
    
    local allMaxed = true
    for perkId, maxVal in pairs(perkLimits) do
        local perkStat = stats:FindFirstChild('Perk' .. perkId)
        if perkStat and perkStat.Value < maxVal then
            allMaxed = false
            break
        end
    end
    
    -- If maxed, don't allow toggling
    if allMaxed then
        perkBtn.Text = 'MAXED'
        perkBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 100)
        perkBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 100, 100)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 120, 120)),
        })
        perkBtn.Active = false
        perkStatusLabel.Text = 'Perk Status: ALL MAXED!'
        perkStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 0)
        return
    end
    
    perkRunning = not perkRunning
    
    if perkRunning then
        perkBtn.Text = 'STOP PERKS'
        perkBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        perkBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        perkStatusLabel.Text = 'Perk Status: RUNNING'
        perkStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        
        task.spawn(perkUpgradeLoop)
    else
        perkBtn.Text = 'AUTOMATE PERKS'
        perkBtn.BackgroundColor3 = Color3.fromRGB(120, 50, 150)
        perkBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(120, 50, 150)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 100, 220)),
        })
        
        perkStatusLabel.Text = 'Perk Status: OFF'
        perkStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Essence Farm Button Handler
farmBtn.MouseButton1Click:Connect(function()
    farmRunning = not farmRunning
    
    if farmRunning then
        farmBtn.Text = 'STOP ESSENCE FARM'
        farmBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        farmBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        farmStatusLabel.Text = 'Farm Status: RUNNING'
        farmStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        
        task.spawn(farmLoop)
    else
        farmBtn.Text = 'START ESSENCE FARM'
        farmBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 0)
        farmBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 150, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 200, 0)),
        })
        
        farmStatusLabel.Text = 'Farm Status: OFF'
        farmStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        
        -- Teleport to upgrade board when stopped
        local character = player.Character
        if character and character:FindFirstChild('HumanoidRootPart') then
            character.HumanoidRootPart.CFrame = CFrame.new(65, 4, -18)
        end
    end
end)

-- Mining Button Handler
miningBtn.MouseButton1Click:Connect(function()
    miningRunning = not miningRunning
    
    if miningRunning then
        miningBtn.Text = 'STOP MINING'
        miningBtn.BackgroundColor3 = Color3.fromRGB(100, 0, 0)
        miningBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(130, 0, 0)),
        })
        
        miningStatusLabel.Text = 'Mining Status: RUNNING'
        miningStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        
        task.spawn(miningLoop)
    else
        miningBtn.Text = 'START MINING'
        miningBtn.BackgroundColor3 = Color3.fromRGB(150, 0, 0)
        miningBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(150, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 0, 0)),
        })
        
        miningStatusLabel.Text = 'Mining Status: OFF'
        miningStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Volts Button Handler
voltsBtn.MouseButton1Click:Connect(function()
    voltsRunning = not voltsRunning
    
    if voltsRunning then
        voltsBtn.Text = 'STOP VOLTS'
        voltsBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        voltsBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        voltsStatusLabel.Text = 'Volts Status: RUNNING'
        voltsStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        
        task.spawn(voltsLoop)
    else
        voltsBtn.Text = 'AUTOMATE VOLTS'
        voltsBtn.BackgroundColor3 = Color3.fromRGB(165, 145, 110)
        voltsBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(165, 145, 110)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(195, 175, 140)),
        })
        
        voltsStatusLabel.Text = 'Volts Status: OFF'
        voltsStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Open Rune Button Handler
openRuneBtn.MouseButton1Click:Connect(function()
    openRuneRunning = not openRuneRunning
    
    if openRuneRunning then
        openRuneBtn.Text = 'STOP OPEN'
        openRuneBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        openRuneBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        task.spawn(openRuneLoop)
    else
        openRuneBtn.Text = 'OPEN STARDUST'
        openRuneBtn.BackgroundColor3 = Color3.fromRGB(255, 100, 200)
        openRuneBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 100, 200)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 150, 220)),
        })
    end
    
    -- Update status
    local status = {}
    if openRuneRunning then table.insert(status, "OPENING STARDUST") end
    if createRuneRunning then table.insert(status, "CREATING STARDUST") end
    
    if #status > 0 then
        runeStatusLabel.Text = 'Rune Status: ' .. table.concat(status, " + ")
        runeStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
    else
        runeStatusLabel.Text = 'Rune Status: OFF'
        runeStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Create Rune Button Handler
createRuneBtn.MouseButton1Click:Connect(function()
    createRuneRunning = not createRuneRunning
    
    if createRuneRunning then
        createRuneBtn.Text = 'STOP CREATE'
        createRuneBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        createRuneBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        task.spawn(createRuneLoop)
    else
        createRuneBtn.Text = 'CREATE STARDUST'
        createRuneBtn.BackgroundColor3 = Color3.fromRGB(255, 100, 200)
        createRuneBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(255, 100, 200)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(255, 150, 220)),
        })
    end
    
    -- Update status
    local status = {}
    if openRuneRunning then table.insert(status, "OPENING STARDUST") end
    if createRuneRunning then table.insert(status, "CREATING STARDUST") end
    
    if #status > 0 then
        runeStatusLabel.Text = 'Rune Status: ' .. table.concat(status, " + ")
        runeStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
    else
        runeStatusLabel.Text = 'Rune Status: OFF'
        runeStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Open Deep Rune Button Handler
openDeepBtn.MouseButton1Click:Connect(function()
    openDeepRunning = not openDeepRunning
    
    if openDeepRunning then
        openDeepBtn.Text = 'STOP OPEN'
        openDeepBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        openDeepBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        task.spawn(openDeepLoop)
    else
        openDeepBtn.Text = 'OPEN DEEP'
        openDeepBtn.BackgroundColor3 = Color3.fromRGB(80, 30, 120)
        openDeepBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 30, 120)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 60, 160)),
        })
    end
    
    -- Update status
    local status = {}
    if openDeepRunning then table.insert(status, "OPENING DEEP") end
    if createDeepRunning then table.insert(status, "CREATING DEEP") end
    
    if #status > 0 then
        deepRuneStatusLabel.Text = 'Deep Rune Status: ' .. table.concat(status, " + ")
        deepRuneStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
    else
        deepRuneStatusLabel.Text = 'Deep Rune Status: OFF'
        deepRuneStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Create Deep Rune Button Handler
createDeepBtn.MouseButton1Click:Connect(function()
    createDeepRunning = not createDeepRunning
    
    if createDeepRunning then
        createDeepBtn.Text = 'STOP CREATE'
        createDeepBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        createDeepBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        
        task.spawn(createDeepLoop)
    else
        createDeepBtn.Text = 'CREATE DEEP'
        createDeepBtn.BackgroundColor3 = Color3.fromRGB(80, 30, 120)
        createDeepBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(80, 30, 120)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(120, 60, 160)),
        })
    end
    
    -- Update status
    local status = {}
    if openDeepRunning then table.insert(status, "OPENING DEEP") end
    if createDeepRunning then table.insert(status, "CREATING DEEP") end
    
    if #status > 0 then
        deepRuneStatusLabel.Text = 'Deep Rune Status: ' .. table.concat(status, " + ")
        deepRuneStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
    else
        deepRuneStatusLabel.Text = 'Deep Rune Status: OFF'
        deepRuneStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
    end
end)

-- Toggle All Button Handler
toggleAllBtn.MouseButton1Click:Connect(function()
    -- Check if any system is running
    local anyRunning = farmRunning or upgradesRunning or diamondUpgradesRunning or perkRunning or voltsRunning or miningRunning
    
    if anyRunning then
        -- Stop all systems by setting their states to false
        farmRunning = false
        upgradesRunning = false
        diamondUpgradesRunning = false
        perkRunning = false
        voltsRunning = false
        miningRunning = false
        
        -- Update all buttons to stopped state
        if farmBtn.Text ~= 'START ESSENCE FARM' then
            farmBtn.Text = 'START ESSENCE FARM'
            farmBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 0)
            farmBtnGrad.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, Color3.fromRGB(0, 150, 0)),
                ColorSequenceKeypoint.new(1, Color3.fromRGB(0, 200, 0)),
            })
            farmStatusLabel.Text = 'Farm Status: OFF'
            farmStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        end
        
        if miningBtn.Text ~= 'START MINING' then
            miningBtn.Text = 'START MINING'
            miningBtn.BackgroundColor3 = Color3.fromRGB(150, 0, 0)
            miningBtnGrad.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, Color3.fromRGB(150, 0, 0)),
                ColorSequenceKeypoint.new(1, Color3.fromRGB(180, 0, 0)),
            })
            miningStatusLabel.Text = 'Mining Status: OFF'
            miningStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        end
        
        if upgradesBtn.Text ~= 'START ESSENCE UPGRADES' and upgradesBtn.Text ~= 'MAXED' then
            upgradesBtn.Text = 'START ESSENCE UPGRADES'
            upgradesBtn.BackgroundColor3 = Color3.fromRGB(0, 150, 200)
            upgradeStatusLabel.Text = 'Essence Status: OFF'
            upgradeStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        end
        
        if diamondBtn.Text ~= 'START DIAMOND UPGRADES' and diamondBtn.Text ~= 'MAXED' then
            diamondBtn.Text = 'START DIAMOND UPGRADES'
            diamondBtn.BackgroundColor3 = Color3.fromRGB(0, 180, 200)
            diamondStatusLabel.Text = 'Diamond Status: OFF'
            diamondStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        end
        
        if perkBtn.Text ~= 'AUTOMATE PERKS' and perkBtn.Text ~= 'MAXED' then
            perkBtn.Text = 'AUTOMATE PERKS'
            perkBtn.BackgroundColor3 = Color3.fromRGB(120, 50, 150)
            perkStatusLabel.Text = 'Perk Status: OFF'
            perkStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        end
        
        if voltsBtn.Text ~= 'AUTOMATE VOLTS' then
            voltsBtn.Text = 'AUTOMATE VOLTS'
            voltsBtn.BackgroundColor3 = Color3.fromRGB(165, 145, 110)
            voltsBtnGrad.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, Color3.fromRGB(165, 145, 110)),
                ColorSequenceKeypoint.new(1, Color3.fromRGB(195, 175, 140)),
            })
            voltsStatusLabel.Text = 'Volts Status: OFF'
            voltsStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
        end
    else
        -- Start all systems that aren't maxed
        if upgradesBtn.Active and upgradesBtn.Text == 'START ESSENCE UPGRADES' then
            upgradesBtn.Text = 'STOP ESSENCE UPGRADES'
            upgradesBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
            upgradeStatusLabel.Text = 'Essence Status: RUNNING'
            upgradeStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
            upgradesRunning = true
            task.spawn(upgradeLoop)
        end
        
        if diamondBtn.Active and diamondBtn.Text == 'START DIAMOND UPGRADES' then
            diamondBtn.Text = 'STOP DIAMOND UPGRADES'
            diamondBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
            diamondStatusLabel.Text = 'Diamond Status: RUNNING'
            diamondStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
            diamondUpgradesRunning = true
            task.spawn(diamondUpgradeLoop)
        end
        
        if perkBtn.Active and perkBtn.Text == 'AUTOMATE PERKS' then
            perkBtn.Text = 'STOP PERKS'
            perkBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
            perkStatusLabel.Text = 'Perk Status: RUNNING'
            perkStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
            perkRunning = true
            task.spawn(perkUpgradeLoop)
        end
        
        -- Always start farm, mining, and volts
        farmBtn.Text = 'STOP ESSENCE FARM'
        farmBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        farmBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        farmStatusLabel.Text = 'Farm Status: RUNNING'
        farmStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        farmRunning = true
        task.spawn(farmLoop)
        
        miningBtn.Text = 'STOP MINING'
        miningBtn.BackgroundColor3 = Color3.fromRGB(100, 0, 0)
        miningBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(100, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(130, 0, 0)),
        })
        miningStatusLabel.Text = 'Mining Status: RUNNING'
        miningStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        miningRunning = true
        task.spawn(miningLoop)
        
        voltsBtn.Text = 'STOP VOLTS'
        voltsBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
        voltsBtnGrad.Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0, Color3.fromRGB(180, 0, 0)),
            ColorSequenceKeypoint.new(1, Color3.fromRGB(220, 0, 0)),
        })
        voltsStatusLabel.Text = 'Volts Status: RUNNING'
        voltsStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
        voltsRunning = true
        task.spawn(voltsLoop)
    end
end)

print('[🌌] Space Toolbox Loaded!')
print('Found ' .. #getObjects() .. ' essence objects')

Features & Information

*UPDATE1: Retained teleportation and essence farm script, added a toggle for auto-upgrading essence and diamond upgrades to their max *UPDATE2: Added auto-perk tree, fixed closed loop continuity bug, and separated close/minimize button to prevent accidents. Also added an autoclicker for Volts, and a start-all button *UPDATE3: Added auto-rune features, to open/create more of both stardust/deep runes. Added auto-mine functionality, aswell *Will probably be adding auto-atom/nuclear executes that you choose the timer on, along with auto upgrade for their currencies. Considering an auto-galaxy/auto-evolution aswell. At this rate, the whole game is gonna play itself lol *To mute the sounds for upgrades, just toggle it in settings. *If you desire to see any features, let me know below. *Also looking for game recommendations to modify, drop those too lol. I primarily do incremental games
#lightweight#opensource#teleportation#popular#trending

Community Comments (8)

AgunsMochiAgunsMochiNov 8, 2025

can you make something for death ball

Replying to @AgunsMochi
AdministratorsAdministratorsNov 9, 2025

@EmpireBro looking at it tomorrow, will see what i can do. doesn't look promising though, bigger games have more complicated anti-cheats

Replying to @Administrators
AgunsMochiAgunsMochiNov 10, 2025

@Administrators okay ty

XenosXenosNov 8, 2025

can u add auto upgrade

Replying to @Xenos
AdministratorsAdministratorsNov 9, 2025(edited)

@Xenos done! thank you for liking the script!

AdministratorsAdministratorsNov 9, 2025

Forgot to add in the commit log, may add a feature to disable upgrade sounds. they are annoying as hell lmfao

MediorceExploiterMediorceExploiterNov 12, 2025

I tried using auto perk upgrade but it upgraded Essence first for some reason, also can you add auto atom upgrader?

Replying to @MediorceExploiter
AdministratorsAdministratorsNov 14, 2025(edited)

@kaydenjohnson312 hello. it says on it when you hover over the question mark directly next to the auto-perk, "Will only upgrade X, X, X, and X ***in that order***". Working as intended. Also, if you took any amount of time to read the description, it says an auto-atom is slated. I have a job I work 5 days a week, lol. This is a hobby for me, take the time to read descriptions or any descriptor before asking questions, please.

More Scripts for [🌌] Space Incremental