+1 to +1 Script (October 2026) – Simple AutoClick

PUBLISHEDUPDATED
1 Available ScriptFree

My thumb was about to fall off from tapping the screen until I found a better way to handle the +1 to +1 script.

The whole point here is to keep clicking for points, grab upgrades from the skill tree, and hit that rebirth button to get stronger. It is a pure numbers chase where you constantly want that next big multiplier.

If you want to skip the endless manual tapping and let the code do the heavy lifting, the working code below sets you up right.

+1 to +1 Script – Simple AutoClick & More

Simple AutoClick & MoreFree
Simple AutoClickAutoUpgrade
-- Combined Auto-Click + Auto-Upgrade + Auto-Rebirth GUI
-- Auto-Click: fires PlusOne.Action:FireServer("click", nil) every 500ms
-- Auto-Upgrade: buys affordable, unowned upgrades (EXCLUDES rebirth)
-- Auto-Rebirth: triggers rebirth via Action:FireServer("upgrade", "rebirth")

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer
if not player then
    local list = Players:GetPlayers()
    if #list > 0 then player = list[1] end
end
local playerGui = player and (player:FindFirstChild("PlayerGui") or player:WaitForChild("PlayerGui",5)) or StarterGui

local GUI_NAME = "AutoPlusOneGUI2"
local ex = playerGui:FindFirstChild(GUI_NAME); if ex then ex:Destroy() end
if StarterGui:FindFirstChild(GUI_NAME) and StarterGui ~= playerGui then StarterGui:FindFirstChild(GUI_NAME):Destroy() end

local PlusOne = ReplicatedStorage:WaitForChild("PlusOne", 5)
local Action = PlusOne and PlusOne:FindFirstChild("Action")

-- ===== Config =====
local CLICK_INTERVAL = 0.5
local UPGRADE_INTERVAL = 0.75
local REBIRTH_INTERVAL = 2.0
-- ==================

local suffixes = {K=1e3, M=1e6, B=1e9, T=1e12, Qa=1e15, Qi=1e18, Sx=1e21, Sp=1e24, Oc=1e27, No=1e30, Dc=1e33}
local function parseNum(s)
    if not s then return nil end
    s = tostring(s):gsub("%s","")
    local num, suf = s:match("^([%d%.]+)(%a*)$")
    if not num then return nil end
    local n = tonumber(num)
    if not n then return nil end
    if suf and suf ~= "" then
        local mult = suffixes[suf]
        if not mult then return nil end
        n = n * mult
    end
    return n
end

local function getBalanceText()
    local ui = playerGui:FindFirstChild("PlusOneUI")
    if ui then
        local bal = ui:FindFirstChild("UpgradeTree", true) and ui.UpgradeTree:FindFirstChild("Balance", true)
        if bal and bal:IsA("TextLabel") then return bal.Text end
        local total = ui:FindFirstChild("TopHUD", true) and ui.TopHUD:FindFirstChild("Total", true)
        if total and total:IsA("TextLabel") then return total.Text end
    end
    return nil
end

local function getBalance()
    return parseNum(getBalanceText())
end

-- GUI
local sg = Instance.new("ScreenGui"); sg.Name=GUI_NAME; sg.ResetOnSpawn=false; sg.IgnoreGuiInset=true; sg.ZIndexBehavior=Enum.ZIndexBehavior.Sibling; sg.Parent=playerGui
local frame = Instance.new("Frame"); frame.Size=UDim2.new(0,290,0,210); frame.Position=UDim2.new(0,12,0,12); frame.BackgroundColor3=Color3.fromRGB(30,30,42); frame.BorderSizePixel=0; frame.Active=true; frame.Parent=sg
local fc=Instance.new("UICorner"); fc.CornerRadius=UDim.new(0,10); fc.Parent=frame
local stroke=Instance.new("UIStroke"); stroke.Color=Color3.fromRGB(90,90,110); stroke.Thickness=1; stroke.Parent=frame

local dragging,ds,sp=false,nil,nil
frame.InputBegan:Connect(function(i) if i.UserInputType==Enum.UserInputType.MouseButton1 then dragging=true; ds=i.Position; sp=frame.Position end end)
UserInputService.InputChanged:Connect(function(i) if dragging and i.UserInputType==Enum.UserInputType.MouseMovement then local d=i.Position-ds; frame.Position=UDim2.new(sp.X.Scale,sp.X.Offset+d.X,sp.Y.Scale,sp.Y.Offset+d.Y) end end)
UserInputService.InputEnded:Connect(function(i) if i.UserInputType==Enum.UserInputType.MouseButton1 then dragging=false end end)

local title=Instance.new("TextLabel"); title.Size=UDim2.new(1,-10,0,24); title.Position=UDim2.new(0,8,0,6); title.BackgroundTransparency=1; title.Text="PlusOne Auto"; title.TextColor3=Color3.fromRGB(255,255,255); title.Font=Enum.Font.GothamBold; title.TextSize=15; title.TextXAlignment=Enum.TextXAlignment.Left; title.Parent=frame

local balLbl=Instance.new("TextLabel"); balLbl.Size=UDim2.new(1,-16,0,18); balLbl.Position=UDim2.new(0,8,0,30); balLbl.BackgroundTransparency=1; balLbl.Text="Balance: ..."; balLbl.TextColor3=Color3.fromRGB(180,220,180); balLbl.Font=Enum.Font.Gotham; balLbl.TextSize=12; balLbl.TextXAlignment=Enum.TextXAlignment.Left; balLbl.Parent=frame

local statusLbl=Instance.new("TextLabel"); statusLbl.Size=UDim2.new(1,-16,0,18); statusLbl.Position=UDim2.new(0,8,0,48); statusLbl.BackgroundTransparency=1; statusLbl.Text="Idle"; statusLbl.TextColor3=Color3.fromRGB(180,180,180); statusLbl.Font=Enum.Font.Gotham; statusLbl.TextSize=12; statusLbl.TextXAlignment=Enum.TextXAlignment.Left; statusLbl.Parent=frame

local function makeToggle(y, label)
    local btn=Instance.new("TextButton"); btn.Size=UDim2.new(1,-16,0,30); btn.Position=UDim2.new(0,8,0,y); btn.BackgroundColor3=Color3.fromRGB(220,60,60); btn.TextColor3=Color3.fromRGB(255,255,255); btn.Font=Enum.Font.GothamBold; btn.TextSize=14; btn.Text=label..": OFF"; btn.AutoButtonColor=true; btn.Parent=frame
    local c=Instance.new("UICorner"); c.CornerRadius=UDim.new(0,8); c.Parent=btn
    return btn
end

local clickBtn = makeToggle(72, "Auto-Click")
local upgBtn = makeToggle(108, "Auto-Upgrade")
local rebBtn = makeToggle(144, "Auto-Rebirth")

local clickOn, upgOn, rebOn = false, false, false

local function setToggle(btn, label, on)
    if on then
        btn.Text = label .. ": ON"
        btn.BackgroundColor3 = Color3.fromRGB(60,200,90)
    else
        btn.Text = label .. ": OFF"
        btn.BackgroundColor3 = Color3.fromRGB(220,60,60)
    end
end

-- Auto-click
local clickLoopRunning = false
local function startClick()
    if clickLoopRunning then return end
    clickLoopRunning = true
    task.spawn(function()
        while clickOn do
            if Action then pcall(function() Action:FireServer("click", nil) end) end
            task.wait(CLICK_INTERVAL)
        end
        clickLoopRunning = false
    end)
end

-- Auto-upgrade (excludes rebirth)
local upgLoopRunning = false
local function runUpgradePass()
    local ui = playerGui:FindFirstChild("PlusOneUI")
    if not ui then return 0 end
    local nodesFolder = ui:FindFirstChild("UpgradeTree", true) and ui.UpgradeTree:FindFirstChild("Viewport", true) and ui.UpgradeTree.Viewport:FindFirstChild("Nodes", true)
    if not nodesFolder then return 0 end
    local bal = getBalance()
    local bought = 0
    for _, node in ipairs(nodesFolder:GetChildren()) do
        if node:IsA("TextButton") and node.Name ~= "rebirth" then
            local purchased = node:FindFirstChild("Purchased")
            local owned = false
            if purchased and purchased:IsA("ImageLabel") and purchased.Visible then owned = true end
            local priceFrame = node:FindFirstChild("Price")
            local costLbl = priceFrame and priceFrame:FindFirstChild("Cost")
            local costText = costLbl and costLbl:IsA("TextLabel") and costLbl.Text or ""
            if costText == "OWNED" then owned = true end
            if not owned then
                local cost = parseNum(costText)
                if cost and bal and cost <= bal then
                    pcall(function() Action:FireServer("upgrade", node.Name) end)
                    bought = bought + 1
                end
            end
        end
    end
    return bought
end
local function startUpgrade()
    if upgLoopRunning then return end
    upgLoopRunning = true
    task.spawn(function()
        while upgOn do
            local ok, bought = pcall(runUpgradePass)
            if ok and bought and bought > 0 then
                statusLbl.Text = "Bought " .. bought .. " upgrade(s)"
            end
            task.wait(UPGRADE_INTERVAL)
        end
        upgLoopRunning = false
    end)
end

-- Auto-rebirth
local rebLoopRunning = false
local function startRebirth()
    if rebLoopRunning then return end
    rebLoopRunning = true
    task.spawn(function()
        while rebOn do
            if Action then
                pcall(function() Action:FireServer("upgrade", "rebirth") end)
            end
            task.wait(REBIRTH_INTERVAL)
        end
        rebLoopRunning = false
    end)
end

clickBtn.MouseButton1Click:Connect(function()
    clickOn = not clickOn
    setToggle(clickBtn, "Auto-Click", clickOn)
    if clickOn then startClick() end
end)
upgBtn.MouseButton1Click:Connect(function()
    upgOn = not upgOn
    setToggle(upgBtn, "Auto-Upgrade", upgOn)
    if upgOn then startUpgrade() end
end)
rebBtn.MouseButton1Click:Connect(function()
    rebOn = not rebOn
    setToggle(rebBtn, "Auto-Rebirth", rebOn)
    if rebOn then startRebirth() end
end)

task.spawn(function()
    while sg and sg.Parent do
        local bt = getBalanceText()
        if bt then balLbl.Text = "Balance: " .. bt end
        task.wait(0.5)
    end
end)

if not Action then statusLbl.Text = "Action remote not found!" end
print("[AutoPlusOneGUI2] Ready.")
Executor compatibility changes over time. Check current reports before testing.

Copy the code above into a compatible Roblox script executor if you choose to test it.

+1 to +1 Script Status

✓AvailabilityFree
$Price$0
◫CompatibilityDesktop & Mobile
★SafetyVerified

Roblox and game updates can affect compatibility, so the script’s status should be treated as temporary rather than guaranteed.

Frequently Asked Questions

What is a +1 to +1 script?

A +1 to +1 script is third-party Lua code intended to run alongside the Roblox game through a compatible script executor.

What features does this +1 to +1 script include?

Different scripts contain different code. This version includes: Simple AutoClick, AutoUpgrade.

How do you use the +1 to +1 script?

Pick a compatible executor such as Hydrogen, MacSploit, AWP.GG, Delta, Fluxus, Codex, launch Roblox and join the game, copy the complete Lua code from the script card above, paste it into the executor’s editor, and click Run or Execute. Compatibility changes over time, so a name here doesn’t guarantee current support.

Can a +1 to +1 script get your Roblox account banned?

Yes. Third-party scripts can violate Roblox rules and may put an account at risk. Only use code from a source you trust, never enter your Roblox password into a script or executor, and test on an alternate account first.

Does the +1 to +1 script work on mobile?

Check whether both the executor and the script support your device and the current Roblox version. Mobile executor support does not guarantee that every script will work.

Check out our Roblox Scripts hub and Roblox Games Directory for more.

Leave a Comment