farm metal
Key Required

farm metal

7 DAYS TO LIVEstas7stas7 1.8K views 579 executesUpdated Dec 20, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•309 lines (9310 chars)
local player = game.Players.LocalPlayer
local menuVisible = false
local scrapObjects = {}
local collectedScrap = {}

local gui = Instance.new("ScreenGui")
gui.Parent = game.CoreGui

local menuBtn = Instance.new("TextButton")
menuBtn.Size = UDim2.new(0, 60, 0, 60)
menuBtn.Position = UDim2.new(1, -65, 0.5, -30)
menuBtn.BackgroundColor3 = Color3.new(1, 1, 0)
menuBtn.Text = "▶"
menuBtn.TextColor3 = Color3.new(0, 0, 0)
menuBtn.TextScaled = true
menuBtn.Font = Enum.Font.SourceSansBold
menuBtn.Parent = gui

local menuFrame = Instance.new("Frame")
menuFrame.Size = UDim2.new(0, 110, 0, 400)
menuFrame.Position = UDim2.new(1, -115, 0.5, -200)
menuFrame.BackgroundColor3 = Color3.new(0.1, 0.1, 0.1)
menuFrame.BackgroundTransparency = 0.1
menuFrame.BorderSizePixel = 2
menuFrame.BorderColor3 = Color3.new(1, 1, 0)
menuFrame.Visible = false
menuFrame.Parent = gui

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 40)
title.BackgroundColor3 = Color3.new(1, 1, 0)
title.Text = "SCRAP"
title.TextColor3 = Color3.new(0, 0, 0)
title.TextScaled = true
title.Parent = menuFrame

local scroll = Instance.new("ScrollingFrame")
scroll.Size = UDim2.new(1, -4, 1, -100)
scroll.Position = UDim2.new(0, 2, 0, 45)
scroll.BackgroundTransparency = 1
scroll.ScrollBarThickness = 3
scroll.Parent = menuFrame

local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 2)
layout.Parent = scroll

local refreshBtn = Instance.new("TextButton")
refreshBtn.Size = UDim2.new(1, 0, 0, 35)
refreshBtn.Position = UDim2.new(0, 0, 1, -55)
refreshBtn.BackgroundColor3 = Color3.new(0, 0.5, 1)
refreshBtn.Text = "🔍 FIND"
refreshBtn.TextColor3 = Color3.new(1, 1, 1)
refreshBtn.TextScaled = true
refreshBtn.Parent = menuFrame

local infoLabel = Instance.new("TextLabel")
infoLabel.Size = UDim2.new(1, 0, 0, 20)
infoLabel.Position = UDim2.new(0, 0, 1, -20)
infoLabel.BackgroundTransparency = 1
infoLabel.Text = "READY"
infoLabel.TextColor3 = Color3.new(1, 1, 0)
infoLabel.TextScaled = true
infoLabel.Parent = menuFrame

local BLACKLIST = {
    "turret", "gun", "weapon", "npc", "enemy", "zombie",
    "player", "character", "body", "head", "torso",
    "vehicle", "car", "building", "house", "base",
    "spawn", "point", "respawn", "door", "wall",
    "window", "floor", "ceiling", "roof", "fence",
    "tree", "rock", "stone", "wood", "plant"
}

function isStrictScrap(obj)
    if not obj or not obj.Parent then
        return false
    end
    
    local objName = obj.Name:lower()
    
    if objName == "scrap" then
        return true
    end
    
    if objName:find("^scrap") or
       objName:find(" scrap") or
       objName:find("%f[%a]scrap%f[%A]") then
       
        for _, banned in ipairs(BLACKLIST) do
            if objName:find(banned) then
                return false
            end
        end
        
        local parent = obj.Parent
        while parent do
            local parentName = parent.Name:lower()
            for _, banned in ipairs(BLACKLIST) do
                if parentName:find(banned) then
                    return false
                end
            end
            
            if parent:FindFirstChild("Humanoid") then
                return false
            end
            
            parent = parent.Parent
        end
        
        return true
    end
    
    return false
end

function findScrap()
    scrapObjects = {}
    
    for _, obj in pairs(workspace:GetDescendants()) do
        if obj:IsA("BasePart") or obj:IsA("MeshPart") or obj:IsA("Part") or obj:IsA("Model") then
            
            if isStrictScrap(obj) then
                local position
                
                if obj:IsA("BasePart") or obj:IsA("Part") or obj:IsA("MeshPart") then
                    position = obj.Position
                elseif obj:IsA("Model") then
                    local primary = obj.PrimaryPart
                    if primary then
                        position = primary.Position
                    else
                        local firstPart = obj:FindFirstChildWhichIsA("BasePart")
                        if firstPart then
                            position = firstPart.Position
                        else
                            continue
                        end
                    end
                end
                
                if position then
                    local objId = tostring(obj:GetDebugId())
                    
                    if not collectedScrap[objId] then
                        table.insert(scrapObjects, {
                            obj = obj,
                            name = obj.Name,
                            pos = position,
                            id = objId,
                            type = obj.ClassName
                        })
                    end
                end
            end
        end
    end
    
    local uniqueScrap = {}
    local usedPositions = {}
    
    for _, scrap in pairs(scrapObjects) do
        local posKey = string.format("%d_%d_%d", 
            math.floor(scrap.pos.X / 3),
            math.floor(scrap.pos.Y / 3),
            math.floor(scrap.pos.Z / 3))
        
        if not usedPositions[posKey] then
            usedPositions[posKey] = true
            table.insert(uniqueScrap, scrap)
        end
    end
    
    scrapObjects = uniqueScrap
    
    table.sort(scrapObjects, function(a, b)
        return a.pos.X < b.pos.X
    end)
    
    return #scrapObjects
end

function updateButtons()
    local count = findScrap()
    
    for _, child in pairs(scroll:GetChildren()) do
        if child:IsA("TextButton") then
            child:Destroy()
        end
    end
    
    local validButtons = 0
    
    for i, scrap in ipairs(scrapObjects) do
        if scrap.obj and scrap.obj.Parent then
            validButtons = validButtons + 1
            
            local btn = Instance.new("TextButton")
            btn.Size = UDim2.new(1, 0, 0, 28)
            btn.BackgroundColor3 = Color3.new(1, 1, 0)
            btn.BackgroundTransparency = 0.2
            btn.TextColor3 = Color3.new(0, 0, 0)
            btn.TextScaled = true
            btn.Font = Enum.Font.SourceSans
            
            local distance = "?"
            local char = player.Character
            if char then
                local root = char:FindFirstChild("HumanoidRootPart")
                if root then
                    local dist = (scrap.pos - root.Position).Magnitude
                    distance = math.floor(dist)
                end
            end
            
            btn.Text = string.format("S%d: %d", validButtons, distance)
            btn.Parent = scroll
            
            btn.MouseButton1Click:Connect(function()
                local char = player.Character
                if char then
                    local root = char:FindFirstChild("HumanoidRootPart")
                    if root then
                        if not scrap.obj or not scrap.obj.Parent then
                            btn.BackgroundColor3 = Color3.new(1, 0, 0)
                            btn.Text = "TAKEN"
                            task.wait(1)
                            updateButtons()
                            return
                        end
                        
                        btn.BackgroundColor3 = Color3.new(0, 1, 0)
                        btn.Text = "TP..."
                        
                        root.CFrame = CFrame.new(scrap.pos + Vector3.new(0, 3, 0))
                        
                        task.wait(2)
                        
                        if not scrap.obj or not scrap.obj.Parent then
                            collectedScrap[scrap.id] = true
                        end
                        
                        updateButtons()
                    end
                end
            end)
        end
    end
    
    scroll.CanvasSize = UDim2.new(0, 0, 0, validButtons * 30)
    title.Text = string.format("SCRAP [%d]", validButtons)
    
    if validButtons == 0 then
        infoLabel.Text = "NO SCRAP"
        infoLabel.TextColor3 = Color3.new(1, 0, 0)
    else
        infoLabel.Text = string.format("FOUND: %d", validButtons)
        infoLabel.TextColor3 = Color3.new(1, 1, 0)
    end
    
    return validButtons
end

menuBtn.MouseButton1Click:Connect(function()
    menuVisible = not menuVisible
    menuFrame.Visible = menuVisible
    menuBtn.Text = menuVisible and "◀" or "▶"
    
    if menuVisible then
        updateButtons()
    end
end)

refreshBtn.MouseButton1Click:Connect(function()
    refreshBtn.Text = "🔍 SCAN"
    local count = updateButtons()
    refreshBtn.Text = string.format("🔍 [%d]", count)
end)

spawn(function()
    while true do
        task.wait(10)
        if menuVisible then
            updateButtons()
        end
    end
end)

spawn(function()
    while true do
        task.wait(1)
        
        for i = #scrapObjects, 1, -1 do
            local scrap = scrapObjects[i]
            if scrap and scrap.obj and not scrap.obj.Parent then
                collectedScrap[scrap.id] = true
                table.remove(scrapObjects, i)
                
                if menuVisible then
                    updateButtons()
                end
            end
        end
    end
end)

task.wait(2)
updateButtons()

Features & Information

-tp to scrap
#daystodie#s*#teleport#farm

Community Comments (1)

stas7stas7Mar 31, 2026

IF THERE ISN'T ANYTHING ON THE RIGHT, IT MEANS THAT THERE ISN'T ANY METAL. I RECOMMEND USING THE BLOOD MOON.

More Scripts for 7 DAYS TO LIVE