Version / Update: v1.0.0
- Download / Script Link
- --[[
⚡ Space Automation — Tabs + Minimize + Auto Rune (WIP) + Auto Tungsten (WIP)
• Tabs: Main | Clickers
- Main: Object Collector, Anti-AFK, WalkSpeed 100
- Clickers: Meteorite Mining, Electric Machine, Electric Machine 2000, Auto Rune (WIP), Auto Tungsten (WIP, 1/s)
• Auto Rune (WIP): Fires Events.CreateRune @ 2/s + VIM-click if on-screen
• Auto Tungsten (WIP): Finds workspace.Tungsten.Prestige, bumps ClickDetector range, optionally fires Events.Prestige, then 1 real click/sec
• Minimize → draggable [🚀] bubble
Notes:
- Mining/Machines are mutually exclusive with each other (not with Rune/Tungsten)
- WalkSpeed 100 auto-enforced while ON (every 0.01s)
- Credit footer includes a newline before the warning.
]]
------------------------- Services
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local UIS = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local VIM = game:GetService("VirtualInputManager")
local Camera = workspace.CurrentCamera
local Player = Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
-- === Rates ===
local CLICKER_CPS = 10 -- mining/machines
local INTERVAL = 1 / CLICKER_CPS
local RUNE_CPS = 2 -- rune
local RUNE_INTERVAL = 1 / RUNE_CPS
local TUNG_CPS = 1 -- tungsten
local TUNG_INTERVAL = 1 / TUNG_CPS
-- panel sizes per tab (shrunk)
local PANEL_W = 280
local PANEL_H_MAIN = 250 -- smaller main
local PANEL_H_CLICKERS = 370 -- smaller clickers
local PANEL_POS = UDim2.new(0.5, -PANEL_W/2, 0.35, -PANEL_H_MAIN/2)
-- cleanup
local old = PlayerGui:FindFirstChild("SpaceTabsUI"); if old then old:Destroy() end
------------------------- Root GUI
local Gui = Instance.new("ScreenGui")
Gui.Name = "SpaceTabsUI"
Gui.IgnoreGuiInset = true
Gui.ResetOnSpawn = false
Gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
Gui.Parent = PlayerGui
------------------------- Panel (draggable)
local Panel = Instance.new("Frame")
Panel.Name = "Panel"
Panel.Size = UDim2.fromOffset(PANEL_W, PANEL_H_MAIN)
Panel.Position = PANEL_POS
Panel.BackgroundColor3 = Color3.fromRGB(10,12,28)
Panel.BackgroundTransparency = 0.05
Panel.BorderSizePixel = 0
Panel.Parent = Gui
Instance.new("UICorner", Panel).CornerRadius = UDim.new(0, 12)
local Stroke = Instance.new("UIStroke", Panel)
Stroke.Thickness = 2
Stroke.Color = Color3.fromRGB(0, 200, 255)
Stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
-- Header
local Title = Instance.new("TextLabel")
Title.BackgroundTransparency = 1
Title.Size = UDim2.new(1, -72, 0, 24)
Title.Position = UDim2.fromOffset(12, 6)
Title.Text = "Space Automation"
Title.Font = Enum.Font.GothamBold
Title.TextSize = 16
Title.TextColor3 = Color3.fromRGB(150, 230, 255)
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.Parent = Panel
-- Close
local Close = Instance.new("TextButton")
Close.Size = UDim2.fromOffset(22, 22)
Close.Position = UDim2.new(1, -28, 0, 6)
Close.BackgroundColor3 = Color3.fromRGB(25, 25, 40)
Close.Text = "✖"
Close.Font = Enum.Font.GothamBold
Close.TextSize = 13
Close.TextColor3 = Color3.fromRGB(255, 100, 100)
Close.AutoButtonColor = false
Close.Parent = Panel
Instance.new("UICorner", Close).CornerRadius = UDim.new(0, 6)
-- Minimize
local Min = Instance.new("TextButton")
Min.Size = UDim2.fromOffset(22, 22)
Min.Position = UDim2.new(1, -54, 0, 6)
Min.BackgroundColor3 = Color3.fromRGB(25, 25, 40)
Min.Text = "—"
Min.Font = Enum.Font.GothamBold
Min.TextSize = 16
Min.TextColor3 = Color3.fromRGB(150, 200, 255)
Min.AutoButtonColor = false
Min.Parent = Panel
Instance.new("UICorner", Min).CornerRadius = UDim.new(0, 6)
------------------------- Tabs
local Tabs = Instance.new("Frame")
Tabs.BackgroundTransparency = 1
Tabs.Size = UDim2.new(1, -24, 0, 30)
Tabs.Position = UDim2.fromOffset(12, 34)
Tabs.Parent = Panel
local function makeTab(xOffset, label)
local b = Instance.new("TextButton")
b.Size = UDim2.fromOffset(120, 26)
b.Position = UDim2.fromOffset(xOffset, 2)
b.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
b.Text = label
b.Font = Enum.Font.GothamBold
b.TextSize = 14
b.TextColor3 = Color3.fromRGB(180, 220, 255)
b.AutoButtonColor = false
b.Parent = Tabs
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 8)
return b
end
local TabMain = makeTab(0, "Main")
local TabClickers = makeTab(130, "Clickers")
local function setActiveTab(btn, active)
if active then
btn.BackgroundColor3 = Color3.fromRGB(60, 70, 140)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
else
btn.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
btn.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
------------------------- Content
local Content = Instance.new("Frame")
Content.BackgroundTransparency = 1
Content.Size = UDim2.new(1, -24, 1, -112) -- a bit more top/bottom padding after shrink
Content.Position = UDim2.fromOffset(12, 66)
Content.Parent = Panel
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.fromScale(1, 1)
MainFrame.BackgroundTransparency = 1
MainFrame.Parent = Content
local ClickersFrame = Instance.new("Frame")
ClickersFrame.Name = "ClickersFrame"
ClickersFrame.Size = UDim2.fromScale(1, 1)
ClickersFrame.BackgroundTransparency = 1
ClickersFrame.Visible = false
ClickersFrame.Parent = Content
local function makeToggle(parent, y, label)
local b = Instance.new("TextButton")
b.Size = UDim2.new(1, 0, 0, 42)
b.Position = UDim2.fromOffset(0, y)
b.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
b.Text = label .. ": OFF"
b.Font = Enum.Font.GothamBold
b.TextSize = 18
b.TextColor3 = Color3.fromRGB(180, 220, 255)
b.AutoButtonColor = false
b.Parent = parent
Instance.new("UICorner", b).CornerRadius = UDim.new(0, 10)
return b
end
------------------------- Dragging
local dragging, didDrag = false, false
local dragStartMouse, startPos
local lastDragAt = 0
local THRESH = 6
local function mouseInPanel()
local m = UIS:GetMouseLocation()
local p = Panel.AbsolutePosition
local s = Panel.AbsoluteSize
return m.X >= p.X and m.X <= p.X + s.X and m.Y >= p.Y and m.Y <= p.Y + s.Y
end
UIS.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 and mouseInPanel() then
dragging, didDrag = true, false
dragStartMouse = UIS:GetMouseLocation()
startPos = Panel.Position
end
end)
UIS.InputChanged:Connect(function(input)
if dragging and input.UserInputType == Enum.UserInputType.MouseMovement and dragStartMouse and startPos then
local m = UIS:GetMouseLocation()
local dx, dy = m.X - dragStartMouse.X, m.Y - dragStartMouse.Y
if not didDrag and (math.abs(dx) > THRESH or math.abs(dy) > THRESH) then didDrag = true end
Panel.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + dx, startPos.Y.Scale, startPos.Y.Offset + dy)
end
end)
UIS.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if dragging and didDrag then lastDragAt = os.clock() end
dragging, didDrag, dragStartMouse, startPos = false, false, nil, nil
end
end)
local function justDragged() return (os.clock() - lastDragAt) < 0.12 end
------------------------- Helpers
local function clickAt(x, y)
VIM:SendMouseMoveEvent(x, y, game)
VIM:SendMouseButtonEvent(x, y, 0, true, game, 0)
VIM:SendMouseButtonEvent(x, y, 0, false, game, 0)
end
local function getScreenPointsFromModel(model)
local cf, size = model:GetBoundingBox()
local half = size / 2
local pts, cx, cy, n = {}, 0, 0, 0
local corners = {
Vector3.new(-half.X,-half.Y,-half.Z), Vector3.new(half.X,-half.Y,-half.Z),
Vector3.new(-half.X, half.Y,-half.Z), Vector3.new(half.X, half.Y,-half.Z),
Vector3.new(-half.X,-half.Y, half.Z), Vector3.new(half.X,-half.Y, half.Z),
Vector3.new(-half.X, half.Y, half.Z), Vector3.new(half.X, half.Y, half.Z),
}
for _, off in ipairs(corners) do
local wp = cf:PointToWorldSpace(off)
local sp, on = Camera:WorldToViewportPoint(wp)
if on then
table.insert(pts, Vector2.new(sp.X, sp.Y))
cx += sp.X; cy += sp.Y; n += 1
end
end
if n > 0 then table.insert(pts, Vector2.new(cx/n, cy/n)) end
return pts
end
local EventsFolder = ReplicatedStorage:FindFirstChild("Events")
local evCollect = EventsFolder and EventsFolder:FindFirstChild("CollectObject")
local evMine = EventsFolder and EventsFolder:FindFirstChild("Mine")
local evMachine = EventsFolder and EventsFolder:FindFirstChild("MachinePower")
local evMachine2 = EventsFolder and EventsFolder:FindFirstChild("MachinePower2")
local evRune = EventsFolder and EventsFolder:FindFirstChild("CreateRune")
local evPrestige = EventsFolder and EventsFolder:FindFirstChild("Prestige")
------------------------- MAIN TAB
local ToggleCollector = makeToggle(MainFrame, 0, "Object Collector")
local ToggleAFK = makeToggle(MainFrame, 50, "Anti-AFK")
local ToggleWS = makeToggle(MainFrame, 100, "WalkSpeed 100")
-- Object Collector
local collectorRunning, collectorThread = false, nil
local function setCollectorVisual(on)
if on then
ToggleCollector.Text = "Object Collector: ON"
ToggleCollector.BackgroundColor3 = Color3.fromRGB(40, 0, 120)
ToggleCollector.TextColor3 = Color3.fromRGB(255, 255, 255)
else
ToggleCollector.Text = "Object Collector: OFF"
ToggleCollector.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
ToggleCollector.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
local function collectorLoop()
while collectorRunning and Gui.Parent do
local folder = Workspace:FindFirstChild("Objects")
if folder and evCollect then
for _, obj in ipairs(folder:GetChildren()) do
local id = tonumber(obj.Name)
if id then
pcall(function()
evCollect:FireServer(id)
obj:Destroy()
end)
end
end
end
task.wait()
end
end
ToggleCollector.MouseButton1Click:Connect(function()
if justDragged() then return end
collectorRunning = not collectorRunning
setCollectorVisual(collectorRunning)
if collectorRunning then
if collectorThread then task.cancel(collectorThread) end
collectorThread = task.spawn(collectorLoop)
else
if collectorThread then task.cancel(collectorThread) collectorThread=nil end
end
end)
setCollectorVisual(false)
-- Anti-AFK
local afkRunning, afkThread = false, nil
local function setAFKVisual(on)
if on then
ToggleAFK.Text = "Anti-AFK: ON"
ToggleAFK.BackgroundColor3 = Color3.fromRGB(0, 110, 90)
ToggleAFK.TextColor3 = Color3.fromRGB(255, 255, 255)
else
ToggleAFK.Text = "Anti-AFK: OFF"
ToggleAFK.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
ToggleAFK.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
local function afkLoop()
while afkRunning and Gui.Parent do
task.wait(10)
if not afkRunning or not Gui.Parent then break end
pcall(function()
VIM:SendKeyEvent(true, Enum.KeyCode.Space, false, game)
task.wait(0.08)
VIM:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
end)
local character = Player.Character or Player.CharacterAdded:Wait()
local hum = character:FindFirstChildOfClass("Humanoid")
if hum then hum.Jump = true end
end
end
ToggleAFK.MouseButton1Click:Connect(function()
if justDragged() then return end
afkRunning = not afkRunning
setAFKVisual(afkRunning)
if afkRunning then
if afkThread then task.cancel(afkThread) end
afkThread = task.spawn(afkLoop)
else
if afkThread then task.cancel(afkThread) afkThread=nil end
end
end)
setAFKVisual(false)
-- WalkSpeed 100
local wsRunning, wsThread = false, nil
local DEFAULT_WS, WS_VALUE, WS_INTERVAL = 16, 100, 0.01
local function setWSVisual(on)
if on then
ToggleWS.Text = "WalkSpeed 100: ON"
ToggleWS.BackgroundColor3 = Color3.fromRGB(90, 190, 255)
ToggleWS.TextColor3 = Color3.fromRGB(255, 255, 255)
else
ToggleWS.Text = "WalkSpeed 100: OFF"
ToggleWS.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
ToggleWS.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
local function applyWalkSpeedLoop()
while wsRunning and Gui.Parent do
local char = Player.Character or Player.CharacterAdded:Wait()
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then hum.WalkSpeed = WS_VALUE end
task.wait(WS_INTERVAL)
end
end
ToggleWS.MouseButton1Click:Connect(function()
if justDragged() then return end
wsRunning = not wsRunning
setWSVisual(wsRunning)
if wsRunning then
if wsThread then task.cancel(wsThread) end
wsThread = task.spawn(applyWalkSpeedLoop)
else
if wsThread then task.cancel(wsThread) wsThread=nil end
local char = Player.Character or Player.CharacterAdded:Wait()
local hum = char:FindFirstChildOfClass("Humanoid")
if hum then hum.WalkSpeed = DEFAULT_WS end
end
end)
setWSVisual(false)
------------------------- CLICKERS TAB
local ToggleMining = makeToggle(ClickersFrame, 0, "Meteorite Mining")
local ToggleMachine = makeToggle(ClickersFrame, 50, "Electric Machine")
local ToggleMachine2 = makeToggle(ClickersFrame, 100, "Electric Machine 2000")
local ToggleRune = makeToggle(ClickersFrame, 150, "Auto Rune (WIP)")
local ToggleTungsten = makeToggle(ClickersFrame, 200, "Auto Tungsten (WIP)")
-- exclusivity for mining/machines
local function setMiningVisual(on)
if on then
ToggleMining.Text = "Meteorite Mining: ON"
ToggleMining.BackgroundColor3 = Color3.fromRGB(80, 0, 140)
ToggleMining.TextColor3 = Color3.fromRGB(255, 255, 255)
else
ToggleMining.Text = "Meteorite Mining: OFF"
ToggleMining.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
ToggleMining.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
local function setMachineVisual(on)
if on then
ToggleMachine.Text = "Electric Machine: ON"
ToggleMachine.BackgroundColor3 = Color3.fromRGB(0, 120, 180)
ToggleMachine.TextColor3 = Color3.fromRGB(255, 255, 255)
else
ToggleMachine.Text = "Electric Machine: OFF"
ToggleMachine.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
ToggleMachine.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
local function setMachine2Visual(on)
if on then
ToggleMachine2.Text = "Electric Machine 2000: ON"
ToggleMachine2.BackgroundColor3 = Color3.fromRGB(0, 160, 120)
ToggleMachine2.TextColor3 = Color3.fromRGB(255, 255, 255)
else
ToggleMachine2.Text = "Electric Machine 2000: OFF"
ToggleMachine2.BackgroundColor3 = Color3.fromRGB(30, 30, 60)
ToggleMachine2.TextColor3 = Color3.fromRGB(180, 220, 255)
end
end
local function stopMineMach()
if miningConn then miningConn:Disconnect() miningConn=nil end
if machineConn then machineConn:Disconnect() machineConn=nil end
if machine2Conn then machine2Conn:Disconnect() machine2Conn=nil end
miningRunning, machineRunning, machine2Running = false, false, false
setMiningVisual(false); setMachineVisual(false); setMachine2Visual(false)
end
-- Mining loop
local miningRunning, miningConn = false, nil
local mine_acc, mine_pts, mine_idx, mine_hitbox = 0, {}, 1, nil
local function getMiningHitbox()
local mining = workspace:FindFirstChild("Mining")
if not mining then return nil end
local hb = mining:FindFirstChild("MiningHitbox")
if hb and hb:IsA("Model") then return hb end
return nil
end
local function fireMineRemote()
if not (evMine and evMine:IsA("RemoteEvent")) then return end
for i=1,10 do pcall(function() evMine:FireServer(i) end) end
end
local function startMining()
if miningRunning then return end
stopMineMach()
miningRunning = true
mine_acc, mine_pts, mine_idx, mine_hitbox = 0, {}, 1, nil
miningConn = RunService.Heartbeat:Connect(function(dt)
if not miningRunning then return end
mine_acc += dt
while mine_acc >= INTERVAL do
mine_acc -= INTERVAL
fireMineRemote()
if not mine_hitbox or not mine_hitbox.Parent then
mine_hitbox = getMiningHitbox()
mine_pts, mine_idx = {}, 1
end
if mine_hitbox then
if #mine_pts == 0 then mine_pts = getScreenPointsFromModel(mine_hitbox); mine_idx = 1 end
local p = mine_pts[mine_idx]
if p then clickAt(p.X, p.Y) end
mine_idx = (mine_idx % math.max(1, #mine_pts)) + 1
end
end
end)
end
local function stopMining()
if not miningRunning then return end
miningRunning = false
if miningConn then miningConn:Disconnect() miningConn=nil end
end
ToggleMining.MouseButton1Click:Connect(function()
if justDragged() then return end
if miningRunning then stopMining(); setMiningVisual(false)
else startMining(); setMiningVisual(true) end
end)
setMiningVisual(false)
-- Machine
local machineRunning, machineConn = false, nil
local mach_acc, mach_model, mach_pts, mach_idx = 0, nil, {}, 1
local function getMachineModel()
local upgrade = workspace:FindFirstChild("UpgradeBoards")
if not upgrade then return nil end
local machine = upgrade:FindFirstChild("Machine")
if machine and machine:IsA("Model") then return machine end
return nil
end
local function fireMachineRemote()
if evMachine and evMachine:IsA("RemoteEvent") then pcall(function() evMachine:FireServer() end) end
end
local function startMachine()
if machineRunning then return end
stopMineMach()
machineRunning = true
mach_acc, mach_model, mach_pts, mach_idx = 0, nil, {}, 1
machineConn = RunService.Heartbeat:Connect(function(dt)
if not machineRunning then return end
mach_acc += dt
while mach_acc >= INTERVAL do
mach_acc -= INTERVAL
fireMachineRemote()
if not mach_model or not mach_model.Parent then
mach_model = getMachineModel()
mach_pts, mach_idx = {}, 1
end
if mach_model then
if #mach_pts == 0 then mach_pts = getScreenPointsFromModel(mach_model); mach_idx = 1 end
local p = mach_pts[mach_idx]
if p then clickAt(p.X, p.Y) end
mach_idx = (mach_idx % math.max(1, #mach_pts)) + 1
end
end
end)
end
local function stopMachine()
if not machineRunning then return end
machineRunning = false
if machineConn then machineConn:Disconnect() machineConn=nil end
end
ToggleMachine.MouseButton1Click:Connect(function()
if justDragged() then return end
if machineRunning then stopMachine(); setMachineVisual(false)
else startMachine(); setMachineVisual(true) end
end)
setMachineVisual(false)
-- Machine 2000
local machine2Running, machine2Conn = false, nil
local mach2_acc, mach2_model, mach2_pts, mach2_idx = 0, nil, {}, 1
local function fireMachineRemote2()
if evMachine2 and evMachine2:IsA("RemoteEvent") then pcall(function() evMachine2:FireServer() end) end
end
local function startMachine2()
if machine2Running then return end
stopMineMach()
machine2Running = true
mach2_acc, mach2_model, mach2_pts, mach2_idx = 0, nil, {}, 1
machine2Conn = RunService.Heartbeat:Connect(function(dt)
if not machine2Running then return end
mach2_acc += dt
while mach2_acc >= INTERVAL do
mach2_acc -= INTERVAL
fireMachineRemote2()
if not mach2_model or not mach2_model.Parent then
mach2_model = getMachineModel()
mach2_pts, mach2_idx = {}, 1
end
if mach2_model then
if #mach2_pts == 0 then mach2_pts = getScreenPointsFromModel(mach2_model); mach2_idx = 1 end
local p = mach2_pts[mach2_idx]
if p then clickAt(p.X, p.Y) end
mach2_idx = (mach2_idx % math.max(1, #mach2_pts)) + 1
end
end
end)
end
local function stopMachine2()
if not machine2Running then return end
machine2Running = false
if machine2Conn then machine2Conn:Disconnect() machine2Conn=nil end
end
ToggleMachine2.MouseButton1Click:Connect(function()
if justDragged() then return end
if machine2Running then stopMachine2(); setMachine2Visual(false)
else startMachine2(); setMachine2Visual(true) end
end)
setMachine2Visual(false)
-- Rune (WIP) — 2/s
local runeRunning, runeConn = false, nil
local rune_acc = 0
local FORCE_RANGE = 1e6
local function getRunePart()
local up = workspace:FindFirstChild("UpgradeBoards")
if up and up:FindFirstChild("Runes") then
local p = up.Runes:FindFirstChild("CreateRune")
if p and p:IsA("BasePart") then return p end
end
for _, d in ipairs(workspace:GetDescendants()) do
if d.Name == "CreateRune" and d:IsA("BasePart") then return d end
end
end
local function onScreenPoint(part)
local sp, on = Camera:WorldToViewportPoint(part.Position)
if on then return Vector2.new(sp.X, sp.Y) end
end
local function setRuneVisual(on)
if on then
ToggleRune.Text = "Auto Rune (WIP): ON"
ToggleRune.BackgroundColor3 = Color3.fromRGB(100, 40, 160)
ToggleRune.TextColor3 = Color3.fromRGB(255,255,255)
else
ToggleRune.Text = "Auto Rune (WIP): OFF"
ToggleRune.BackgroundColor3 = Color3.fromRGB(30,30,60)
ToggleRune.TextColor3 = Color3.fromRGB(180,220,255)
end
end
local function startRune()
if runeRunning then return end
runeRunning = true
rune_acc = 0
runeConn = RunService.Heartbeat:Connect(function(dt)
if not runeRunning then return end
rune_acc += dt
while rune_acc >= RUNE_INTERVAL do
rune_acc -= RUNE_INTERVAL
if not evRune or not evRune.Parent then
local evs = ReplicatedStorage:FindFirstChild("Events"); evRune = evs and evs:FindFirstChild("CreateRune") or nil
end
if evRune then pcall(function() evRune:FireServer() end) end
local part = getRunePart()
if part then
local cd = part:FindFirstChildOfClass("ClickDetector")
if cd then pcall(function() cd.MaxActivationDistance = FORCE_RANGE end) end
local pt = onScreenPoint(part)
if pt then clickAt(pt.X, pt.Y) end
end
end
end)
end
local function stopRune()
if not runeRunning then return end
runeRunning = false
if runeConn then runeConn:Disconnect() runeConn=nil end
end
ToggleRune.MouseButton1Click:Connect(function()
if justDragged() then return end
if runeRunning then stopRune(); setRuneVisual(false)
else startRune(); setRuneVisual(true) end
end)
setRuneVisual(false)
-- Tungsten (WIP) — 1/s
local tungRunning, tungConn = false, nil
local tung_acc = 0
local function getTungstenPart()
local t = workspace:FindFirstChild("Tungsten")
if t then
local p = t:FindFirstChild("Prestige")
if p and p:IsA("BasePart") then return p end
end
for _, d in ipairs(workspace:GetDescendants()) do
if d.Name == "Prestige" and d:IsA("BasePart") and (not t or d:IsDescendantOf(t)) then
return d
end
end
end
local function setTungVisual(on)
if on then
ToggleTungsten.Text = "Auto Tungsten (WIP): ON"
ToggleTungsten.BackgroundColor3 = Color3.fromRGB(120, 60, 160)
ToggleTungsten.TextColor3 = Color3.fromRGB(255,255,255)
else
ToggleTungsten.Text = "Auto Tungsten (WIP): OFF"
ToggleTungsten.BackgroundColor3 = Color3.fromRGB(30,30,60)
ToggleTungsten.TextColor3 = Color3.fromRGB(180,220,255)
end
end
local function startTungsten()
if tungRunning then return end
tungRunning = true
tung_acc = 0
tungConn = RunService.Heartbeat:Connect(function(dt)
if not tungRunning then return end
tung_acc += dt
while tung_acc >= TUNG_INTERVAL do
tung_acc -= TUNG_INTERVAL
local part = getTungstenPart()
if not part then break end
local cd = part:FindFirstChildOfClass("ClickDetector")
if cd then pcall(function() cd.MaxActivationDistance = math.huge end) end
if not evPrestige or not evPrestige.Parent then
local evs = ReplicatedStorage:FindFirstChild("Events"); evPrestige = evs and evs:FindFirstChild("Prestige") or nil
end
if evPrestige then pcall(function() evPrestige:FireServer() end) end
local sp, on = Camera:WorldToViewportPoint(part.Position)
if on then clickAt(sp.X, sp.Y) end
end
end)
end
local function stopTungsten()
if not tungRunning then return end
tungRunning = false
if tungConn then tungConn:Disconnect() tungConn=nil end
end
ToggleTungsten.MouseButton1Click:Connect(function()
if justDragged() then return end
if tungRunning then stopTungsten(); setTungVisual(false)
else startTungsten(); setTungVisual(true) end
end)
setTungVisual(false)
------------------------- Footers
-- Common credit + warning (now with a newline)
local FooterCommon = Instance.new("TextLabel")
FooterCommon.BackgroundTransparency = 1
FooterCommon.Size = UDim2.new(1, -24, 0, 32)
FooterCommon.Position = UDim2.new(0, 12, 1, -36)
FooterCommon.TextWrapped = true
FooterCommon.Font = Enum.Font.GothamSemibold
FooterCommon.TextSize = 12
FooterCommon.TextColor3 = Color3.fromRGB(140, 190, 220)
FooterCommon.TextXAlignment = Enum.TextXAlignment.Left
FooterCommon.TextYAlignment = Enum.TextYAlignment.Top
FooterCommon.Text = "Credit: Chimera__Gaming |\n⚠ Adjusted click speeds to match server limits"
FooterCommon.Parent = Panel
-- Clickers-only note
local FooterClickers = Instance.new("TextLabel")
FooterClickers.BackgroundTransparency = 1
FooterClickers.Size = UDim2.new(1, -24, 0, 16)
FooterClickers.Position = UDim2.new(0, 12, 1, -54)
FooterClickers.Font = Enum.Font.GothamSemibold
FooterClickers.TextSize = 12
FooterClickers.TextColor3 = Color3.fromRGB(200, 170, 255)
FooterClickers.TextXAlignment = Enum.TextXAlignment.Left
FooterClickers.Text = "WIP: Clickers need player nearby"
FooterClickers.Visible = false
FooterClickers.Parent = Panel
------------------------- Tab wiring (with per-tab resize)
local function tweenPanelHeight(h)
TweenService:Create(Panel, TweenInfo.new(0.18, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.fromOffset(PANEL_W, h)}):Play()
end
local function showMain()
MainFrame.Visible = true
ClickersFrame.Visible = false
setActiveTab(TabMain, true)
setActiveTab(TabClickers, false)
FooterClickers.Visible = false
tweenPanelHeight(PANEL_H_MAIN)
end
local function showClickers()
MainFrame.Visible = false
ClickersFrame.Visible = true
setActiveTab(TabMain, false)
setActiveTab(TabClickers, true)
FooterClickers.Visible = true
tweenPanelHeight(PANEL_H_CLICKERS)
end
TabMain.MouseButton1Click:Connect(function() if justDragged() then return end showMain() end)
TabClickers.MouseButton1Click:Connect(function() if justDragged() then return end showClickers() end)
showMain()
------------------------- Minimize → 🚀 bubble
local Bubble
local savedPanelPos = Panel.Position
local function makeBubble()
if Bubble and Bubble.Parent then return end
Bubble = Instance.new("Frame")
Bubble.Name = "RocketBubble"
Bubble.Size = UDim2.fromOffset(46, 46)
Bubble.Position = UDim2.new(0.5, -23, 0.1, 0)
Bubble.BackgroundColor3 = Color3.fromRGB(20, 24, 44)
Bubble.BorderSizePixel = 0
Bubble.Parent = Gui
Instance.new("UICorner", Bubble).CornerRadius = UDim.new(1, 0)
local s = Instance.new("UIStroke", Bubble); s.Thickness = 2; s.Color = Color3.fromRGB(0, 200, 255)
local Icon = Instance.new("TextButton")
Icon.Size = UDim2.fromScale(1, 1)
Icon.BackgroundTransparency = 1
Icon.Text = "🚀"
Icon.Font = Enum.Font.GothamBold
Icon.TextSize = 26
Icon.TextColor3 = Color3.fromRGB(180, 230, 255)
Icon.AutoButtonColor = false
Icon.Parent = Bubble
-- drag bubble
local bDragging, bStart, bPos
local function mouseInBubble()
local m = UIS:GetMouseLocation()
local p = Bubble.AbsolutePosition
local s = Bubble.AbsoluteSize
return m.X >= p.X and m.X <= p.X + s.X and m.Y >= p.Y and m.Y <= p.Y + s.Y
end
UIS.InputBegan:Connect(function(i)
if i.UserInputType==Enum.UserInputType.MouseButton1 and Bubble and Bubble.Parent and mouseInBubble() then
bDragging = true; bStart = UIS:GetMouseLocation(); bPos = Bubble.Position
end
end)
UIS.InputChanged:Connect(function(i)
if bDragging and i.UserInputType==Enum.UserInputType.MouseMovement and Bubble and Bubble.Parent then
local m=UIS:GetMouseLocation(); local dx,dy=m.X-bStart.X, m.Y-bStart.Y
Bubble.Position = UDim2.new(bPos.X.Scale, bPos.X.Offset+dx, bPos.Y.Scale, bPos.Y.Offset+dy)
end
end)
UIS.InputEnded:Connect(function(i) if i.UserInputType==Enum.UserInputType.MouseButton1 then bDragging=false end end)
Icon.MouseButton1Click:Connect(function()
if Bubble then Bubble:Destroy() Bubble=nil end
Panel.Visible = true
Panel.Position = savedPanelPos
end)
end
Min.MouseButton1Click:Connect(function()
if justDragged() then return end
savedPanelPos = Panel.Position
Panel.Visible = false
makeBubble()
end)
------------------------- Close wiring
Close.MouseButton1Click:Connect(function()
if justDragged() then return end
collectorRunning = false; if collectorThread then task.cancel(collectorThread) collectorThread=nil end
local function safe(f) if f then f() end end
safe(function() miningConn:Disconnect() end)
safe(function() machineConn:Disconnect() end)
safe(function() machine2Conn:Disconnect() end)
safe(function() runeConn:Disconnect() end)
safe(function() tungConn:Disconnect() end)
afkRunning = false; if afkThread then task.cancel(afkThread) afkThread=nil end
wsRunning = false; if wsThread then task.cancel(wsThread) wsThread=nil end
local char = Player.Character or Player.CharacterAdded:Wait()
local hum = char:FindFirstChildOfClass("Humanoid"); if hum then hum.WalkSpeed = 16 end
Gui:Destroy()
end)
print(string.format(
"[Space Automation] Loaded. Clickers=%d CPS | Rune=%d/s | Tungsten=%d/s",
CLICKER_CPS, RUNE_CPS, TUNG_CPS
))[ View More ]
##