-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/client.lua?s=6aa0f331bbc326101ec3d5fe"))() end) end) --[[rscripts:analytics:end]] local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local plots = workspace.World:WaitForChild("Plots") local scraps = workspace:WaitForChild("PitScrap") local recyclers = workspace:WaitForChild("Recyclers") local character local humanoid local root local picked = 0 local pathFolder local purple = Color3.fromRGB(155, 70, 255) local lightPurple = Color3.fromRGB(210, 150, 255) local function refresh() character = player.Character or player.CharacterAdded:Wait() humanoid = character:WaitForChild("Humanoid") root = character:WaitForChild("HumanoidRootPart") end refresh() pathFolder = Instance.new("Folder") pathFolder.Name = "PSH_ArrowPath" pathFolder.Parent = workspace local forceField = Instance.new("Highlight") forceField.Name = "PSH_PurpleForceField" forceField.FillColor = purple forceField.OutlineColor = lightPurple forceField.FillTransparency = 0.65 forceField.OutlineTransparency = 0.05 forceField.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop forceField.Parent = character local sky = workspace:FindFirstChildOfClass("Sky") if sky then sky.SkyboxBk = "rbxassetid://159454299" sky.SkyboxDn = "rbxassetid://159454299" sky.SkyboxFt = "rbxassetid://159454299" sky.SkyboxLf = "rbxassetid://159454299" sky.SkyboxRt = "rbxassetid://159454299" sky.SkyboxUp = "rbxassetid://159454299" end local lighting = game:GetService("Lighting") lighting.Ambient = purple lighting.OutdoorAmbient = Color3.fromRGB(90, 40, 130) lighting.ColorShift_Top = Color3.fromRGB(80, 30, 120) lighting.ColorShift_Bottom = Color3.fromRGB(35, 15, 55) RunService.Stepped:Connect(function() character = player.Character if not character then return end for _, v in ipairs(character:GetDescendants()) do if v:IsA("BasePart") then v.CanCollide = false end end if not character:FindFirstChild("PSH_PurpleForceField") then forceField = Instance.new("Highlight") forceField.Name = "PSH_PurpleForceField" forceField.FillColor = purple forceField.OutlineColor = lightPurple forceField.FillTransparency = 0.65 forceField.OutlineTransparency = 0.05 forceField.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop forceField.Parent = character end end) task.spawn(function() while task.wait(0.08) do if forceField and forceField.Parent then local t = (math.sin(os.clock() * 2) + 1) / 2 forceField.OutlineColor = purple:Lerp(lightPurple, t) forceField.FillTransparency = 0.58 + t * 0.12 end end end) local function getPosition(obj) if obj:IsA("BasePart") then return obj.Position end if obj:IsA("Model") then local part = obj.PrimaryPart or obj:FindFirstChildWhichIsA("BasePart", true) if part then return part.Position end end end local function clearPath() for _, v in ipairs(pathFolder:GetChildren()) do v:Destroy() end end local function makeArrow(position, direction, index, total) local flat = Vector3.new(direction.X, 0, direction.Z) if flat.Magnitude <= 0 then return end flat = flat.Unit local arrow = Instance.new("Model") arrow.Name = "Arrow_" .. index arrow.Parent = pathFolder local baseCF = CFrame.lookAt( position + Vector3.new(0, 0.22, 0), position + Vector3.new(flat.X, 0.22, flat.Z) ) local function part(size, offset, color) local p = Instance.new("Part") p.Size = size p.CFrame = baseCF * offset p.Anchored = true p.CanCollide = false p.CanTouch = false p.CanQuery = false p.CastShadow = false p.Material = Enum.Material.Neon p.Color = color p.Transparency = 0.3 p.Parent = arrow return p end local shaft = part( Vector3.new(0.55, 0.16, 1.45), CFrame.new(0, 0, 0.55), purple ) local left = part( Vector3.new(0.5, 0.16, 0.85), CFrame.new(-0.43, 0, -0.15) * CFrame.Angles(0, 0, math.rad(-42)), purple ) local right = part( Vector3.new(0.5, 0.16, 0.85), CFrame.new(0.43, 0, -0.15) * CFrame.Angles(0, 0, math.rad(42)), purple ) local tip = part( Vector3.new(0.75, 0.16, 0.75), CFrame.new(0, 0, -0.65), lightPurple ) local outlineFolder = Instance.new("Folder") outlineFolder.Name = "Edge" outlineFolder.Parent = arrow local edges = { {Vector3.new(0.08, 0.2, 1.5), CFrame.new(-0.32, 0.05, 0.55)}, {Vector3.new(0.08, 0.2, 1.5), CFrame.new(0.32, 0.05, 0.55)}, {Vector3.new(0.08, 0.2, 0.9), CFrame.new(-0.62, 0.05, -0.15) * CFrame.Angles(0, 0, math.rad(-42))}, {Vector3.new(0.08, 0.2, 0.9), CFrame.new(0.62, 0.05, -0.15) * CFrame.Angles(0, 0, math.rad(42))} } for _, data in ipairs(edges) do local edge = Instance.new("Part") edge.Size = data[1] edge.CFrame = baseCF * data[2] edge.Anchored = true edge.CanCollide = false edge.CanTouch = false edge.CanQuery = false edge.CastShadow = false edge.Material = Enum.Material.Neon edge.Color = lightPurple edge.Transparency = 0.45 edge.Parent = outlineFolder end local parts = {shaft, left, right, tip} task.spawn(function() local phase = index * 0.35 while arrow.Parent do local t = os.clock() * 2.5 + phase local pulse = (math.sin(t) + 1) / 2 local y = math.sin(t) * 0.08 for _, p in ipairs(parts) do if p.Parent then p.Transparency = 0.24 + pulse * 0.12 end end for _, p in ipairs(outlineFolder:GetChildren()) do if p:IsA("BasePart") then p.Transparency = 0.4 + pulse * 0.12 end end local offset = CFrame.new(0, y, 0) shaft.CFrame = baseCF * offset * CFrame.new(0, 0, 0.55) left.CFrame = baseCF * offset * CFrame.new(-0.43, 0, -0.15) * CFrame.Angles(0, 0, math.rad(-42)) right.CFrame = baseCF * offset * CFrame.new(0.43, 0, -0.15) * CFrame.Angles(0, 0, math.rad(42)) tip.CFrame = baseCF * offset * CFrame.new(0, 0, -0.65) for _, p in ipairs(outlineFolder:GetChildren()) do if p:IsA("BasePart") then p.Color = purple:Lerp(lightPurple, pulse) end end task.wait() end end) end local function createPath(destination) clearPath() refresh() local start = root.Position local finish = destination local a = Vector3.new(start.X, 0, start.Z) local b = Vector3.new(finish.X, 0, finish.Z) local direction = b - a local distance = direction.Magnitude if distance < 5 then return end local spacing = 6 local amount = math.clamp(math.floor(distance / spacing), 2, 50) for i = 1, amount do local alpha = i / (amount + 1) local pos = a:Lerp(b, alpha) makeArrow( Vector3.new(pos.X, finish.Y, pos.Z), direction, i, amount ) end end local function getPlot() local username = player.Name:lower() for _, plot in ipairs(plots:GetChildren()) do local owner = plot:FindFirstChild("Owner") local playerName = owner and owner:FindFirstChild("PlayerName") if playerName and playerName:IsA("TextLabel") then local name = playerName.Text:gsub("%s+", ""):lower() if name ~= "" and username:sub(1, #name) == name then return plot end end end end local function getRecycler() local plot = getPlot() if not plot then print("[PSH DEBUG] Could not find local player's plot") return nil end local number = plot.Name:match("%d+") if not number then print("[PSH DEBUG] Could not get plot number") return nil end local recycler = recyclers:FindFirstChild("Recycler" .. number) if recycler then print("[PSH DEBUG] " .. plot.Name .. " -> " .. recycler.Name) else print("[PSH DEBUG] Recycler" .. number .. " not found") end return recycler end local function getClosestScrap() refresh() local closest local closestDistance = math.huge for _, scrap in ipairs(scraps:GetChildren()) do local position = getPosition(scrap) if position then local distance = (root.Position - position).Magnitude if distance < closestDistance then closest = scrap closestDistance = distance end end end return closest end local function walkTo(position) refresh() createPath(position) humanoid:MoveTo(position) local started = tick() local lastPath = tick() while tick() - started < 30 do if not character.Parent then refresh() break end if (root.Position - position).Magnitude <= 5 then break end if tick() - lastPath >= 0.7 then createPath(position) lastPath = tick() end humanoid:MoveTo(position) task.wait(0.12) end clearPath() end local function goRecycler() local recycler = getRecycler() if not recycler then return false end local position = getPosition(recycler) if not position then print("[PSH DEBUG] Recycler has no position") return false end print("[PSH] Going to recycler") walkTo(position) print("[PSH] At recycler, waiting 5 seconds") task.wait(5) return true end print("[PSH] Scrap farm started") while task.wait(0.2) do refresh() if picked >= 20 then print("[PSH] Picked up 20/20 scrap") if goRecycler() then picked = 0 print("[PSH] Starting next 20 scrap") else task.wait(2) end continue end local scrap = getClosestScrap() if not scrap then print("[PSH] No scrap found, returning to recycler") if goRecycler() then print("[PSH] Checking for new scrap") else task.wait(2) end continue end local position = getPosition(scrap) if not position then task.wait(0.5) continue end print("[PSH] Going to scrap: " .. scrap.Name) walkTo(position) local oldParent = scrap.Parent local started = tick() while scrap.Parent == oldParent and tick() - started < 3 do task.wait(0.1) end if scrap.Parent ~= oldParent then picked += 1 print("[PSH] Scrap: " .. picked .. "/20") else print("[PSH DEBUG] Pickup failed: " .. scrap.Name) end end