local plr = game.Players.LocalPlayer local char = plr.Character or plr.CharacterAdded:Wait() local hrp = char:WaitForChild("HumanoidRootPart") local hum = char:WaitForChild("Humanoid") local rs = game:GetService("RunService") local speed = 120 local dist = 2 local noclip local function on() noclip = rs.Heartbeat:Connect(function() hum.PlatformStand = true for _,v in ipairs(char:GetDescendants()) do if v:IsA("BasePart") then v.CanCollide = false end end hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) end local function off() if noclip then noclip:Disconnect() end hum.PlatformStand = false end local function goto(pos) while (hrp.Position - pos).Magnitude > dist do local diff = pos - hrp.Position local step = math.min(speed * task.wait(), diff.Magnitude) hrp.CFrame = CFrame.new(hrp.Position + diff.Unit * step, pos) end end local function getPrompts() local t = {} for _,v in ipairs(workspace:GetDescendants()) do if v:IsA("ProximityPrompt") and v.ActionText == "Collect Amber" then table.insert(t, v) end end return t end on() local prompts = getPrompts() local last = tick() while true do if tick() - last > 1 then prompts = getPrompts() last = tick() end for i = #prompts,1,-1 do if not prompts[i] or not prompts[i].Parent then table.remove(prompts,i) end end if #prompts == 0 then task.wait(.2) continue end local closest, idx, d for i,p in ipairs(prompts) do local part = p.Parent:IsA("BasePart") and p.Parent or p.Parent:FindFirstChildWhichIsA("BasePart") if part then local distNow = (hrp.Position - part.Position).Magnitude if not d or distNow < d then d, idx, closest = distNow, i, p end end end if closest then local part = closest.Parent:IsA("BasePart") and closest.Parent or closest.Parent:FindFirstChildWhichIsA("BasePart") if part then task.wait(.3) goto(part.Position + Vector3.new(0,3,0)) pcall(function() fireproximityprompt(closest,1) end) table.remove(prompts, idx) task.wait(.4) else table.remove(prompts, idx) end end end