
Key Required

-- ============================================
-- AUTO MINE GUI SCRIPT v2.8 — Infinite Drill Simulator
-- ============================================
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
player.CharacterAdded:Connect(function(char)
character = char
end)
-- ============================================
-- СОХРАНЕНИЕ НАСТРОЕК
-- ============================================
local SAVE_FILE = "InfiniteDrillSimulator_Settings.json"
local function saveSettings()
local data = {
toggleKey = State and State.toggleKey and State.toggleKey.Name or "RightControl",
mineDelay = State and State.mineDelay or 0,
clickDelay = State and State.clickDelay or 0.05,
autoClaimEnabled = State and State.autoClaimEnabled or true,
teleportToClick = State and State.teleportToClick or true,
useVipPump = State and State.useVipPump or false,
selectedZone = State and State.selectedZone or nil,
selectedMine = State and State.selectedMine or nil,
}
pcall(function()
writefile(SAVE_FILE, game:GetService("HttpService"):JSONEncode(data))
end)
end
local function loadSettings()
local ok, content = pcall(function()
return readfile(SAVE_FILE)
end)
if ok and content and content ~= "" then
local ok2, data = pcall(function()
return game:GetService("HttpService"):JSONDecode(content)
end)
if ok2 and data then return data end
end
return {}
end
local savedSettings = loadSettings()
local State = {
selectedZone = savedSettings.selectedZone or nil,
selectedMine = savedSettings.selectedMine or nil,
drillObject = nil,
replicaId = nil,
autoDetectEnabled = false,
autoMineEnabled = false,
autoClickEnabled = false,
autoClaimEnabled = savedSettings.autoClaimEnabled ~= nil and savedSettings.autoClaimEnabled or true,
teleportToClick = savedSettings.teleportToClick ~= nil and savedSettings.teleportToClick or true,
useVipPump = savedSettings.useVipPump or false,
detectConnection = nil,
mineDelay = savedSettings.mineDelay or 0,
clickDelay = savedSettings.clickDelay or 0.05,
currentClickRid = nil,
currentClickObjRef = nil,
currentTeleportTarget = nil,
toggleKey = Enum.KeyCode[savedSettings.toggleKey or "RightControl"] or Enum.KeyCode.RightControl,
}
local remoteSignal = ReplicatedStorage:WaitForChild("ReplicaRemoteEvents"):WaitForChild("Replica_ReplicaSignal")
-- ============================================
-- УТИЛИТЫ
-- ============================================
local function getReplicaIdFromObject(obj)
if not obj then return nil end
local rid = obj:GetAttribute("_ReplicaId")
if rid then return rid end
for _, child in pairs(obj:GetChildren()) do
if (child:IsA("IntValue") or child:IsA("NumberValue")) then
if child.Name == "_ReplicaId" or child.Name == "ReplicaId" then
return child.Value
end
end
end
local nameNum = tonumber(obj.Name)
if nameNum then return nameNum end
return nil
end
local function teleportTo(position)
local char = player.Character
if not char then return end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return end
hrp.CFrame = CFrame.new(position + Vector3.new(0, 3, 0))
end
local function getObjectPosition(obj)
if not obj then return nil end
if obj:IsA("BasePart") then return obj.Position end
for _, desc in pairs(obj:GetDescendants()) do
if desc:IsA("BasePart") then return desc.Position end
end
return nil
end
local function getPlayerPosition()
local char = player.Character
if not char then return nil end
local hrp = char:FindFirstChild("HumanoidRootPart")
if not hrp then return nil end
return hrp.Position
end
local function getDistanceTo(position)
local playerPos = getPlayerPosition()
if not playerPos or not position then return math.huge end
return (playerPos - position).Magnitude
end
local function getDistanceToObject(obj)
return getDistanceTo(getObjectPosition(obj))
end
-- ============================================
-- ДРЕЛЬ (ИСПРАВЛЕНО v2)
-- ============================================
local function findPlayerDrill()
local char = player.Character
if not char then return nil end
local humanoid = char:FindFirstChildOfClass("Humanoid")
local hrp = char:FindFirstChild("HumanoidRootPart")
-- Собираем все дрели в workspace
local allDrills = {}
for _, obj in pairs(workspace:GetChildren()) do
if obj:IsA("Model") or obj:IsA("Folder") then
local hasSeatPart = obj:FindFirstChild("SeatPart")
local hasDrillBody = obj:FindFirstChild("DrillBody")
local hasAnimations = obj:FindFirstChild("Animations")
local hasBlocksFolder = obj:FindFirstChild("BlocksFolder")
if hasDrillBody or (hasSeatPart and hasAnimations) or (hasSeatPart and hasBlocksFolder) then
table.insert(allDrills, obj)
end
end
end
if #allDrills == 0 then return nil end
-- СПОСОБ 1: Humanoid.SeatPart — на чём сидит игрок
if humanoid and humanoid.Sit then
local seatPart = humanoid.SeatPart
if seatPart then
for _, drill in ipairs(allDrills) do
if seatPart:IsDescendantOf(drill) then
return drill
end
local drillSeat = drill:FindFirstChild("SeatPart")
if drillSeat then
if drillSeat == seatPart then
return drill
end
if drillSeat:IsA("Model") or drillSeat:IsA("Folder") then
if seatPart:IsDescendantOf(drillSeat) then
return drill
end
end
end
end
end
end
-- СПОСОБ 2: Проверяем Occupant у всех Seat внутри дрели
if humanoid then
for _, drill in ipairs(allDrills) do
local seatFolder = drill:FindFirstChild("SeatPart")
if seatFolder then
-- SeatPart сам может быть Seat
if (seatFolder:IsA("Seat") or seatFolder:IsA("VehicleSeat")) then
if seatFolder.Occupant == humanoid then
return drill
end
end
-- Или внутри SeatPart есть Seat
for _, desc in pairs(seatFolder:GetDescendants()) do
if (desc:IsA("Seat") or desc:IsA("VehicleSeat")) then
if desc.Occupant == humanoid then
return drill
end
end
end
end
-- Ищем Seat где угодно внутри дрели
for _, desc in pairs(drill:GetDescendants()) do
if (desc:IsA("Seat") or desc:IsA("VehicleSeat")) then
if desc.Occupant == humanoid then
return drill
end
end
end
end
end
-- СПОСОБ 3: Weld — персонаж приварен к дрели через WeldConstraint/Weld
if hrp then
for _, drill in ipairs(allDrills) do
for _, desc in pairs(drill:GetDescendants()) do
if desc:IsA("WeldConstraint") or desc:IsA("Weld") then
if desc.Part0 == hrp or desc.Part1 == hrp then
return drill
end
-- Проверяем любую часть персонажа
for _, charPart in pairs(char:GetChildren()) do
if charPart:IsA("BasePart") then
if desc.Part0 == charPart or desc.Part1 == charPart then
return drill
end
end
end
end
end
end
end
-- СПОСОБ 4: Персонаж внутри дрели
if char.Parent then
for _, drill in ipairs(allDrills) do
if char:IsDescendantOf(drill) then
return drill
end
end
end
-- СПОСОБ 5: Ближайшая дрель по расстоянию
if hrp then
local closestDrill = nil
local closestDist = math.huge
for _, drill in ipairs(allDrills) do
for _, desc in pairs(drill:GetDescendants()) do
if desc:IsA("BasePart") then
local dist = (hrp.Position - desc.Position).Magnitude
if dist < closestDist then
closestDist = dist
closestDrill = drill
end
break
end
end
end
if closestDrill and closestDist < 50 then
return closestDrill
end
end
if #allDrills == 1 then
return allDrills[1]
end
return nil
end
-- ============================================
-- ЗОНЫ / ШАХТЫ / БЛОКИ
-- ============================================
local function getZones()
local zones = {}
local zonesFolder = workspace:FindFirstChild("Zones")
if zonesFolder then
for _, zone in pairs(zonesFolder:GetChildren()) do
if zone:IsA("Folder") or zone:IsA("Model") then
table.insert(zones, zone.Name)
end
end
end
table.sort(zones, function(a, b)
local na, nb = tonumber(a), tonumber(b)
if na and nb then return na < nb end
return a < b
end)
return zones
end
local function getMines(zoneName)
local mines = {}
local zonesFolder = workspace:FindFirstChild("Zones")
if not zonesFolder then return mines end
local zone = zonesFolder:FindFirstChild(tostring(zoneName))
if not zone then return mines end
local minesFolder = zone:FindFirstChild("Mines")
if not minesFolder then return mines end
for _, mine in pairs(minesFolder:GetChildren()) do
table.insert(mines, mine.Name)
end
table.sort(mines, function(a, b)
local na, nb = tonumber(a), tonumber(b)
if na and nb then return na < nb end
return a < b
end)
return mines
end
local function getBlocks(zoneName, mineName)
local blocks = {}
local zonesFolder = workspace:FindFirstChild("Zones")
if not zonesFolder then return blocks end
local zone = zonesFolder:FindFirstChild(tostring(zoneName))
if not zone then return blocks end
local minesFolder = zone:FindFirstChild("Mines")
if not minesFolder then return blocks end
local mine = minesFolder:FindFirstChild(tostring(mineName))
if not mine then return blocks end
local blockModels = mine:FindFirstChild("BlockModels")
if not blockModels then return blocks end
for _, block in pairs(blockModels:GetChildren()) do
table.insert(blocks, block.Name)
end
return blocks
end
local function getMineObject(zoneName, mineName)
local zonesFolder = workspace:FindFirstChild("Zones")
if not zonesFolder then return nil end
local zone = zonesFolder:FindFirstChild(tostring(zoneName))
if not zone then return nil end
local minesFolder = zone:FindFirstChild("Mines")
if not minesFolder then return nil end
return minesFolder:FindFirstChild(tostring(mineName))
end
local function getWinKeyReplicaId(zoneName, mineName)
local mine = getMineObject(zoneName, mineName)
if not mine then return nil end
local winKey = mine:FindFirstChild("WinKeyModel")
if not winKey then return nil end
return getReplicaIdFromObject(winKey)
end
-- ============================================
-- ПОИСК БЛИЖАЙШЕГО CLICK ОБЪЕКТА
-- ============================================
local function findNearestClickObject(useVip)
local playerPos = getPlayerPosition()
if not playerPos then return nil, nil, nil, nil end
local zonesFolder = workspace:FindFirstChild("Zones")
if not zonesFolder then return nil, nil, nil, nil end
local closestClickObj = nil
local closestTeleportTarget = nil
local closestRid = nil
local closestDist = math.huge
local closestName = nil
for _, zone in pairs(zonesFolder:GetChildren()) do
if zone:IsA("Folder") or zone:IsA("Model") then
local utility = zone:FindFirstChild("Utility")
if utility then
for _, child in pairs(utility:GetChildren()) do
if child:IsA("Folder") or child:IsA("Model") then
local powerClickArea = child:FindFirstChild("PowerClickArea")
if powerClickArea then
local clickArea = powerClickArea:FindFirstChild("ClickArea")
local targetForDist = clickArea or powerClickArea
local objPos = getObjectPosition(targetForDist)
if objPos then
local dist = (playerPos - objPos).Magnitude
if dist < closestDist then
local rid = getReplicaIdFromObject(powerClickArea)
if not rid and clickArea then rid = getReplicaIdFromObject(clickArea) end
if rid then
closestClickObj = powerClickArea
closestTeleportTarget = clickArea or powerClickArea
closestRid = rid
closestDist = dist
closestName = zone.Name .. "/PowerClickArea"
end
end
end
end
if useVip then
local vipPower = child:FindFirstChild("VIPPower")
if vipPower then
local objPos = getObjectPosition(vipPower)
if objPos then
local dist = (playerPos - objPos).Magnitude
if dist < closestDist then
local rid = getReplicaIdFromObject(vipPower)
if rid then
closestClickObj = vipPower
closestTeleportTarget = vipPower
closestRid = rid
closestDist = dist
closestName = zone.Name .. "/VIPPower"
end
end
end
end
end
end
end
for _, desc in pairs(utility:GetDescendants()) do
if desc.Name == "ClickArea" and desc:IsA("BasePart") then
local parent = desc.Parent
local objPos = desc.Position
local dist = (playerPos - objPos).Magnitude
if dist < closestDist then
local rid = getReplicaIdFromObject(parent) or getReplicaIdFromObject(desc)
if rid then
closestClickObj = parent
closestTeleportTarget = desc
closestRid = rid
closestDist = dist
closestName = zone.Name .. "/" .. (parent and parent.Name or "ClickArea")
end
end
end
end
end
end
end
return closestClickObj, closestTeleportTarget, closestRid, closestName, closestDist
end
-- ============================================
-- ОПРЕДЕЛЕНИЕ ЗОНЫ
-- ============================================
local function detectPlayerZoneAndMine()
local playerPos = getPlayerPosition()
if not playerPos then return nil, nil end
local zonesFolder = workspace:FindFirstChild("Zones")
if not zonesFolder then return nil, nil end
local candidates = {}
for _, zone in pairs(zonesFolder:GetChildren()) do
local minesFolder = zone:FindFirstChild("Mines")
if minesFolder then
for _, mine in pairs(minesFolder:GetChildren()) do
local blockModels = mine:FindFirstChild("BlockModels")
if blockModels then
local minDist = math.huge
for _, p in pairs(blockModels:GetDescendants()) do
if p:IsA("BasePart") then
local dist = (playerPos - p.Position).Magnitude
if dist < minDist then minDist = dist end
end
end
if minDist < math.huge then
table.insert(candidates, { zone = zone.Name, mine = mine.Name, dist = minDist })
end
end
end
end
end
table.sort(candidates, function(a, b) return a.dist < b.dist end)
if #candidates > 0 then return candidates[1].zone, candidates[1].mine end
return nil, nil
end
-- ============================================
-- СОБЫТИЯ
-- ============================================
local function fireMineDamage(blockName)
if not State.selectedZone or not State.selectedMine or not State.replicaId then return false end
local mine = getMineObject(State.selectedZone, State.selectedMine)
if not mine then return false end
pcall(function()
remoteSignal:FireServer(State.replicaId, "DamageMine", mine, tostring(blockName))
end)
return true
end
local function fireWinClaimed(zoneName, mineName)
local winRid = getWinKeyReplicaId(zoneName, mineName)
if not winRid then return false, nil end
pcall(function()
remoteSignal:FireServer(winRid, "FireClaimed")
end)
return true, winRid
end
local function fireClick(replicaId)
if not replicaId then return false end
pcall(function()
remoteSignal:FireServer(replicaId, "Click")
end)
return true
end
-- ============================================
-- GUI СОЗДАНИЕ
-- ============================================
if player.PlayerGui:FindFirstChild("AutoMineGUI") then
player.PlayerGui:FindFirstChild("AutoMineGUI"):Destroy()
end
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "AutoMineGUI"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = player.PlayerGui
-- МИНИ КНОПКА
local miniButton = Instance.new("TextButton")
miniButton.Name = "MiniButton"
miniButton.Size = UDim2.new(0, 48, 0, 48)
miniButton.Position = UDim2.new(0, 10, 0.5, -24)
miniButton.BackgroundColor3 = Color3.fromRGB(30, 30, 45)
miniButton.Text = "⛏️"
miniButton.TextSize = 24
miniButton.Font = Enum.Font.GothamBold
miniButton.TextColor3 = Color3.fromRGB(80, 180, 255)
miniButton.BorderSizePixel = 0
miniButton.Active = true
miniButton.Draggable = true
miniButton.Visible = false
miniButton.Parent = screenGui
Instance.new("UICorner", miniButton).CornerRadius = UDim.new(0, 10)
Instance.new("UIStroke", miniButton).Color = Color3.fromRGB(80, 120, 255)
-- ГЛАВНЫЙ ФРЕЙМ
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 370, 0, 510)
mainFrame.Position = UDim2.new(0.5, -185, 0.5, -255)
mainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 35)
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Draggable = true
mainFrame.Parent = screenGui
Instance.new("UICorner", mainFrame).CornerRadius = UDim.new(0, 12)
Instance.new("UIStroke", mainFrame).Color = Color3.fromRGB(80, 120, 255)
-- Заголовок
local titleBar = Instance.new("Frame")
titleBar.Size = UDim2.new(1, 0, 0, 36)
titleBar.BackgroundColor3 = Color3.fromRGB(35, 35, 50)
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame
Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 12)
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -70, 1, 0)
titleLabel.Position = UDim2.new(0, 10, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "⛏️ Infinite Drill Simulator"
titleLabel.TextColor3 = Color3.fromRGB(80, 180, 255)
titleLabel.TextSize = 13
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.TextScaled = false
titleLabel.Parent = titleBar
local minimizeBtn = Instance.new("TextButton")
minimizeBtn.Size = UDim2.new(0, 26, 0, 26)
minimizeBtn.Position = UDim2.new(1, -58, 0, 5)
minimizeBtn.BackgroundColor3 = Color3.fromRGB(80, 120, 200)
minimizeBtn.Text = "—"
minimizeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeBtn.TextSize = 13
minimizeBtn.Font = Enum.Font.GothamBold
minimizeBtn.BorderSizePixel = 0
minimizeBtn.Parent = titleBar
Instance.new("UICorner", minimizeBtn).CornerRadius = UDim.new(0, 5)
local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 26, 0, 26)
closeBtn.Position = UDim2.new(1, -29, 0, 5)
closeBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
closeBtn.Text = "X"
closeBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
closeBtn.TextSize = 12
closeBtn.Font = Enum.Font.GothamBold
closeBtn.BorderSizePixel = 0
closeBtn.Parent = titleBar
Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 5)
-- Контент
local contentFrame = Instance.new("ScrollingFrame")
contentFrame.Size = UDim2.new(1, -12, 1, -42)
contentFrame.Position = UDim2.new(0, 6, 0, 39)
contentFrame.BackgroundTransparency = 1
contentFrame.ScrollBarThickness = 3
contentFrame.ScrollBarImageColor3 = Color3.fromRGB(80, 120, 255)
contentFrame.CanvasSize = UDim2.new(0, 0, 0, 900)
contentFrame.Parent = mainFrame
local contentLayout = Instance.new("UIListLayout")
contentLayout.SortOrder = Enum.SortOrder.LayoutOrder
contentLayout.Padding = UDim.new(0, 3)
contentLayout.Parent = contentFrame
-- ============================================
-- GUI ХЕЛПЕРЫ
-- ============================================
local function createSection(name, parent, order)
local s = Instance.new("Frame")
s.Size = UDim2.new(1, 0, 0, 20)
s.BackgroundColor3 = Color3.fromRGB(40, 40, 55)
s.BorderSizePixel = 0
s.LayoutOrder = order
s.Parent = parent
Instance.new("UICorner", s).CornerRadius = UDim.new(0, 4)
local l = Instance.new("TextLabel")
l.Size = UDim2.new(1, -8, 1, 0)
l.Position = UDim2.new(0, 8, 0, 0)
l.BackgroundTransparency = 1
l.Text = name
l.TextColor3 = Color3.fromRGB(200, 200, 220)
l.TextSize = 11
l.Font = Enum.Font.GothamBold
l.TextXAlignment = Enum.TextXAlignment.Left
l.TextScaled = false
l.Parent = s
return s
end
local function createButton(text, parent, order, color)
color = color or Color3.fromRGB(60, 60, 80)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(1, 0, 0, 24)
btn.BackgroundColor3 = color
btn.Text = text
btn.TextColor3 = Color3.fromRGB(220, 220, 240)
btn.TextSize = 11
btn.Font = Enum.Font.GothamSemibold
btn.BorderSizePixel = 0
btn.LayoutOrder = order
btn.TextScaled = false
btn.Parent = parent
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4)
return btn
end
local function createInfoRow(parent, order)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 16)
row.BackgroundTransparency = 1
row.LayoutOrder = order
row.Parent = parent
return row
end
local function createInfoLabelInRow(text, row, xScale, width)
local l = Instance.new("TextLabel")
l.Size = UDim2.new(0, width, 1, 0)
l.Position = UDim2.new(xScale, 0, 0, 0)
l.BackgroundTransparency = 1
l.Text = text
l.TextColor3 = Color3.fromRGB(150, 150, 170)
l.TextSize = 11
l.Font = Enum.Font.Gotham
l.TextXAlignment = Enum.TextXAlignment.Left
l.TextScaled = false
l.ClipsDescendants = false
l.Parent = row
return l
end
local function createButtonRow(parent, order)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 24)
row.BackgroundTransparency = 1
row.LayoutOrder = order
row.Parent = parent
return row
end
local function createHalfButton(text, parent, color, isLeft)
color = color or Color3.fromRGB(60, 60, 80)
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.49, 0, 1, 0)
btn.Position = isLeft and UDim2.new(0, 0, 0, 0) or UDim2.new(0.51, 0, 0, 0)
btn.BackgroundColor3 = color
btn.Text = text
btn.TextColor3 = Color3.fromRGB(220, 220, 240)
btn.TextSize = 11
btn.Font = Enum.Font.GothamSemibold
btn.BorderSizePixel = 0
btn.TextScaled = false
btn.Parent = parent
Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4)
return btn
end
local function createCheckbox(text, parent, order, defaultValue, callback)
local row = Instance.new("Frame")
row.Size = UDim2.new(1, 0, 0, 20)
row.BackgroundTransparency = 1
row.LayoutOrder = order
row.Parent = parent
local box = Instance.new("TextButton")
box.Size = UDim2.new(0, 18, 0, 18)
box.Position = UDim2.new(0, 0, 0, 1)
box.BackgroundColor3 = defaultValue and Color3.fromRGB(30, 120, 30) or Color3.fromRGB(60, 60, 80)
box.Text = defaultValue and "✓" or ""
box.TextColor3 = Color3.fromRGB(255, 255, 255)
box.TextSize = 12
box.Font = Enum.Font.GothamBold
box.BorderSizePixel = 0
box.Parent = row
Instance.new("UICorner", box).CornerRadius = UDim.new(0, 3)
local label = Instance.new("TextLabel")
label.Size = UDim2.new(1, -24, 1, 0)
label.Position = UDim2.new(0, 22, 0, 0)
label.BackgroundTransparency = 1
label.Text = text
label.TextColor3 = Color3.fromRGB(180, 180, 200)
label.TextSize = 11
label.Font = Enum.Font.Gotham
label.TextXAlignment = Enum.TextXAlignment.Left
label.TextScaled = false
label.Parent = row
local checked = defaultValue
box.MouseButton1Click:Connect(function()
checked = not checked
box.Text = checked and "✓" or ""
box.BackgroundColor3 = checked and Color3.fromRGB(30, 120, 30) or Color3.fromRGB(60, 60, 80)
if callback then callback(checked) end
saveSettings()
end)
return { getValue = function() return checked end }
end
local mineDropdown
local function createDropdown(name, options, parent, order, callback)
local df = Instance.new("Frame")
df.Size = UDim2.new(1, 0, 0, 24)
df.BackgroundColor3 = Color3.fromRGB(45, 45, 60)
df.BorderSizePixel = 0
df.LayoutOrder = order
df.ClipsDescendants = true
df.Parent = parent
Instance.new("UICorner", df).CornerRadius = UDim.new(0, 4)
local db = Instance.new("TextButton")
db.Size = UDim2.new(1, 0, 0, 24)
db.BackgroundTransparency = 1
db.Text = " " .. name .. ": - ▼"
db.TextColor3 = Color3.fromRGB(180, 180, 200)
db.TextSize = 11
db.Font = Enum.Font.GothamSemibold
db.TextXAlignment = Enum.TextXAlignment.Left
db.Parent = df
local isOpen = false
local optBtns = {}
local function refreshOptions(newOpts)
for _, b in pairs(optBtns) do b:Destroy() end
optBtns = {}
for i, opt in ipairs(newOpts) do
local ob = Instance.new("TextButton")
ob.Size = UDim2.new(1, -4, 0, 20)
ob.Position = UDim2.new(0, 2, 0, 24 + (i - 1) * 22)
ob.BackgroundColor3 = Color3.fromRGB(55, 55, 75)
ob.Text = tostring(opt)
ob.TextColor3 = Color3.fromRGB(200, 200, 220)
ob.TextSize = 11
ob.Font = Enum.Font.Gotham
ob.BorderSizePixel = 0
ob.Parent = df
Instance.new("UICorner", ob).CornerRadius = UDim.new(0, 3)
ob.MouseButton1Click:Connect(function()
db.Text = " " .. name .. ": " .. tostring(opt) .. " ▼"
isOpen = false
df.Size = UDim2.new(1, 0, 0, 24)
if callback then callback(opt) end
end)
table.insert(optBtns, ob)
end
end
refreshOptions(options)
db.MouseButton1Click:Connect(function()
isOpen = not isOpen
df.Size = isOpen and UDim2.new(1, 0, 0, 24 + #optBtns * 22 + 2) or UDim2.new(1, 0, 0, 24)
end)
return {
frame = df, button = db,
refresh = refreshOptions,
setSelected = function(val) db.Text = " " .. name .. ": " .. tostring(val) .. " ▼" end
}
end
-- ============================================
-- GUI ЭЛЕМЕНТЫ
-- ============================================
-- LOCATION
createSection("🗺️ LOCATION", contentFrame, 1)
local locationRow = createInfoRow(contentFrame, 2)
local zoneInfoLabel = createInfoLabelInRow("Zone: -", locationRow, 0, 160)
local mineInfoLabel = createInfoLabelInRow("Mine: -", locationRow, 0.5, 160)
local zoneDropdown = createDropdown("Zone", getZones(), contentFrame, 3, function(val)
State.selectedZone = val
zoneInfoLabel.Text = "Zone: " .. tostring(val)
mineDropdown.refresh(getMines(val))
State.selectedMine = nil
mineInfoLabel.Text = "Mine: -"
saveSettings()
end)
mineDropdown = createDropdown("Mine", {}, contentFrame, 4, function(val)
State.selectedMine = val
mineInfoLabel.Text = "Mine: " .. tostring(val)
saveSettings()
end)
-- Ряд кнопок авто-детекта: [Auto Detect: ON/OFF] [Detect Once]
local detectBtnRow = createButtonRow(contentFrame, 5)
local autoDetectBtn = createHalfButton("📍 Auto Detect: OFF", detectBtnRow, Color3.fromRGB(80, 50, 50), true)
local detectOnceBtn = createHalfButton("🎯 Detect Once", detectBtnRow, Color3.fromRGB(50, 70, 110), false)
-- MINING
createSection("⛏️ MINING", contentFrame, 10)
local drillRow = createInfoRow(contentFrame, 11)
local drillInfoLabel = createInfoLabelInRow("Drill: ...", drillRow, 0, 180)
local replicaInfoLabel = createInfoLabelInRow("RID: -", drillRow, 0.55, 140)
local statusRow = createInfoRow(contentFrame, 12)
local statusLabel = createInfoLabelInRow("Status: IDLE", statusRow, 0, 180)
local blocksMinedLabel = createInfoLabelInRow("Blocks: 0", statusRow, 0.55, 140)
local delayRow = createInfoRow(contentFrame, 13)
local delayInfoLabel = createInfoLabelInRow("Delay: " .. State.mineDelay .. "s", delayRow, 0, 100)
local claimStatusLabel = createInfoLabelInRow("Claim: -", delayRow, 0.3, 200)
local delayBtnRow = createButtonRow(contentFrame, 14)
local decreaseDelayBtn = createHalfButton("⬇️ -0.05s", delayBtnRow, Color3.fromRGB(60, 60, 80), true)
local increaseDelayBtn = createHalfButton("⬆️ +0.05s", delayBtnRow, Color3.fromRGB(60, 60, 80), false)
local autoClaimBtn = createButton(
State.autoClaimEnabled and "🏆 Auto Claim: ON" or "🏆 Auto Claim: OFF",
contentFrame, 15,
State.autoClaimEnabled and Color3.fromRGB(30, 100, 30) or Color3.fromRGB(100, 30, 30)
)
local mineBtnRow = createButtonRow(contentFrame, 16)
local startMineBtn = createHalfButton("▶️ START", mineBtnRow, Color3.fromRGB(30, 120, 30), true)
local stopMineBtn = createHalfButton("⏹️ STOP", mineBtnRow, Color3.fromRGB(120, 30, 30), false)
-- AUTO CLICK
createSection("🖱️ AUTO CLICK", contentFrame, 30)
local clickRow1 = createInfoRow(contentFrame, 31)
local clickInfoLabel = createInfoLabelInRow("Click: -", clickRow1, 0, 340)
local clickRow1b = createInfoRow(contentFrame, 32)
local clickTpLabel = createInfoLabelInRow("TP to: -", clickRow1b, 0, 340)
local clickRow2 = createInfoRow(contentFrame, 33)
local clickRidLabel = createInfoLabelInRow("RID: -", clickRow2, 0, 100)
local clickDistLabel = createInfoLabelInRow("Dist: -", clickRow2, 0.3, 80)
local clickStatusLabel = createInfoLabelInRow("Status: OFF", clickRow2, 0.55, 140)
local clickRow3 = createInfoRow(contentFrame, 34)
local clickCountLabel = createInfoLabelInRow("Clicks: 0", clickRow3, 0, 100)
local clickDelayLabel = createInfoLabelInRow("Delay: " .. State.clickDelay .. "s", clickRow3, 0.3, 100)
local detectClickBtn = createButton("🔍 Detect Nearest Click Object", contentFrame, 35, Color3.fromRGB(50, 80, 120))
local vipCheckbox = createCheckbox("🌟 VIP Pump Priority", contentFrame, 36, State.useVipPump, function(val)
State.useVipPump = val
saveSettings()
end)
local tpCheckbox = createCheckbox("🔀 Teleport to ClickArea", contentFrame, 37, State.teleportToClick, function(val)
State.teleportToClick = val
saveSettings()
end)
local clickDelayRow = createButtonRow(contentFrame, 38)
local clickDelayDecBtn = createHalfButton("⬇️ -0.01s", clickDelayRow, Color3.fromRGB(60, 60, 80), true)
local clickDelayIncBtn = createHalfButton("⬆️ +0.01s", clickDelayRow, Color3.fromRGB(60, 60, 80), false)
local clickBtnRow = createButtonRow(contentFrame, 39)
local startClickBtn = createHalfButton("▶️ START", clickBtnRow, Color3.fromRGB(30, 100, 120), true)
local stopClickBtn = createHalfButton("⏹️ STOP", clickBtnRow, Color3.fromRGB(120, 60, 30), false)
-- KEYBIND
createSection("⌨️ KEYBIND", contentFrame, 50)
local keybindLabel = Instance.new("TextLabel")
keybindLabel.Size = UDim2.new(1, 0, 0, 16)
keybindLabel.BackgroundTransparency = 1
keybindLabel.Text = "Toggle: " .. State.toggleKey.Name
keybindLabel.TextColor3 = Color3.fromRGB(150, 150, 170)
keybindLabel.TextSize = 11
keybindLabel.Font = Enum.Font.Gotham
keybindLabel.TextXAlignment = Enum.TextXAlignment.Left
keybindLabel.TextScaled = false
keybindLabel.LayoutOrder = 51
keybindLabel.Parent = contentFrame
local changeKeyBtn = createButton("🔑 Change Key", contentFrame, 52, Color3.fromRGB(80, 60, 120))
local waitingForKey = false
-- Canvas авто-обновление
local function updateCanvasSize()
contentFrame.CanvasSize = UDim2.new(0, 0, 0, contentLayout.AbsoluteContentSize.Y + 10)
end
contentLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(updateCanvasSize)
task.defer(updateCanvasSize)
-- ============================================
-- ЛОГИКА
-- ============================================
local function updateDrillInfo()
local drill = findPlayerDrill()
if drill then
State.drillObject = drill
drillInfoLabel.Text = "Drill: " .. drill.Name
drillInfoLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
local rid = getReplicaIdFromObject(drill)
if rid then
State.replicaId = rid
replicaInfoLabel.Text = "RID: " .. tostring(rid)
replicaInfoLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
else
replicaInfoLabel.Text = "RID: ?"
replicaInfoLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
end
return true
else
State.drillObject = nil
State.replicaId = nil
drillInfoLabel.Text = "Drill: Not found"
drillInfoLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
replicaInfoLabel.Text = "RID: -"
replicaInfoLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
return false
end
end
-- Восстановить сохранённую зону/шахту при загрузке
task.defer(function()
if State.selectedZone then
zoneDropdown.setSelected(State.selectedZone)
zoneInfoLabel.Text = "Zone: " .. tostring(State.selectedZone)
mineDropdown.refresh(getMines(State.selectedZone))
if State.selectedMine then
mineDropdown.setSelected(State.selectedMine)
mineInfoLabel.Text = "Mine: " .. tostring(State.selectedMine)
end
end
end)
-- АВТО ПРОВЕРКА ДРЕЛИ
task.spawn(function()
while true do
updateDrillInfo()
task.wait(2)
end
end)
-- DETECT ONCE — одноразовое определение зоны
detectOnceBtn.MouseButton1Click:Connect(function()
detectOnceBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 30)
local zone, mine = detectPlayerZoneAndMine()
if zone and mine then
State.selectedZone = zone
State.selectedMine = mine
zoneInfoLabel.Text = "Zone: " .. tostring(zone)
zoneInfoLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
zoneDropdown.setSelected(zone)
mineDropdown.refresh(getMines(zone))
mineDropdown.setSelected(mine)
mineInfoLabel.Text = "Mine: " .. tostring(mine)
mineInfoLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
detectOnceBtn.BackgroundColor3 = Color3.fromRGB(30, 100, 30)
saveSettings()
else
detectOnceBtn.BackgroundColor3 = Color3.fromRGB(120, 30, 30)
end
task.delay(1.5, function()
detectOnceBtn.BackgroundColor3 = Color3.fromRGB(50, 70, 110)
end)
end)
-- DETECT CLICK OBJECT (ручная кнопка)
detectClickBtn.MouseButton1Click:Connect(function()
local clickObj, tpTarget, rid, name, dist = findNearestClickObject(State.useVipPump)
if clickObj and rid then
State.currentClickObjRef = clickObj
State.currentClickRid = rid
State.currentTeleportTarget = tpTarget
clickInfoLabel.Text = "Click: " .. tostring(name or clickObj.Name)
clickInfoLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
clickTpLabel.Text = "TP to: " .. (tpTarget and tpTarget.Name or "same")
clickTpLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
clickRidLabel.Text = "RID: " .. tostring(rid)
clickRidLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
clickDistLabel.Text = "Dist: " .. string.format("%.1f", dist or 0)
clickDistLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
else
clickInfoLabel.Text = "Click: NOT FOUND"
clickInfoLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
clickTpLabel.Text = "TP to: -"
clickRidLabel.Text = "RID: -"
clickDistLabel.Text = "Dist: -"
end
end)
-- АВТО ДЕТЕКТ ЗОНЫ
autoDetectBtn.MouseButton1Click:Connect(function()
State.autoDetectEnabled = not State.autoDetectEnabled
if State.autoDetectEnabled then
autoDetectBtn.Text = "📍 Auto Detect: ON"
autoDetectBtn.BackgroundColor3 = Color3.fromRGB(30, 120, 30)
State.detectConnection = RunService.Heartbeat:Connect(function()
local zone, mine = detectPlayerZoneAndMine()
if zone and (zone ~= State.selectedZone or mine ~= State.selectedMine) then
State.selectedZone = zone
State.selectedMine = mine
zoneInfoLabel.Text = "Zone: " .. tostring(zone)
zoneInfoLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
zoneDropdown.setSelected(zone)
if mine then
mineInfoLabel.Text = "Mine: " .. tostring(mine)
mineInfoLabel.TextColor3 = Color3.fromRGB(100, 200, 255)
mineDropdown.refresh(getMines(zone))
mineDropdown.setSelected(mine)
end
saveSettings()
end
end)
else
autoDetectBtn.Text = "📍 Auto Detect: OFF"
autoDetectBtn.BackgroundColor3 = Color3.fromRGB(80, 50, 50)
if State.detectConnection then
State.detectConnection:Disconnect()
State.detectConnection = nil
end
end
end)
-- DELAY (mine)
decreaseDelayBtn.MouseButton1Click:Connect(function()
State.mineDelay = math.max(0, math.round((State.mineDelay - 0.05) * 100) / 100)
delayInfoLabel.Text = "Delay: " .. State.mineDelay .. "s"
saveSettings()
end)
increaseDelayBtn.MouseButton1Click:Connect(function()
State.mineDelay = math.round((State.mineDelay + 0.05) * 100) / 100
delayInfoLabel.Text = "Delay: " .. State.mineDelay .. "s"
saveSettings()
end)
-- AUTO CLAIM
autoClaimBtn.MouseButton1Click:Connect(function()
State.autoClaimEnabled = not State.autoClaimEnabled
autoClaimBtn.Text = State.autoClaimEnabled and "🏆 Auto Claim: ON" or "🏆 Auto Claim: OFF"
autoClaimBtn.BackgroundColor3 = State.autoClaimEnabled and Color3.fromRGB(30, 100, 30) or Color3.fromRGB(100, 30, 30)
saveSettings()
end)
-- MINING LOOP
local blocksMined = 0
local function tryClaimWithRetry()
for attempt = 1, 20 do
if not State.autoMineEnabled then break end
claimStatusLabel.Text = "Claim: " .. attempt .. "/20"
claimStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
fireWinClaimed(State.selectedZone, State.selectedMine)
task.wait(0.2)
if #getBlocks(State.selectedZone, State.selectedMine) > 0 then
claimStatusLabel.Text = "Claim: OK"
claimStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
return
end
end
claimStatusLabel.Text = "Claim: Wait..."
while State.autoMineEnabled and #getBlocks(State.selectedZone, State.selectedMine) == 0 do
task.wait(0.5)
end
claimStatusLabel.Text = "Claim: Ready"
claimStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
end
startMineBtn.MouseButton1Click:Connect(function()
if not updateDrillInfo() then
statusLabel.Text = "Status: NO DRILL!"
statusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
return
end
if not State.selectedZone or not State.selectedMine then
statusLabel.Text = "Status: SELECT ZONE!"
statusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
return
end
State.autoMineEnabled = false
task.wait(0.1)
State.autoMineEnabled = true
blocksMined = 0
statusLabel.Text = "Status: MINING"
statusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
task.spawn(function()
while State.autoMineEnabled do
if not State.replicaId then
updateDrillInfo()
if not State.replicaId then
statusLabel.Text = "Status: NO DRILL!"
task.wait(1)
continue
end
end
local blocks = getBlocks(State.selectedZone, State.selectedMine)
if #blocks > 0 then
for _, blockName in ipairs(blocks) do
if not State.autoMineEnabled then break end
if fireMineDamage(blockName) then
blocksMined = blocksMined + 1
blocksMinedLabel.Text = "Blocks: " .. blocksMined
end
task.wait(State.mineDelay > 0 and State.mineDelay or 0.01)
end
if #getBlocks(State.selectedZone, State.selectedMine) == 0 and State.autoClaimEnabled then
statusLabel.Text = "Status: CLAIMING"
tryClaimWithRetry()
statusLabel.Text = "Status: MINING"
statusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
end
else
if State.autoClaimEnabled then
tryClaimWithRetry()
else
task.wait(0.5)
end
end
end
end)
end)
stopMineBtn.MouseButton1Click:Connect(function()
State.autoMineEnabled = false
statusLabel.Text = "Status: STOPPED"
statusLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
end)
-- CLICK DELAY
clickDelayDecBtn.MouseButton1Click:Connect(function()
State.clickDelay = math.max(0.01, math.round((State.clickDelay - 0.01) * 100) / 100)
clickDelayLabel.Text = "Delay: " .. State.clickDelay .. "s"
saveSettings()
end)
clickDelayIncBtn.MouseButton1Click:Connect(function()
State.clickDelay = math.round((State.clickDelay + 0.01) * 100) / 100
clickDelayLabel.Text = "Delay: " .. State.clickDelay .. "s"
saveSettings()
end)
-- AUTO CLICK
startClickBtn.MouseButton1Click:Connect(function()
State.autoClickEnabled = false
task.wait(0.1)
State.autoClickEnabled = true
if not State.currentClickObjRef or not State.currentClickObjRef.Parent then
local clickObj, tpTarget, rid, name, dist = findNearestClickObject(State.useVipPump)
if clickObj and rid then
State.currentClickObjRef = clickObj
State.currentClickRid = rid
State.currentTeleportTarget = tpTarget
clickInfoLabel.Text = "Click: " .. tostring(name or clickObj.Name)
clickInfoLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
clickTpLabel.Text = "TP to: " .. (tpTarget and tpTarget.Name or "same")
clickRidLabel.Text = "RID: " .. tostring(rid)
clickDistLabel.Text = "Dist: " .. string.format("%.1f", dist or 0)
else
clickStatusLabel.Text = "Status: NO OBJ!"
clickStatusLabel.TextColor3 = Color3.fromRGB(255, 100, 100)
State.autoClickEnabled = false
return
end
end
if State.teleportToClick then
local tpTarget = State.currentTeleportTarget or State.currentClickObjRef
local tpPos = getObjectPosition(tpTarget)
if tpPos then
local dist = getDistanceTo(tpPos)
if dist > 10 then
teleportTo(tpPos)
clickTpLabel.Text = "TP to: " .. tpTarget.Name .. " ✓"
clickTpLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
end
end
end
clickStatusLabel.Text = "Status: CLICKING"
clickStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
local clickCount = 0
task.spawn(function()
while State.autoClickEnabled do
if State.currentClickObjRef and State.currentClickObjRef.Parent then
local newRid = getReplicaIdFromObject(State.currentClickObjRef)
if newRid and newRid ~= State.currentClickRid then
State.currentClickRid = newRid
clickRidLabel.Text = "RID: " .. tostring(newRid)
end
if State.teleportToClick then
local tpTarget = State.currentTeleportTarget or State.currentClickObjRef
local tpPos = getObjectPosition(tpTarget)
if tpPos then
local dist = getDistanceTo(tpPos)
clickDistLabel.Text = "Dist: " .. string.format("%.1f", dist)
if dist > 15 then teleportTo(tpPos) end
end
end
fireClick(State.currentClickRid)
clickCount = clickCount + 1
clickCountLabel.Text = "Clicks: " .. clickCount
else
clickStatusLabel.Text = "Status: Searching..."
clickStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
local clickObj, tpTarget, rid, name = findNearestClickObject(State.useVipPump)
if clickObj and rid then
State.currentClickObjRef = clickObj
State.currentClickRid = rid
State.currentTeleportTarget = tpTarget
clickInfoLabel.Text = "Click: " .. tostring(name or clickObj.Name)
clickTpLabel.Text = "TP to: " .. (tpTarget and tpTarget.Name or "same")
clickRidLabel.Text = "RID: " .. tostring(rid)
clickStatusLabel.Text = "Status: CLICKING"
clickStatusLabel.TextColor3 = Color3.fromRGB(100, 255, 100)
if State.teleportToClick then
local tpPos = getObjectPosition(tpTarget or clickObj)
if tpPos then teleportTo(tpPos) end
end
else
task.wait(1)
continue
end
end
task.wait(State.clickDelay)
end
end)
end)
stopClickBtn.MouseButton1Click:Connect(function()
State.autoClickEnabled = false
clickStatusLabel.Text = "Status: STOPPED"
clickStatusLabel.TextColor3 = Color3.fromRGB(255, 200, 100)
end)
-- KEYBIND
changeKeyBtn.MouseButton1Click:Connect(function()
if waitingForKey then return end
waitingForKey = true
changeKeyBtn.Text = "🔑 Press key..."
keybindLabel.Text = "Toggle: ..."
end)
minimizeBtn.MouseButton1Click:Connect(function()
mainFrame.Visible = false
miniButton.Visible = true
end)
miniButton.MouseButton1Click:Connect(function()
mainFrame.Visible = true
miniButton.Visible = false
end)
closeBtn.MouseButton1Click:Connect(function()
mainFrame.Visible = false
miniButton.Visible = false
end)
UserInputService.InputBegan:Connect(function(input, gp)
if input.UserInputType ~= Enum.UserInputType.Keyboard then return end
if waitingForKey then
State.toggleKey = input.KeyCode
waitingForKey = false
keybindLabel.Text = "Toggle: " .. input.KeyCode.Name
changeKeyBtn.Text = "🔑 Change Key"
saveSettings()
return
end
if gp then return end
if input.KeyCode == State.toggleKey then
if mainFrame.Visible then
mainFrame.Visible = false
miniButton.Visible = true
elseif miniButton.Visible then
mainFrame.Visible = true
miniButton.Visible = false
else
mainFrame.Visible = true
end
end
end)
updateDrillInfo()
print("✅ Infinite Drill Simulator v2.8 loaded! Toggle: " .. State.toggleKey.Name)
Thanks