-- AUTO-MINE () – korzysta z OreController gry if not game:IsLoaded() then game.Loaded:Wait() end local Players = game:GetService("Players") local RS = game:GetService("ReplicatedStorage") local CS = game:GetService("CollectionService") local RunService = game:GetService("RunService") local LP = Players.LocalPlayer -- Knit + kontroler local Knit = require(RS:WaitForChild("Packages"):WaitForChild("Knit")) pcall(function() Knit.Start() end) -- jeśli gra już wystartowała, pcall niczemu nie szkodzi local OreController repeat task.wait(0.05) pcall(function() OreController = Knit.GetController("OreController") end) until OreController -- podpinamy handler MoveToFinished (żeby po dojściu zaczęło kopać) pcall(function() OreController:moveToFinished() end) -- helpers local function hrp() local ch = LP.Character or LP.CharacterAdded:Wait() return ch:WaitForChild("HumanoidRootPart", 5) end local function isModelOre(m) if not m or not m:IsA("Model") or not m.PrimaryPart then return false end if CS:HasTag(m, "Ore") or CS:HasTag(m, "AfkOre") then return true end -- fallback na przypadek bez tagów: rudy z atrybutami roomId/id if m:GetAttribute("roomId") ~= nil and m:GetAttribute("id") ~= nil then return true end return false end local function nearestOre() local root = hrp() if not root then return nil end local best, bestDist local function consider(m) if not isModelOre(m) then return end local d = (m.PrimaryPart.Position - root.Position).Magnitude if not bestDist or d < bestDist then best, bestDist = m, d end end -- preferuj „zwykłe” Ore for _, m in ipairs(CS:GetTagged("Ore")) do consider(m) end if not best then for _, m in ipairs(CS:GetTagged("AfkOre")) do consider(m) end end -- fallback: gdy tagi nie działają if not best then local debris = workspace:FindFirstChild("Debris") if debris then for _, m in ipairs(debris:GetChildren()) do consider(m) end end end return best end local function canMine(target) -- jeżeli gra ma limiter „za słoki kilof”, uszanujemy go local ok, res = pcall(function() return OreController:isStrongEnough(target) end) if ok then return res ~= false end return true end local function mineOne(target) if not target or not target.Parent then return end if not canMine(target) then return end -- zacznij podejście i kopanie OreController:moveToOre(target) OreController:updateOreHealth() -- czekaj aż przestanie kopać tę rudę (rozpadnie się / zmieni cel) local t0 = os.clock() while target.Parent and (OreController._currentOre == target or OreController._selectedOre == target) do task.wait(0.1) if os.clock() - t0 > 12 then -- time-out zabezpieczający (np. ruda poza zasięgiem) pcall(function() OreController:cancelAutoDamageOre() end) break end end end -- główna pętla while true do local target = nearestOre() if target then mineOne(target) task.wait(0.1) else task.wait(0.5) -- brak rud w zasięgu – chwilę poczekaj end end