local TARGET_GAME_ID = 114031157005341 local CIRCLE_RADIUS = 5 -- how far boxes sit from the player (felt reasonable) -- The Services local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local CoreGui = game:GetService("CoreGui") local StarterGui = game:GetService("StarterGui") local UserInputService = game:GetService("UserInputService") local currentPlaceId = game.PlaceId -- Simple game check so it doesn't run where it shouldn't if TARGET_GAME_ID ~= 0 and currentPlaceId ~= TARGET_GAME_ID then StarterGui:SetCore("SendNotification", { Title = "Wrong Game Bro!", Text = "This script is not meant for this game little fish.", Duration = 5 }) return end local player = Players.LocalPlayer -- Clean up old GUI if I re-ran the script if CoreGui:FindFirstChild("GiftBoxGui") then CoreGui.GiftBoxGui:Destroy() end -- Main GUI Shit local screenGui = Instance.new("ScreenGui") screenGui.Name = "GiftBoxGui" screenGui.ResetOnSpawn = false screenGui.Parent = CoreGui local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 200, 0, 120) mainFrame.Position = UDim2.new(0, 20, 0.5, -60) mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 35) mainFrame.BorderSizePixel = 0 mainFrame.Parent = screenGui local frameCorner = Instance.new("UICorner") frameCorner.CornerRadius = UDim.new(0, 10) frameCorner.Parent = mainFrame -- Title bar also used for dragging local titleBar = Instance.new("Frame") titleBar.Name = "TitleBar" titleBar.Size = UDim2.new(1, 0, 0, 30) titleBar.BackgroundColor3 = Color3.fromRGB(45, 45, 55) titleBar.BorderSizePixel = 0 titleBar.Parent = mainFrame local titleCorner = Instance.new("UICorner") titleCorner.CornerRadius = UDim.new(0, 10) titleCorner.Parent = titleBar local titleLabel = Instance.new("TextLabel") titleLabel.Name = "Title" titleLabel.Size = UDim2.new(1, -10, 1, 0) titleLabel.Position = UDim2.new(0, 10, 0, 0) titleLabel.BackgroundTransparency = 1 titleLabel.Text = "🎁 GiftBox Collector" titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) titleLabel.TextXAlignment = Enum.TextXAlignment.Left titleLabel.Font = Enum.Font.GothamBold titleLabel.TextSize = 14 titleLabel.Parent = titleBar -- Status text (kept simple on purpose) local statusLabel = Instance.new("TextLabel") statusLabel.Name = "Status" statusLabel.Size = UDim2.new(1, -20, 0, 20) statusLabel.Position = UDim2.new(0, 10, 0, 40) statusLabel.BackgroundTransparency = 1 statusLabel.Text = "Status: Ready" statusLabel.TextColor3 = Color3.fromRGB(180, 180, 180) statusLabel.TextXAlignment = Enum.TextXAlignment.Left statusLabel.Font = Enum.Font.Gotham statusLabel.TextSize = 12 statusLabel.Parent = mainFrame -- Main action button local collectButton = Instance.new("TextButton") collectButton.Name = "ExecuteButton" collectButton.Size = UDim2.new(1, -20, 0, 35) collectButton.Position = UDim2.new(0, 10, 0, 70) collectButton.BackgroundColor3 = Color3.fromRGB(0, 170, 100) collectButton.BorderSizePixel = 0 collectButton.Text = "▶ Collect GiftBoxes" collectButton.TextColor3 = Color3.fromRGB(255, 255, 255) collectButton.Font = Enum.Font.GothamBold collectButton.TextSize = 14 collectButton.Parent = mainFrame local buttonCorner = Instance.new("UICorner") buttonCorner.CornerRadius = UDim.new(0, 8) buttonCorner.Parent = collectButton -- Dragging logic (not the cleanest, but it works Ig) local dragging = false local dragStart local startPos titleBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainFrame.Position end end) titleBar.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then local delta = input.Position - dragStart mainFrame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end end) -- Helper for status updates so I don't repeat myself local function updateStatus(text, color) statusLabel.Text = "Status: " .. text statusLabel.TextColor3 = color or Color3.fromRGB(180, 180, 180) end -- Core logic local function collectGiftBoxes() collectButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) collectButton.Text = "⏳ Working..." updateStatus("Setting prompts...", Color3.fromRGB(255, 200, 100)) -- Make all proximity prompts instant (might affect other stuff, but acceptable here) for _, thing in ipairs(Workspace:GetDescendants()) do if thing.ClassName == "ProximityPrompt" then thing.HoldDuration = 0 end end wait(0.5) -- small pause so things settle local character = player.Character or player.CharacterAdded:Wait() local root = character:WaitForChild("HumanoidRootPart") local playerPos = root.Position updateStatus("Finding boxes...", Color3.fromRGB(100, 200, 255)) local giftBoxes = {} for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("Model") and obj.Name == "GiftBox" then table.insert(giftBoxes, obj) end end if #giftBoxes == 0 then updateStatus("No boxes found!", Color3.fromRGB(255, 100, 100)) collectButton.BackgroundColor3 = Color3.fromRGB(0, 170, 100) collectButton.Text = "▶ Collect GiftBoxes" return end updateStatus("Moving " .. #giftBoxes .. " boxes...", Color3.fromRGB(100, 255, 100)) -- Arrange boxes in a rough circle around the player for i, box in ipairs(giftBoxes) do local angle = (i - 1) * (2 * math.pi / #giftBoxes) local offset = Vector3.new( math.cos(angle) * CIRCLE_RADIUS, 0, math.sin(angle) * CIRCLE_RADIUS ) local targetCFrame = CFrame.new(playerPos + offset) if box.PrimaryPart then box:SetPrimaryPartCFrame(targetCFrame) else -- Fallback: just grab the first BasePart we see for _, part in ipairs(box:GetChildren()) do if part:IsA("BasePart") then part.CFrame = targetCFrame break end end end end updateStatus("Done! (" .. #giftBoxes .. " boxes)", Color3.fromRGB(100, 255, 100)) collectButton.BackgroundColor3 = Color3.fromRGB(0, 170, 100) collectButton.Text = "▶ Collect GiftBoxes" StarterGui:SetCore("SendNotification", { Title = "GiftBox Collector", Text = "Moved " .. #giftBoxes .. " gift boxes to you!", Duration = 3 }) end -- The button interactions collectButton.MouseButton1Click:Connect(collectGiftBoxes) collectButton.MouseEnter:Connect(function() if collectButton.Text ~= "⏳ Working..." then collectButton.BackgroundColor3 = Color3.fromRGB(0, 200, 120) end end) collectButton.MouseLeave:Connect(function() if collectButton.Text ~= "⏳ Working..." then collectButton.BackgroundColor3 = Color3.fromRGB(0, 170, 100) end end) -- Initial notification so the user knows it loaded StarterGui:SetCore("SendNotification", { Title = "GiftBox Collector", Text = "GUI loaded! Click the button to collect.", Duration = 3 })