
Key Required

--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)
script dont work in jjsploi:(
can you add mobile support please? the ui is too big i cant see the screen
@VertigoCool it wont load for me