-- [[ 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/v2/client.lua?s=6af7ad86eeb74ac14173a4e8"))() end) end) --[[rscripts:analytics:end]] local Players = game:GetService("Players")local TweenService = game:GetService("TweenService")local UIS = game:GetService("UserInputService")local player = Players.LocalPlayerlocal playerGui = player:WaitForChild("PlayerGui")for _, oldGui in playerGui:GetChildren() do if oldGui.Name == "PumpkinCollector" then local kill = oldGui:FindFirstChild("DevKill") if kill and kill:IsA("BindableFunction") then local ok, err = pcall(function() kill:Invoke() end) if not ok then warn("[Pumpkins] Previous cleanup: " .. tostring(err)) end end oldGui:Destroy() endendlocal plots = workspace:WaitForChild("Plots")local selectedPlot = plots:FindFirstChild("Plot3")local fields = selectedPlot and selectedPlot:FindFirstChild("Fields")local function feedPrompt(plot) local patch = plot and plot:FindFirstChild("WeighoffPatch") local cart = patch and patch:FindFirstChild("FeedCart") local at = cart and cart:FindFirstChild("PromptAt") return at and at:FindFirstChild("FeedPrompt")endlocal prompt = feedPrompt(selectedPlot)local MESH_ID = "132819597189428"local speed = 40local collectionDelay = 0local autoReplant = truelocal MIN_SPEED, MAX_SPEED = 5, 150 local gui = Instance.new("ScreenGui")gui.Name = "PumpkinCollector"gui.ResetOnSpawn = falsegui.Parent = playerGuilocal panel = Instance.new("Frame", gui)panel.Size = UDim2.fromOffset(390, 550)panel.Position = UDim2.new(0, 24, 0.5, -275)panel.BackgroundColor3 = Color3.fromRGB(28, 31, 35)Instance.new("UICorner", panel).CornerRadius = UDim.new(0, 12)local function label(text, y, height) local l = Instance.new("TextLabel", panel) l.Position = UDim2.fromOffset(14, y) l.Size = UDim2.new(1, -28, 0, height or 25) l.BackgroundTransparency = 1 l.TextColor3 = Color3.fromRGB(235, 235, 235) l.Font = Enum.Font.Code l.TextSize = 14 l.TextXAlignment = Enum.TextXAlignment.Left l.Text = text return lendlocal title = label("PUMPKIN COLLECTOR | rscripts.net/@zur | " .. (selectedPlot and selectedPlot.Name or "NO PLOT"), 10)local statusLabel = label("● Idle", 43)local bagLabel = label("Bag: reading…", 70)local speedLabel = label("Movement speed: 40 studs/s", 200)local track = Instance.new("Frame", panel)track.Position = UDim2.fromOffset(20, 239)track.Size = UDim2.fromOffset(350, 8)track.BackgroundColor3 = Color3.fromRGB(65, 75, 85)track.Active = trueInstance.new("UICorner", track)local fill = Instance.new("Frame", track)fill.Size = UDim2.fromScale((speed - MIN_SPEED) / (MAX_SPEED - MIN_SPEED), 1)fill.BackgroundColor3 = Color3.fromRGB(255, 170, 50)Instance.new("UICorner", fill)local knob = Instance.new("TextButton", track)knob.AnchorPoint = Vector2.new(0.5, 0.5)knob.Position = UDim2.fromScale((speed - MIN_SPEED) / (MAX_SPEED - MIN_SPEED), 0.5)knob.Size = UDim2.fromOffset(20, 24)knob.Text = ""knob.BackgroundColor3 = Color3.fromRGB(255, 205, 100)Instance.new("UICorner", knob)local delayLabel = label("Collection delay: 0.00 s", 260)local delayTrack = track:Clone()delayTrack.Name = "DelaySlider"delayTrack.Position = UDim2.fromOffset(20, 299)delayTrack.Parent = panellocal delayFill = delayTrack:FindFirstChildOfClass("Frame")local delayKnob = delayTrack:FindFirstChildOfClass("TextButton")delayFill.Size = UDim2.fromScale(0, 1)delayKnob.Position = UDim2.fromScale(0, 0.5)local logLabel = label("", 323, 177)logLabel.TextSize = 12logLabel.TextWrapped = truelogLabel.TextYAlignment = Enum.TextYAlignment.Toplocal running, busy, closed = false, false, falselocal activeTweenlocal worker, dragConnection, sliderConnection, releaseConnectionlocal speedVersion = 0local sliding = falselocal delaySliding = falselocal function setDelayAt(x) local fraction = math.clamp((x - delayTrack.AbsolutePosition.X) / delayTrack.AbsoluteSize.X, 0, 1) collectionDelay = math.floor(fraction * 200 + 0.5) / 100 local actualFraction = collectionDelay / 2 delayFill.Size = UDim2.fromScale(actualFraction, 1) delayKnob.Position = UDim2.fromScale(actualFraction, 0.5) delayLabel.Text = string.format("Collection delay: %.2f s", collectionDelay)endlocal function beginDelaySlide(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then delaySliding = true setDelayAt(input.Position.X) endenddelayTrack.InputBegan:Connect(beginDelaySlide)delayFill.InputBegan:Connect(beginDelaySlide)delayKnob.InputBegan:Connect(beginDelaySlide)local function setSpeedAt(x) local fraction = math.clamp((x - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1) local nextSpeed = math.floor(MIN_SPEED + fraction * (MAX_SPEED - MIN_SPEED) + 0.5) if nextSpeed ~= speed then speed = nextSpeed speedVersion += 1 end local actualFraction = (speed - MIN_SPEED) / (MAX_SPEED - MIN_SPEED) fill.Size = UDim2.fromScale(actualFraction, 1) knob.Position = UDim2.fromScale(actualFraction, 0.5) speedLabel.Text = "Movement speed: " .. speed .. " studs/s"endlocal function beginSlide(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then sliding = true setSpeedAt(input.Position.X) endendtrack.InputBegan:Connect(beginSlide)knob.InputBegan:Connect(beginSlide)fill.InputBegan:Connect(beginSlide)sliderConnection = UIS.InputChanged:Connect(function(input) if delaySliding and input.UserInputType == Enum.UserInputType.MouseMovement then setDelayAt(input.Position.X) end if sliding and input.UserInputType == Enum.UserInputType.MouseMovement then setSpeedAt(input.Position.X) endend)releaseConnection = UIS.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then sliding, delaySliding = false, false endend)local logs, cooldowns, replantCooldowns = {}, {}, {}local REPLANT_COOLDOWN = 15local function log(message) if closed then return end local line = os.date("%H:%M:%S") .. " " .. tostring(message) print("[Pumpkins] " .. line) table.insert(logs, line) while #logs > 8 do table.remove(logs, 1) end logLabel.Text = table.concat(logs, "\n")endlocal function status(message, color) if closed then return end statusLabel.Text = "● " .. message statusLabel.TextColor3 = color or Color3.fromRGB(255, 190, 70)endlocal function bag() local hud = player.PlayerGui:FindFirstChild("RunAFarmHUD") local stats = hud and hud:FindFirstChild("Stats") local b = stats and stats:FindFirstChild("BAG") local m = b and b:FindFirstChild("Meter") local value = m and m:FindFirstChild("Value") local text = value and value.Text or "" local a, c = text:match("(%d+)%s*/%s*(%d+)") a, c = tonumber(a), tonumber(c) if not a or not c or c <= 0 then error("Cannot read bag meter: " .. text) end bagLabel.Text = string.format("Bag: %d / %d", a, c) return a, cendlocal function root() local char = player.Character local r = char and char:FindFirstChild("HumanoidRootPart") local h = char and char:FindFirstChildOfClass("Humanoid") if not r or not h or h.Health <= 0 then error("Character unavailable") end return rendlocal function meshPart(o) if o:IsA("MeshPart") and o.MeshId:match("%d+$") == MESH_ID then return o end if o:IsA("SpecialMesh") and o.MeshId:match("%d+$") == MESH_ID and o.Parent:IsA("BasePart") then return o.Parent endendlocal function scan(verbose) if not fields then error("No Fields folder selected; use FIND PLOT") end local result, seen = {}, {} for i = 1, 6 do local field = fields:FindFirstChild("Field" .. i) local crops = field and field:FindFirstChild("Crops") local count = 0 if crops then for _, o in crops:GetDescendants() do local p = meshPart(o) if p and not seen[p] then seen[p] = true count += 1 table.insert(result, p) end end end if verbose then log("Field" .. i .. ": " .. count .. (not crops and " (Crops missing)" or "")) end end return resultendlocal function positionOfPrompt(target) if not target or not target:IsA("ProximityPrompt") then error("ProximityPrompt missing") end local p = target.Parent if p:IsA("Attachment") then return p.WorldPosition end if p:IsA("BasePart") then return p.Position end if p:IsA("Model") then return p:GetPivot().Position end error("Unsupported prompt parent: " .. p.ClassName)endlocal function pause(seconds) local deadline = os.clock() + seconds repeat task.wait(0.05) until not running or os.clock() >= deadlineendlocal function promptPosition() return positionOfPrompt(prompt)endlocal function fieldReadyToPlant(field) local crops = field:FindFirstChild("Crops") local screen = field:FindFirstChild("Screen") local display = screen and screen:FindFirstChild("Display") local sign = display and display:FindFirstChild("Status") if not crops or not sign then return false end if not (sign:IsA("TextLabel") or sign:IsA("TextButton") or sign:IsA("TextBox")) then return false end local text = sign.Text:match("^%s*(.-)%s*$") if text ~= "Empty - plant seeds" then return false end for _, object in crops:GetDescendants() do if meshPart(object) then return false end end return trueendlocal function replantEmptyFields() if not autoReplant or not fields then return false end for i = 1, 6 do if not running or not autoReplant then return false end local field = fields:FindFirstChild("Field" .. i) local crops = field and field:FindFirstChild("Crops") if crops and (replantCooldowns[field] or 0) <= os.clock() then if fieldReadyToPlant(field) then replantCooldowns[field] = os.clock() + REPLANT_COOLDOWN local screen = field:FindFirstChild("Screen") local attachment = screen and screen:FindFirstChild("PlantPromptAttachment") local plantPrompt = attachment and attachment:FindFirstChild("PlantPrompt") if not plantPrompt or not plantPrompt:IsA("ProximityPrompt") then log(field.Name .. ": PlantPrompt missing") elseif plantPrompt.Enabled then if type(fireproximityprompt) ~= "function" then error("Replanting requires fireproximityprompt") end local held, capacity = bag() if held >= capacity then return false end status("Replanting " .. field.Name) local r = root() r.CFrame = CFrame.new(positionOfPrompt(plantPrompt) + Vector3.new(0, 2, 0)) * r.CFrame.Rotation pause(0.2) if not running or not autoReplant then return false end -- Recheck both conditions after travelling before firing. if not plantPrompt.Enabled or not fieldReadyToPlant(field) then log("Replant skipped: " .. field.Name .. " status changed") return false end fireproximityprompt(plantPrompt, plantPrompt.HoldDuration) log("Plant prompt triggered: " .. field.Name) return true end end end end return falseendlocal function unload() status("Teleporting to feed cart") if not prompt or not prompt:IsA("ProximityPrompt") then error("Selected plot has no FeedPrompt") end if not prompt.Enabled then error("Feed prompt is disabled") end local r = root() local before = bag() r.CFrame = CFrame.new(promptPosition() + Vector3.new(0, 2, 0)) * r.CFrame.Rotation log("Teleported to feed cart") pause(0.5) if not running then return end if type(fireproximityprompt) ~= "function" then error("fireproximityprompt unavailable; activate the feed prompt manually, then Start") end status("Activating feed prompt") fireproximityprompt(prompt, prompt.HoldDuration) local deadline = os.clock() + 8 repeat pause(0.2) if not running then return end local held, capacity = bag() if held < before and held < capacity then log("Feed confirmed: bag " .. held .. "/" .. capacity) return end until os.clock() >= deadline error("Feed timed out: bag did not decrease")endlocal function harvest(p) local r = root() local destination = Vector3.new(p.Position.X, r.Position.Y, p.Position.Z) status("Moving to pumpkin") while running do local version = speedVersion activeTween = TweenService:Create(r, TweenInfo.new(math.max((r.Position - destination).Magnitude / speed, 0.05), Enum.EasingStyle.Linear), {CFrame = CFrame.new(destination) * r.CFrame.Rotation}) activeTween:Play() local interrupted = false while activeTween.PlaybackState == Enum.PlaybackState.Playing do local held, capacity = bag() if not running or held >= capacity or not p:IsDescendantOf(fields) or r ~= root() then activeTween:Cancel() interrupted = true break end if speedVersion ~= version then activeTween:Cancel() break end task.wait(0.05) end if interrupted or speedVersion == version then break end end activeTween = nil if not running then return end cooldowns[p] = os.clock() + 15 local arrivedAt = os.clock() while running and os.clock() - arrivedAt < collectionDelay do local held, capacity = bag() if held >= capacity then break end status("Collection delay") task.wait(0.01) endendlocal function stop() running = false if activeTween then activeTween:Cancel() endendlocal function cleanup() if closed then return end closed = true stop() if worker and coroutine.status(worker) ~= "dead" then pcall(task.cancel, worker) end worker = nil if dragConnection then dragConnection:Disconnect(); dragConnection = nil end if sliderConnection then sliderConnection:Disconnect(); sliderConnection = nil end if releaseConnection then releaseConnection:Disconnect(); releaseConnection = nil end gui:Destroy()endlocal devKill = Instance.new("BindableFunction")devKill.Name = "DevKill"devKill.OnInvoke = cleanupdevKill.Parent = guigui.Destroying:Connect(cleanup)local function run() if busy or closed then return end if not fields then log("Use FIND PLOT to select a plot with Fields"); return end busy, running = true, true log("Started") local ok, err = pcall(function() while running do local held, capacity = bag() if held >= capacity then unload() elseif replantEmptyFields() then -- Recheck bag and crops after each planting attempt. else local r = root() local nearest, distance for _, p in scan(false) do if (cooldowns[p] or 0) <= os.clock() then local d = (p.Position - r.Position).Magnitude if not distance or d < distance then nearest, distance = p, d end end end if nearest then harvest(nearest) else status("Waiting for pumpkins"); pause(1) end end end end) stop() busy = false if not ok then status("Error — see log", Color3.fromRGB(255, 100, 100)); log(err) else status("Stopped", Color3.fromRGB(180, 180, 180)) endendlocal function button(text, x, y, callback) local b = Instance.new("TextButton", panel) b.Position = UDim2.fromOffset(x, y) b.Size = UDim2.fromOffset(175, 30) b.BackgroundColor3 = Color3.fromRGB(65, 75, 85) b.TextColor3 = Color3.new(1, 1, 1) b.Font = Enum.Font.Code b.TextSize = 13 b.Text = text Instance.new("UICorner", b) b.Activated:Connect(function() local ok, err = pcall(callback) if not ok then log(err) end end)endfor _, child in panel:GetChildren() do if child:IsA("GuiObject") and child ~= title then child.Position = child.Position + UDim2.fromOffset(0, 40) endendlocal findButton = Instance.new("TextButton", panel)findButton.Position = UDim2.fromOffset(14, 43)findButton.Size = UDim2.fromOffset(175, 30)findButton.BackgroundColor3 = Color3.fromRGB(175, 105, 30)findButton.TextColor3 = Color3.new(1, 1, 1)findButton.Font = Enum.Font.CodefindButton.TextSize = 14findButton.Text = "FIND PLOT"Instance.new("UICorner", findButton)local replantToggle = Instance.new("TextButton", panel)replantToggle.Position = UDim2.fromOffset(201, 43)replantToggle.Size = UDim2.fromOffset(175, 30)replantToggle.TextColor3 = Color3.new(1, 1, 1)replantToggle.Font = Enum.Font.CodereplantToggle.TextSize = 13Instance.new("UICorner", replantToggle)local function updateReplantToggle() replantToggle.Text = "Auto Replant: " .. (autoReplant and "ON" or "OFF") replantToggle.BackgroundColor3 = autoReplant and Color3.fromRGB(45, 120, 65) or Color3.fromRGB(85, 85, 85)endreplantToggle.Activated:Connect(function() if closed then return end autoReplant = not autoReplant updateReplantToggle() log("Auto replant " .. (autoReplant and "enabled" or "disabled"))end)updateReplantToggle()findButton.Activated:Connect(function() if closed then return end stop() if worker and coroutine.status(worker) ~= "dead" then pcall(task.cancel, worker) end worker, activeTween = nil, nil busy = false local ok, err = pcall(function() status("Finding closest plot") local position = root().Position local nearestPlot, nearestPart, nearestDistance for _, plot in plots:GetChildren() do if plot:IsA("Model") then for _, part in plot:GetDescendants() do if part:IsA("BasePart") then local point = part.CFrame:PointToObjectSpace(position) local half = part.Size / 2 local closest = Vector3.new( math.clamp(point.X, -half.X, half.X), math.clamp(point.Y, -half.Y, half.Y), math.clamp(point.Z, -half.Z, half.Z)) local distance = (point - closest).Magnitude if not nearestDistance or distance < nearestDistance then nearestPlot, nearestPart, nearestDistance = plot, part, distance end end end end end if not nearestPlot then error("No plot models with parts found in workspace.Plots") end selectedPlot = nearestPlot fields = selectedPlot:FindFirstChild("Fields") prompt = feedPrompt(selectedPlot) cooldowns = {} replantCooldowns = {} title.Text = "PUMPKIN COLLECTOR | rscripts.net/@zur |" .. selectedPlot.Name log(string.format("Selected %s (%.1f studs)", selectedPlot.Name, nearestDistance)) log("Closest part: " .. nearestPart:GetFullName()) if not fields then error("Selected plot has no Fields folder") end if not prompt then log("Warning: selected plot has no FeedPrompt") end status(selectedPlot.Name .. " selected — press Start") end) if not ok then status("Plot selection error", Color3.fromRGB(255, 100, 100)); log(err) endend)button("Start", 14, 144, function() if busy or closed then return end worker = task.spawn(run)end)button("Stop", 201, 144, function() stop(); log("Stop requested") end)button("Debug: scan fields", 14, 180, function() scan(true) end)button("Debug: bag / prompt", 201, 180, function() local a, c = bag() log("Bag: " .. a .. "/" .. c) log("Plot: " .. (selectedPlot and selectedPlot.Name or "none")) log("Prompt enabled: " .. tostring(prompt and prompt.Enabled)) log("Prompt distance: " .. math.floor((root().Position - promptPosition()).Magnitude)) log("Prompt helper: " .. tostring(type(fireproximityprompt) == "function"))end)button("Clear log / retries", 14, 216, function() logs = {}; cooldowns = {}; logLabel.Text = "" end)button("Dev Kill / Close", 201, 216, cleanup)local dragging, startMouse, startPositiontitle.Active = truetitle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging, startMouse, startPosition = true, input.Position, panel.Position endend)title.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false endend)dragConnection = UIS.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - startMouse panel.Position = startPosition + UDim2.fromOffset(delta.X, delta.Y) endend)pcall(bag)log("Ready. Fields 1–6 only. Drag title to move ui.")log("RECOMMENDED: MOVEMENT @ ~100, DELAY @ 0.06")