Vertigo Auto Upgrade Auto Rebirth
Key Required

Vertigo Auto Upgrade Auto Rebirth

[🧙‍♂️UPD 2] Drillbit and Co.KoalaKoala 5.7K views 35 executesUpdated Jul 25, 2025
5.0/ 5(1 votes)
10100% Positive
Lua Script•491 lines (17203 chars)
--Locals
local cloneref = cloneref or function() return end
local Players = cloneref(game:GetService("Players"))
local Character = Players.LocalPlayer.Character
local ClientBuildings = workspace.ClientBuildings
local Ore = workspace.Ore
local PlotMod = require(game:GetService("ReplicatedStorage").Plot.PlotClient)
local HttpService = game:GetService("HttpService")
local GameFunsMod = require(game:GetService("ReplicatedStorage").Tool.Game.GameFunctions)
local UiSrcMod = require(game:GetService("ReplicatedStorage").UISrc.UIModules.PlotActions)
local AutoLoadedPlot = false

--Tables
local Settings = {AutoCrates=false,AutoAllUpgraders=false,AutoOpenCrates=false,AutoSelectedUpgrader=false,SelectedUpgrader="",AutoRebirth=false,PlotName="",AutoPlotUpgrade=false,AutoLoadLayout=false,AutoSellOres=false}
local Boxes = {["Regular Box"]=1,["Unreal Box"]=2,["Rebirth Box"]=3}
local PlotList = {}

--Init
assert(listfiles,"Executor Not Supported | Missing listfiles")
assert(readfile,"Executor Not Supported | Missing readfile")
assert(writefile,"Executor Not Supported | Missing writefile")
assert(getupvalues,"Executor Not Supported | Missing getupvalues")
assert(getupvalue,"Executor Not Supported | Missing getupvalue")

--[[
for i,v in pairs(listfiles("DrillBitAndCo")) do
    if isfile(v) then 
        local old = string.split(v,"DrillBitAndCo")[2]
        table.insert(PlotList,string.sub(old,2,string.len(old)-5)) 
    end
end]]


--Functions
local PlotPrices = getupvalues(UiSrcMod.Setup)[3].plotSize

function GetMyPlot() 
	return ClientBuildings:FindFirstChild(Players.LocalPlayer.Name)
end

function GetMyOres() 
	return Ore:FindFirstChild(Players.LocalPlayer.Name):GetChildren()
end

function GetMyUpgraders()
	local tbl = {}
	for i,v in pairs(GetMyPlot():GetChildren()) do
		if v:FindFirstChild("UpgradePart") then
			tbl[v.Name] = v.UpgradePart
		end
	end
	return tbl
end

function ItemLookup(Name)
    assert(Name,"No name provided [ItemLookup]")
    for i,v in pairs(game:GetService("ReplicatedStorage").Collection.Item:GetChildren()) do
        for i2,v2 in pairs(v:GetChildren()) do
            if v2:IsA("ModuleScript") and Name == v2.Name then
                return v2,v2:GetAttribute("id")
            end
        end
    end
    return "",0
end
function ItemLookupId(Id)
    assert(Id,"No id provided [ItemLookup]")
    for i,v in pairs(game:GetService("ReplicatedStorage").Collection.Item:GetChildren()) do
        for i2,v2 in pairs(v:GetChildren()) do
            if v2:IsA("ModuleScript") and Id == v2:GetAttribute("id") then
                return v2,v2:GetAttribute("id")
            end
        end
    end
    return "",0
end

function GetSelectedUpgrader(UpgraderName)
    local Upgrader,UpgraderId = ItemLookup(UpgraderName)
    if not Upgrader.Name == UpgraderName then return end
    for i,v in pairs(GetMyPlot():GetChildren()) do
        if v:GetAttribute("itemId") == UpgraderId then
            return v:FindFirstChild("UpgradePart")
        end
    end
end

function PlaceItem(Id,CellData,Rotation)
    local BuildId = getupvalue(PlotMod.PlaceItems,16)
    game:GetService("ReplicatedStorage").Plot.Remote.RequestPlace:InvokeServer(BuildId+1,{id=Id,frontLeftCell=CellData,rotation=Rotation})
    setupvalue(PlotMod.PlaceItems,16,BuildId+1)
end

function SaveMyPlot(PlotName)
    local tbl = {}
    for i,v in pairs(GetMyPlot():GetChildren()) do
        if v:IsA("Model") then
            table.insert(tbl,{Id=v:GetAttribute("itemId"),CellData=v:GetAttribute("frontLeftCell"),Rotation=v:GetAttribute("rotation")})
        end
    end
    local PlotEncoded = HttpService:JSONEncode(tbl)
    writefile("DrillBitAndCo/"..PlotName..".json",PlotEncoded)
end
function LoadMyPlot(PlotName)
    if not isfile("DrillBitAndCo/"..PlotName..".json") then return end
    local Decoded = HttpService:JSONDecode(readfile("DrillBitAndCo/"..PlotName..".json"))

    for i,v in pairs(Decoded) do
        PlaceItem(v.Id,v.CellData,v.Rotation)
    end
end
--Locals
local cloneref = cloneref or function() return end
local Players = cloneref(game:GetService("Players"))
local Character = Players.LocalPlayer.Character
local ClientBuildings = workspace.ClientBuildings
local Ore = workspace.Ore
local PlotMod = require(game:GetService("ReplicatedStorage").Plot.PlotClient)
local HttpService = game:GetService("HttpService")
local GameFunsMod = require(game:GetService("ReplicatedStorage").Tool.Game.GameFunctions)
local UiSrcMod = require(game:GetService("ReplicatedStorage").UISrc.UIModules.PlotActions)
local AutoLoadedPlot = false

--Tables
local Settings = {AutoCrates=false,AutoAllUpgraders=false,AutoOpenCrates=false,AutoSelectedUpgrader=false,SelectedUpgrader="",AutoRebirth=false,PlotName="",AutoPlotUpgrade=false,AutoLoadLayout=false}
local Boxes = {["Regular Box"]=1,["Unreal Box"]=2,["Rebirth Box"]=3}
local PlotList = {}

--Init
assert(listfiles,"Executor Not Supported | Missing listfiles")
assert(readfile,"Executor Not Supported | Missing readfile")
assert(writefile,"Executor Not Supported | Missing writefile")
assert(getupvalues,"Executor Not Supported | Missing getupvalues")
assert(getupvalue,"Executor Not Supported | Missing getupvalue")

makefolder("DrillBitAndCo")
for i,v in pairs(listfiles("DrillBitAndCo")) do
    if isfile(v) then 
        local old = string.split(v,"DrillBitAndCo")[2]
        table.insert(PlotList,string.sub(old,2,string.len(old)-5)) 
    end
end


--Functions
local PlotPrices = getupvalues(UiSrcMod.Setup)[3].plotSize

function GetMyPlot() 
	return ClientBuildings:FindFirstChild(Players.LocalPlayer.Name)
end

function GetMyOres() 
	return Ore:FindFirstChild(Players.LocalPlayer.Name):GetChildren()
end

function GetMyUpgraders()
	local tbl = {}
	for i,v in pairs(GetMyPlot():GetChildren()) do
		if v:FindFirstChild("UpgradePart") then
			tbl[v.Name] = v.UpgradePart
		end
	end
	return tbl
end

function ItemLookup(Name)
    assert(Name,"No name provided [ItemLookup]")
    for i,v in pairs(game:GetService("ReplicatedStorage").Collection.Item:GetChildren()) do
        for i2,v2 in pairs(v:GetChildren()) do
            if v2:IsA("ModuleScript") and Name == v2.Name then
                return v2,v2:GetAttribute("id")
            end
        end
    end
    return "",0
end
function ItemLookupId(Id)
    assert(Id,"No id provided [ItemLookup]")
    for i,v in pairs(game:GetService("ReplicatedStorage").Collection.Item:GetChildren()) do
        for i2,v2 in pairs(v:GetChildren()) do
            if v2:IsA("ModuleScript") and Id == v2:GetAttribute("id") then
                return v2,v2:GetAttribute("id")
            end
        end
    end
    return "",0
end

function GetSelectedUpgrader(UpgraderName)
    local Upgrader,UpgraderId = ItemLookup(UpgraderName)
    if not Upgrader.Name == UpgraderName then return end
    for i,v in pairs(GetMyPlot():GetChildren()) do
        if v:GetAttribute("itemId") == UpgraderId then
            return v:FindFirstChild("UpgradePart")
        end
    end
end

function PlaceItem(Id,CellData,Rotation)
    local BuildId = getupvalue(PlotMod.PlaceItems,16)
    game:GetService("ReplicatedStorage").Plot.Remote.RequestPlace:InvokeServer(BuildId+1,{id=Id,frontLeftCell=CellData,rotation=Rotation})
    setupvalue(PlotMod.PlaceItems,16,BuildId+1)
end

function SaveMyPlot(PlotName)
    local tbl = {}
    for i,v in pairs(GetMyPlot():GetChildren()) do
        if v:IsA("Model") then
            table.insert(tbl,{Id=v:GetAttribute("itemId"),CellData=v:GetAttribute("frontLeftCell"),Rotation=v:GetAttribute("rotation")})
        end
    end
    local PlotEncoded = HttpService:JSONEncode(tbl)
    writefile("DrillBitAndCo/"..PlotName..".json",PlotEncoded)
end
function LoadMyPlot(PlotName)
    if not isfile("DrillBitAndCo/"..PlotName..".json") then return end
    local Decoded = HttpService:JSONDecode(readfile("DrillBitAndCo/"..PlotName..".json"))

    for i,v in pairs(Decoded) do
        PlaceItem(v.Id,v.CellData,v.Rotation)
    end
end

function CategorizeUpgraders()
	local withRange = {}
	local noRange = {}
	local special = {}
	local oreWash = nil
	for _, model in pairs(GetMyPlot():GetChildren()) do
		if model:IsA("Model") and model:FindFirstChild("UpgradePart") and model:GetAttribute("itemId") then
			local Module, _ = ItemLookupId(model:GetAttribute("itemId"))
			local upgradePart = model.UpgradePart
			if Module then
				module = require(Module)
				local isSpecial = rawget(module, "upgradeFunction")
				local range = rawget(module, "upgradeRange")

				if string.find(Module.Name:lower(), "wash") then
					oreWash = upgradePart
				elseif isSpecial then
					table.insert(special, {Part = upgradePart, Model = model})
				elseif range then
					table.insert(withRange, {
						Part = upgradePart,
						Model = model,
						Min = range[1] or 0,
						Max = range[2]
					})
				else
					table.insert(noRange, {Part = upgradePart, Model = model})
				end
			end
		end
	end
	table.sort(withRange, function(a, b)
		return a.Max > b.Max
	end)

	return withRange, noRange, special, oreWash
end

function RunSmartUpgraderLoop()
	local withRange, noRange, special, oreWash = CategorizeUpgraders()
	while Settings.AutoAllUpgraders == true do
		task.wait()
		for _, ore in pairs(GetMyOres()) do
			local value = ore:GetAttribute("Value") or 0
			local upgraded = false
			for _, upgrader in pairs(withRange) do
				if value >= upgrader.Min and value <= upgrader.Max then
					firetouchinterest(upgrader.Part, ore, 0)
					firetouchinterest(upgrader.Part, ore, 1)
					upgraded = true
				end
			end
			if not upgraded then
				for _, upgrader in pairs(noRange) do
					firetouchinterest(upgrader.Part, ore, 0)
					firetouchinterest(upgrader.Part, ore, 1)
				end
			end
			for _, upgrader in pairs(special) do
				firetouchinterest(upgrader.Part, ore, 0)
				firetouchinterest(upgrader.Part, ore, 1)
                if oreWash then
                    firetouchinterest(oreWash, ore, 0)
                    firetouchinterest(oreWash, ore, 1)
                end
			end
		end
	end
end

local repo = 'https://raw.githubusercontent.com/violin-suzutsuki/LinoriaLib/main/'

local Library = loadstring(game:HttpGet(repo .. 'Library.lua'))()
local ThemeManager = loadstring(game:HttpGet(repo .. 'addons/ThemeManager.lua'))()
local SaveManager = loadstring(game:HttpGet(repo .. 'addons/SaveManager.lua'))()

local Window = Library:CreateWindow({
    Title = 'Drill Bit And Co | Vertigo',
    Center = true,
    AutoShow = true,
    TabPadding = 8,
    MenuFadeTime = 0.2
})

local Tabs = {
    Main = Window:AddTab('Main'),
    ['UI Settings'] = Window:AddTab('UI Settings'),
}

local OresGroupBox = Tabs.Main:AddLeftGroupbox('Ores')
local CratesGroupBox = Tabs.Main:AddLeftGroupbox('Crates')
local RebirthGroupBox = Tabs.Main:AddRightGroupbox('Rebirthing')
local PlotGroupBox = Tabs.Main:AddRightGroupbox('Plot')

local PlotNameText = PlotGroupBox:AddInput("PlotName",{Text = "Plot Name";Default = "MainPlot",Numeric = false,Finished = true})
PlotNameText:OnChanged(function(Value)
    Settings.PlotName = Value
end)
PlotGroupBox:AddButton({Text = "Save Plot",Func = function()
    SaveMyPlot(Settings.PlotName)
end})

local PlotSelectedDrop = PlotGroupBox:AddDropdown("PlotNameSelected",{Text = "Plot", AllowNull = true,Values = PlotList,Multi = false,Default=PlotList[1]})
PlotSelectedDrop:OnChanged(function(Value)
    Settings.PlotName = Value
end)
PlotGroupBox:AddButton({Text = "Load Plot",Func = function()
    LoadMyPlot(Settings.PlotName)
end})

OresGroupBox:AddToggle('AutoOres', {
    Text = 'Auto Upgrade All Ores',
    Default = false,
    Callback = function(Value)
        Settings.AutoAllUpgraders = Value
        task.spawn(function()
            RunSmartUpgraderLoop(Settings.AutoSellOres)
        end)
    end
})

local SelectedUpgrader = OresGroupBox:AddInput("SelectedUpgrader",{Text = "Selected Upgrader";Default = "Upgrader",Numeric = false,Finished = true})
SelectedUpgrader:OnChanged(function(Value)
    Settings.SelectedUpgrader = Value
end)

OresGroupBox:AddToggle('AutoOreSelected', {
    Text = 'Auto Upgrade Selected',
    Default = false,
    Callback = function(Value)
        Settings.AutoSelectedUpgrader = Value
        task.spawn(function()
            local Upgrader = GetSelectedUpgrader(Settings.SelectedUpgrader)
            while Settings.AutoSelectedUpgrader == true do task.wait()
                for i,v in pairs(GetMyOres()) do
                    if v and Upgrader ~= nil then
                        firetouchinterest(Upgrader,v,0)
                        firetouchinterest(Upgrader,v,1) 
                    end
                end
            end
        end)
    end
})

OresGroupBox:AddButton({Text = "Sell Ores",Func = function()
    for i,v in pairs(GetMyOres()) do
        task.spawn(function()
            for i,v in pairs(GetMyOres()) do
                for i2,v2 in pairs(GetMyPlot():GetChildren()) do
                    if v2:FindFirstChild("FurnacePart") then
                        firetouchinterest(v2.FurnacePart, v, 0)
                        firetouchinterest(v2.FurnacePart, v, 1)
                    end
                end
            end
        end)
    end
end,})

RebirthGroupBox:AddToggle('AutoRebirth', {
    Text = 'Auto Rebirth',
    Default = false,
    Callback = function(value)
        Settings.AutoRebirth = value
        task.spawn(function()
            while Settings.AutoRebirth == true do task.wait()
                if Players.LocalPlayer:GetAttribute("cash") >= GameFunsMod.GetRebirthPrice(Players.LocalPlayer.leaderstats.Life.Value) then
                    game:GetService("ReplicatedStorage"):WaitForChild("Remote"):WaitForChild("Rebirth"):InvokeServer()
                    AutoLoadedPlot = false
                end
            end
        end)
    end
})
RebirthGroupBox:AddToggle('AutoLoadLayout', {
    Text = 'Auto Load Layout',
    Tooltip = "Loads Selected layout when the plot size is max",
    Default = false,
    Callback = function(value)
        Settings.AutoLoadLayout = value
        task.spawn(function()
            while Settings.AutoLoadLayout == true do task.wait(1)
                if Players.LocalPlayer:GetAttribute("plotSize") == 10 and AutoLoadedPlot == false then
                    AutoLoadedPlot = true
                    game:GetService("ReplicatedStorage").Plot.Remote.WithdrawAll:FireServer()
                    LoadMyPlot(Settings.PlotName)
                end
            end
        end)
    end
})
RebirthGroupBox:AddDivider()
RebirthGroupBox:AddToggle('AutoPlotUpgrade', {
    Text = 'Auto Plot Size Upgrade',
    Default = false,
    Callback = function(value)
        Settings.AutoPlotUpgrade = value
        task.spawn(function()
            while Settings.AutoPlotUpgrade == true do task.wait(.2)
                if Players.LocalPlayer:GetAttribute("plotSize") == 10 then return end
                if Players.LocalPlayer:GetAttribute("cash") >= PlotPrices[Players.LocalPlayer:GetAttribute("plotSize")+1] then
                    game:GetService("ReplicatedStorage"):WaitForChild("Remote"):WaitForChild("PurchaseMasteryUpgrade"):InvokeServer("plotSize")
                end
            end
        end)
    end
})

CratesGroupBox:AddToggle('AutoCrates', {
    Text = 'Crate Farm',
    Default = false,
    Callback = function(value)
        for i,v in pairs(workspace.Crates:getChildren()) do
            if v:FindFirstChild("Hitbox") and value == true then
                firetouchinterest(v.Hitbox, Character.HumanoidRootPart, 0)
                firetouchinterest(v.Hitbox, Character.HumanoidRootPart, 1)
            end
        end
        Settings.AutoCrates = value
    end
})
CratesGroupBox:AddToggle('AutoOpenCrates', {
    Text = 'Open Crates',
    Default = false,
    Callback = function(value)
        Settings.AutoOpenCrates = value
        task.spawn(function() 
            while Settings.AutoOpenCrates == true do task.wait(.2) 
                for i=0,3 do
                    game:GetService("ReplicatedStorage"):WaitForChild("Remote"):WaitForChild("UnboxBox"):InvokeServer(i)
                end
            end
        end)
    end
})




Library:SetWatermarkVisibility(false)
Library.KeybindFrame.Visible = false;
Library:OnUnload(function()
    Library.Unloaded = true
end)

-- UI Settings
local MenuGroup = Tabs['UI Settings']:AddLeftGroupbox('Menu')
MenuGroup:AddButton('Unload', function() Library:Unload() end)
MenuGroup:AddLabel('Menu bind'):AddKeyPicker('MenuKeybind', { Default = 'End', NoUI = true, Text = 'Menu keybind' })
Library.ToggleKeybind = Options.MenuKeybind
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ 'MenuKeybind' })
ThemeManager:SetFolder('DrillBitAndCo')
SaveManager:SetFolder('DrillBitAndCo/DrillBitAndCo')
SaveManager:BuildConfigSection(Tabs['UI Settings'])
ThemeManager:ApplyToTab(Tabs['UI Settings'])
SaveManager:LoadAutoloadConfig()

--Connections
workspace.Crates.ChildAdded:Connect(function(box)
	if box and box:FindFirstChild("Hitbox") and Settings.AutoCrates == true then 
		firetouchinterest(box.Hitbox, Character.HumanoidRootPart, 0)
        firetouchinterest(box.Hitbox, Character.HumanoidRootPart, 1)
	end
end)

Features & Information

All credits goto scriptblox user: VertigoCool So the script is open src but i did remove the part that doesn't work with certain executors so yw Auto Upgrade Auto Upgrade Selected Auto Rebirth Auto Crate Farm Auto Open All Crates Loading / Saving Plots Auto Upgrade Plot Auto Load Plot After Max Land

Community Comments (3)

regor0076regor0076Jul 27, 2025

script dont work in jjsploi:(

notsensativeusernamnotsensativeusernamJul 28, 2025(edited)

can you add mobile support please? the ui is too big i cant see the screen

ImDeadInside77ImDeadInside77Aug 24, 2025

@VertigoCool it wont load for me

More Scripts for [🧙‍♂️UPD 2] Drillbit and Co.