
Key RequiredUniversal

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()

![rustpro internal v2: inf hunger, inf ammo etc. [PC&MOBILE]](https://scriptblox.com/images/script/17474746614-1771440992291.png)

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