local player = game.Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoidRootPart = character:WaitForChild("HumanoidRootPart") local screenGui = Instance.new("ScreenGui") screenGui.Name = "AutoBoxGui" screenGui.ResetOnSpawn = false screenGui.Parent = player:WaitForChild("PlayerGui") local toggleButton = Instance.new("TextButton") toggleButton.Size = UDim2.new(0, 150, 0, 50) toggleButton.Position = UDim2.new(0, 20, 0.5, -120) toggleButton.BackgroundColor3 = Color3.fromRGB(35, 35, 35) toggleButton.TextColor3 = Color3.new(1, 1, 1) toggleButton.Font = Enum.Font.SourceSansBold toggleButton.TextSize = 24 toggleButton.Text = "Start Auto Box" toggleButton.Parent = screenGui local unloadButton = Instance.new("TextButton") unloadButton.Size = UDim2.new(0, 150, 0, 50) unloadButton.Position = UDim2.new(0, 20, 0.5, -60) unloadButton.BackgroundColor3 = Color3.fromRGB(180, 50, 50) unloadButton.TextColor3 = Color3.new(1, 1, 1) unloadButton.Font = Enum.Font.SourceSansBold unloadButton.TextSize = 24 unloadButton.Text = "Unload Script" unloadButton.Parent = screenGui local running = false local loopThread local function waitForCharacter() character = player.Character or player.CharacterAdded:Wait() humanoidRootPart = character:WaitForChild("HumanoidRootPart") end local function firePrompt(prompt) if not prompt then return false end if prompt.HoldDuration > 0 then prompt:InputHoldBegin() wait(prompt.HoldDuration) prompt:InputHoldEnd() else fireproximityprompt(prompt) end return true end local function teleportAndFirePrompt(path) -- Ensure character is loaded if not humanoidRootPart or not humanoidRootPart.Parent then waitForCharacter() end local node = workspace for _, partName in ipairs(path) do node = node:WaitForChild(partName) end local targetPosition = node.Position or (node:IsA("BasePart") and node.Position) or (node.CFrame and node.CFrame.Position) humanoidRootPart.CFrame = CFrame.new(targetPosition) + Vector3.new(0, 3, 0) -- slight Y offset to avoid clipping wait(1) -- Increased wait for settling local prompt = node:FindFirstChildWhichIsA("ProximityPrompt") if prompt then local success = firePrompt(prompt) if not success then warn("Failed to fire prompt at " .. table.concat(path, ".")) end wait(1) -- wait after firing prompt for game to register else warn("ProximityPrompt not found at " .. table.concat(path, ".")) end end local function autoBoxLoop() while running do teleportAndFirePrompt({"BoxStocker", "Box", "Node"}) wait(1.5) -- wait a bit longer after pickup teleportAndFirePrompt({"BoxStocker", "Pallet", "Node"}) wait(2.5) -- wait longer after placing end end toggleButton.MouseButton1Click:Connect(function() running = not running if running then toggleButton.Text = "Stop Auto Box" loopThread = spawn(autoBoxLoop) else toggleButton.Text = "Start Auto Box" end end) unloadButton.MouseButton1Click:Connect(function() running = false screenGui:Destroy() end)