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
-- 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.")Copy the code above into a compatible Roblox script executor if you choose to test it.
+1 to +1 Script Status
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.