local Players = game:GetService("Players") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local mouse = player:GetMouse() local selectedPlot local collectibleObjects = {} local autoCollectEnabled = false local autoCollectThread local collectDelay = 1 / 80 -- default 80 teleports/sec -- Speed lock state local speedEnabled = false local savedWalkSpeed = 16 local speedWatcher = nil local LOCK_SPEED = 250 -- Weld-based teleport state local teleportAnchor = nil local teleportWeld = nil -- Position saved when AutoCollect is turned on local savedReturnCFrame = nil -- Auto Lock state local autoLockEnabled = false local autoLockThread = nil -- Minimise state local minimised = false local EXPANDED_HEIGHT = 340 -- increased to fit the new Auto Lock row local MINI_HEIGHT = 42 -- ─── GUI ───────────────────────────────────────────────────────────────────── local gui = Instance.new("ScreenGui") gui.Name = "PlotChooser" gui.ResetOnSpawn = false gui.Parent = player:WaitForChild("PlayerGui") local frame = Instance.new("Frame") frame.Size = UDim2.fromOffset(350, 120) frame.Position = UDim2.fromScale(0.5, 0.08) frame.AnchorPoint = Vector2.new(0.5, 0) frame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) frame.BorderSizePixel = 0 frame.ClipsDescendants = true frame.Parent = gui local frameCorner = Instance.new("UICorner") frameCorner.CornerRadius = UDim.new(0, 10) frameCorner.Parent = frame local frameStroke = Instance.new("UIStroke") frameStroke.Color = Color3.fromRGB(90, 90, 90) frameStroke.Thickness = 1 frameStroke.Parent = frame local title = Instance.new("TextLabel") title.Name = "Title" title.Size = UDim2.new(1, -20, 0, 60) title.Position = UDim2.fromOffset(10, 10) title.BackgroundTransparency = 1 title.Font = Enum.Font.GothamBold title.TextSize = 24 title.TextColor3 = Color3.new(1, 1, 1) title.TextWrapped = true title.Text = "Choose Your Plot" title.Parent = frame local cancel = Instance.new("TextButton") cancel.Size = UDim2.fromOffset(90, 32) cancel.Position = UDim2.new(1, -100, 1, -36) cancel.BackgroundColor3 = Color3.fromRGB(45, 45, 45) cancel.BorderSizePixel = 0 cancel.TextColor3 = Color3.new(1, 1, 1) cancel.Font = Enum.Font.GothamBold cancel.TextSize = 14 cancel.Text = "Cancel" cancel.Parent = frame local cancelCorner = Instance.new("UICorner") cancelCorner.CornerRadius = UDim.new(0, 8) cancelCorner.Parent = cancel local cancelStroke = Instance.new("UIStroke") cancelStroke.Color = Color3.fromRGB(90, 90, 90) cancelStroke.Parent = cancel -- ─── Fade-out & destroy ─────────────────────────────────────────────────────── local function unloadScript() autoCollectEnabled = false speedEnabled = false autoLockEnabled = false if speedWatcher then speedWatcher:Disconnect() speedWatcher = nil end local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") if humanoid and humanoid.Parent then humanoid.WalkSpeed = savedWalkSpeed humanoid.PlatformStand = false end if teleportWeld then teleportWeld:Destroy() teleportWeld = nil end if character then local hrp = character:FindFirstChild("HumanoidRootPart") if hrp then local att = hrp:FindFirstChild("_CollectAtt1") if att then att:Destroy() end end local anchor = character:FindFirstChild("_CollectAnchor") if anchor then anchor:Destroy() end end teleportAnchor = nil local FADE_TIME = 0.2 local fadeInfo = TweenInfo.new(FADE_TIME, Enum.EasingStyle.Linear) TweenService:Create(frame, fadeInfo, { BackgroundTransparency = 1 }):Play() for _, obj in ipairs(frame:GetDescendants()) do if obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox") then TweenService:Create(obj, fadeInfo, { TextTransparency = 1, BackgroundTransparency = 1 }):Play() elseif obj:IsA("Frame") then TweenService:Create(obj, fadeInfo, { BackgroundTransparency = 1 }):Play() elseif obj:IsA("UIStroke") then TweenService:Create(obj, fadeInfo, { Transparency = 1 }):Play() end end task.wait(FADE_TIME) gui:Destroy() end -- ─── Plot-selection helpers ─────────────────────────────────────────────────── local highlights = {} local finished = false local clickConnection local function cleanup() for _, highlight in pairs(highlights) do if highlight then highlight:Destroy() end end highlights = {} if clickConnection then clickConnection:Disconnect() end end -- ─── Weld-based teleport helpers ───────────────────────────────────────────── local function createAnchorPart(character) local hrp = character:FindFirstChild("HumanoidRootPart") if not hrp then return nil end local part = Instance.new("Part") part.Name = "_CollectAnchor" part.Size = Vector3.new(0.1, 0.1, 0.1) part.Transparency = 1 part.CanCollide = false part.CanTouch = false part.CanQuery = false part.Anchored = true part.CFrame = hrp.CFrame part.Parent = character return part end local function attachAnchorToHRP(anchorPart, hrp) local att0 = Instance.new("Attachment") att0.Name = "_CollectAtt0" att0.Position = Vector3.zero att0.Parent = anchorPart local att1 = Instance.new("Attachment") att1.Name = "_CollectAtt1" att1.Position = Vector3.zero att1.Parent = hrp local w = Instance.new("WeldConstraint") w.Name = "_CollectWeld" w.Part0 = anchorPart w.Part1 = hrp w.Parent = anchorPart anchorPart.Anchored = false return w end local function cleanupAnchor(character) if teleportWeld then teleportWeld:Destroy() teleportWeld = nil end if character then local hrp = character:FindFirstChild("HumanoidRootPart") if hrp then local att1 = hrp:FindFirstChild("_CollectAtt1") if att1 then att1:Destroy() end end end if teleportAnchor and teleportAnchor.Parent then teleportAnchor:Destroy() end teleportAnchor = nil end local function teleportTo(targetCFrame) if not teleportAnchor or not teleportAnchor.Parent then return end teleportAnchor.Anchored = true teleportAnchor.CFrame = targetCFrame task.wait() teleportAnchor.Anchored = false end -- ─── Speed lock ────────────────────────────────────────────────────────────── local function startSpeedWatcher() if speedWatcher then speedWatcher:Disconnect() end local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") if not humanoid then return end speedWatcher = humanoid:GetPropertyChangedSignal("WalkSpeed"):Connect(function() if not speedEnabled then return end local current = humanoid.WalkSpeed if current ~= LOCK_SPEED then savedWalkSpeed = current humanoid.WalkSpeed = LOCK_SPEED end end) end local function stopSpeedWatcher() if speedWatcher then speedWatcher:Disconnect() speedWatcher = nil end end -- ─── Collectible object list ────────────────────────────────────────────────── local function buildCollectibleObjects() table.clear(collectibleObjects) if selectedPlot and selectedPlot:FindFirstChild("Objects") then for _, object in ipairs(selectedPlot.Objects:GetChildren()) do local objectGui = object:FindFirstChild("ObjectGui") if objectGui then local frameObj = objectGui:FindFirstChild("Frame") if frameObj then local amount = frameObj:FindFirstChild("Amount") if amount and amount:IsA("TextLabel") then if not string.find(amount.Text, "s") then table.insert(collectibleObjects, object) end end end end end end print("Collectible Objects Found:", #collectibleObjects) end -- ─── Auto-collect loop ──────────────────────────────────────────────────────── local function startAutoCollect() if autoCollectThread then return end -- Rebuild collectibles fresh each time AutoCollect is enabled buildCollectibleObjects() autoCollectThread = task.spawn(function() local startCharacter = player.Character local startHRP = startCharacter and startCharacter:FindFirstChild("HumanoidRootPart") savedReturnCFrame = startHRP and startHRP.CFrame or nil while autoCollectEnabled do local character = player.Character local hrp = character and character:FindFirstChild("HumanoidRootPart") local humanoid = character and character:FindFirstChildOfClass("Humanoid") if hrp and humanoid then if not teleportAnchor or not teleportAnchor.Parent then cleanupAnchor(character) teleportAnchor = createAnchorPart(character) if teleportAnchor then teleportWeld = attachAnchorToHRP(teleportAnchor, hrp) humanoid.PlatformStand = true end end for _, object in ipairs(collectibleObjects) do if not autoCollectEnabled then break end local primary = object:FindFirstChild("Primary") if primary and primary:IsA("BasePart") then teleportTo(primary.CFrame) task.wait(collectDelay) else task.wait(0.03) end end end task.wait(0.05) end local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") cleanupAnchor(character) if humanoid and humanoid.Parent then humanoid.PlatformStand = false end if savedReturnCFrame then local hrp = character and character:FindFirstChild("HumanoidRootPart") if hrp then hrp.CFrame = savedReturnCFrame savedReturnCFrame = nil end end autoCollectThread = nil end) end -- ─── Auto Lock loop ─────────────────────────────────────────────────────────── local function startAutoLock() if autoLockThread then return end autoLockThread = task.spawn(function() while autoLockEnabled do -- Safety: bail out if no plot selected if not selectedPlot then task.wait(0.1) continue end -- Locate the transparency sentinel and the pad to re-lock with local lockRings = selectedPlot:FindFirstChild("LockRings") local lockPlot = selectedPlot:FindFirstChild("LockPlot") local entrance1 = lockRings and lockRings:FindFirstChild("Entrance1") local pad = lockPlot and lockPlot:FindFirstChild("Pad") -- If the plot is currently unlocked (Entrance1 is invisible), re-lock it if entrance1 and pad and entrance1:IsA("BasePart") and pad:IsA("BasePart") and entrance1.Transparency == 1 then local character = player.Character local hrp = character and character:FindFirstChild("HumanoidRootPart") if hrp then -- Save the pad's original state so we can restore it exactly local originalCFrame = pad.CFrame local originalCanCollide = pad.CanCollide -- Disable collision so the teleport doesn't push the player around pad.CanCollide = false local ok, err = pcall(function() -- Move the pad onto the player pad.CFrame = hrp.CFrame task.wait(0.15) -- Move the pad back (total round-trip ≈ 0.3 s) pad.CFrame = originalCFrame task.wait(0.15) end) if not ok then warn("AutoLock pad teleport error:", err) end -- Always restore collision regardless of errors pad.CanCollide = originalCanCollide end end task.wait(0.1) -- poll interval end autoLockThread = nil end) end -- ─── Main menu ──────────────────────────────────────────────────────────────── local function createMainMenu() -- Fade out the plot-selection title for _, obj in ipairs(frame:GetChildren()) do if obj:IsA("TextLabel") then TweenService:Create(obj, TweenInfo.new(0.35, Enum.EasingStyle.Linear), { TextTransparency = 1, TextStrokeTransparency = 1 }):Play() task.delay(0.35, function() if obj and obj.Parent then obj:Destroy() end end) end end task.wait(0.35) cancel.Text = "Close" -- ── Minimise button (created before expansion so it sits at the top) ────── local minBtn = Instance.new("TextButton") minBtn.Name = "MinimiseBtn" minBtn.Size = UDim2.fromOffset(24, 24) minBtn.Position = UDim2.fromOffset(8, 6) minBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) minBtn.BorderSizePixel = 0 minBtn.TextColor3 = Color3.new(1, 1, 1) minBtn.Font = Enum.Font.GothamBold minBtn.TextSize = 16 minBtn.Text = "−" minBtn.ZIndex = 10 minBtn.Parent = frame local minBtnCorner = Instance.new("UICorner") minBtnCorner.CornerRadius = UDim.new(0, 6) minBtnCorner.Parent = minBtn local minBtnStroke = Instance.new("UIStroke") minBtnStroke.Color = Color3.fromRGB(90, 90, 90) minBtnStroke.Parent = minBtn -- Expand the frame now frame.AnchorPoint = Vector2.new(1, 0) TweenService:Create(frame, TweenInfo.new(0.45, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), { Size = UDim2.fromOffset(350, EXPANDED_HEIGHT), Position = UDim2.new(1, -20, 0, 20), }):Play() task.wait(0.45) cancel.Position = UDim2.new(1, -100, 1, -36) -- ── Shared helpers ──────────────────────────────────────────────────────── local function makeLabel(text, yPos) local lbl = Instance.new("TextLabel") lbl.BackgroundTransparency = 1 lbl.Size = UDim2.new(1, -100, 0, 40) lbl.Position = UDim2.fromOffset(15, yPos) lbl.Font = Enum.Font.Gotham lbl.TextSize = 18 lbl.TextColor3 = Color3.new(1, 1, 1) lbl.TextXAlignment = Enum.TextXAlignment.Left lbl.Text = text lbl.Parent = frame return lbl end local function makeSwitch(yPos) local sw = Instance.new("TextButton") sw.AutoButtonColor = false sw.Text = "" sw.Size = UDim2.fromOffset(52, 28) sw.Position = UDim2.new(1, -70, 0, yPos) sw.BackgroundColor3 = Color3.fromRGB(55, 55, 55) sw.BorderSizePixel = 0 sw.Parent = frame local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(1, 0) corner.Parent = sw local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(22, 22) knob.Position = UDim2.fromOffset(3, 3) knob.BackgroundColor3 = Color3.fromRGB(230, 230, 230) knob.BorderSizePixel = 0 knob.Parent = sw local knobCorner = Instance.new("UICorner") knobCorner.CornerRadius = UDim.new(1, 0) knobCorner.Parent = knob return sw, knob end local function animateSwitch(sw, knob, state) if state then TweenService:Create(sw, TweenInfo.new(0.2, Enum.EasingStyle.Quad), { BackgroundColor3 = Color3.fromRGB(0, 200, 70) }):Play() TweenService:Create(knob, TweenInfo.new(0.2, Enum.EasingStyle.Quad), { Position = UDim2.fromOffset(27, 3) }):Play() else TweenService:Create(sw, TweenInfo.new(0.2, Enum.EasingStyle.Quad), { BackgroundColor3 = Color3.fromRGB(55, 55, 55) }):Play() TweenService:Create(knob, TweenInfo.new(0.2, Enum.EasingStyle.Quad), { Position = UDim2.fromOffset(3, 3) }):Play() end end -- ── Row offsets ─────────────────────────────────────────────────────────── -- Offset labels/switches down by 36px to leave room for the minimise bar local ROW_OFFSET = 36 -- ── Row 1 (y=10): AutoCollect ───────────────────────────────────────────── makeLabel("AutoCollect", 10 + ROW_OFFSET) local acSwitch, acKnob = makeSwitch(16 + ROW_OFFSET) local function updateAutoCollect(state) autoCollectEnabled = state animateSwitch(acSwitch, acKnob, state) if state then startAutoCollect() end end acSwitch.MouseButton1Click:Connect(function() updateAutoCollect(not autoCollectEnabled) end) -- ── Row 2 (y=60): Teleports/sec ────────────────────────────────────────── local tpsLabel = Instance.new("TextLabel") tpsLabel.BackgroundTransparency = 1 tpsLabel.Size = UDim2.fromOffset(140, 30) tpsLabel.Position = UDim2.fromOffset(15, 65 + ROW_OFFSET) tpsLabel.Font = Enum.Font.Gotham tpsLabel.TextSize = 15 tpsLabel.TextColor3 = Color3.fromRGB(180, 180, 180) tpsLabel.TextXAlignment = Enum.TextXAlignment.Left tpsLabel.Text = "Teleports/sec" tpsLabel.Parent = frame local inputBox = Instance.new("TextBox") inputBox.Size = UDim2.fromOffset(90, 28) inputBox.Position = UDim2.new(1, -110, 0, 63 + ROW_OFFSET) inputBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40) inputBox.BorderSizePixel = 0 inputBox.Font = Enum.Font.GothamBold inputBox.TextSize = 15 inputBox.TextColor3 = Color3.new(1, 1, 1) inputBox.PlaceholderText = "80" inputBox.Text = "80" inputBox.ClearTextOnFocus = false inputBox.Parent = frame local inputCorner = Instance.new("UICorner") inputCorner.CornerRadius = UDim.new(0, 6) inputCorner.Parent = inputBox local inputStroke = Instance.new("UIStroke") inputStroke.Color = Color3.fromRGB(90, 90, 90) inputStroke.Parent = inputBox inputBox.FocusLost:Connect(function() local raw = tonumber(inputBox.Text) if raw and raw > 0 then raw = math.clamp(raw, 0.1, 100) collectDelay = 1 / raw inputBox.Text = tostring(raw) else inputBox.Text = tostring(math.round(1 / collectDelay * 10) / 10) end end) -- ── Row 3 (y=110): Speed ───────────────────────────────────────────────── makeLabel("Speed", 110 + ROW_OFFSET) local spSwitch, spKnob = makeSwitch(116 + ROW_OFFSET) local function updateSpeed(state) speedEnabled = state animateSwitch(spSwitch, spKnob, state) local character = player.Character local humanoid = character and character:FindFirstChildOfClass("Humanoid") if not humanoid then return end if state then savedWalkSpeed = humanoid.WalkSpeed humanoid.WalkSpeed = LOCK_SPEED startSpeedWatcher() else stopSpeedWatcher() humanoid.WalkSpeed = savedWalkSpeed end end spSwitch.MouseButton1Click:Connect(function() updateSpeed(not speedEnabled) end) player.CharacterAdded:Connect(function(newChar) newChar:WaitForChild("Humanoid", 10) if speedEnabled then local hum = newChar:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = LOCK_SPEED startSpeedWatcher() end end end) -- ── Row 4 (y=160): Collect stolen ──────────────────────────────────────── makeLabel("Collect stolen", 160 + ROW_OFFSET) local collectStolenBtn = Instance.new("TextButton") collectStolenBtn.Size = UDim2.fromOffset(90, 28) collectStolenBtn.Position = UDim2.new(1, -110, 0, 163 + ROW_OFFSET) collectStolenBtn.BackgroundColor3 = Color3.fromRGB(45, 45, 45) collectStolenBtn.BorderSizePixel = 0 collectStolenBtn.Font = Enum.Font.GothamBold collectStolenBtn.TextSize = 14 collectStolenBtn.TextColor3 = Color3.new(1, 1, 1) collectStolenBtn.Text = "Click me" collectStolenBtn.AutoButtonColor = false collectStolenBtn.Parent = frame local collectStolenCorner = Instance.new("UICorner") collectStolenCorner.CornerRadius = UDim.new(0, 8) collectStolenCorner.Parent = collectStolenBtn local collectStolenStroke = Instance.new("UIStroke") collectStolenStroke.Color = Color3.fromRGB(90, 90, 90) collectStolenStroke.Parent = collectStolenBtn collectStolenBtn.MouseButton1Click:Connect(function() if not selectedPlot then return end local teleportPart = selectedPlot:FindFirstChild("Teleport") if not teleportPart or not teleportPart:IsA("BasePart") then warn("Plot.Teleport not found or is not a BasePart") return end local character = player.Character local hrp = character and character:FindFirstChild("HumanoidRootPart") if hrp then hrp.CFrame = teleportPart.CFrame end end) collectStolenBtn.MouseButton1Down:Connect(function() TweenService:Create(collectStolenBtn, TweenInfo.new(0.08, Enum.EasingStyle.Linear), { BackgroundColor3 = Color3.fromRGB(25, 25, 25) }):Play() end) collectStolenBtn.MouseButton1Up:Connect(function() TweenService:Create(collectStolenBtn, TweenInfo.new(0.12, Enum.EasingStyle.Linear), { BackgroundColor3 = Color3.fromRGB(45, 45, 45) }):Play() end) -- ── Row 5 (y=210): Auto Lock ────────────────────────────────────────────── makeLabel("Auto lock", 210 + ROW_OFFSET) local alSwitch, alKnob = makeSwitch(216 + ROW_OFFSET) local function updateAutoLock(state) autoLockEnabled = state animateSwitch(alSwitch, alKnob, state) if state then startAutoLock() end end alSwitch.MouseButton1Click:Connect(function() updateAutoLock(not autoLockEnabled) end) -- ── Minimise toggle ─────────────────────────────────────────────────────── local function getMinimisableDescendants() local list = {} for _, obj in ipairs(frame:GetDescendants()) do if obj ~= minBtn and not minBtn:IsAncestorOf(obj) and obj ~= cancel and not cancel:IsAncestorOf(obj) and (obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox") or obj:IsA("Frame") or obj:IsA("UIStroke")) then table.insert(list, obj) end end return list end minBtn.MouseButton1Click:Connect(function() minimised = not minimised local tweenInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) if minimised then for _, obj in ipairs(getMinimisableDescendants()) do if obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox") then TweenService:Create(obj, tweenInfo, { TextTransparency = 1, BackgroundTransparency = 1 }):Play() elseif obj:IsA("Frame") then TweenService:Create(obj, tweenInfo, { BackgroundTransparency = 1 }):Play() elseif obj:IsA("UIStroke") then TweenService:Create(obj, tweenInfo, { Transparency = 1 }):Play() end end task.delay(0.2, function() TweenService:Create(frame, tweenInfo, { Size = UDim2.fromOffset(350, MINI_HEIGHT) }):Play() end) minBtn.Text = "+" else TweenService:Create(frame, tweenInfo, { Size = UDim2.fromOffset(350, EXPANDED_HEIGHT) }):Play() task.delay(0.2, function() for _, obj in ipairs(getMinimisableDescendants()) do if obj:IsA("TextLabel") or obj:IsA("TextButton") or obj:IsA("TextBox") then TweenService:Create(obj, tweenInfo, { TextTransparency = 0, BackgroundTransparency = obj.BackgroundTransparency == 1 and (obj:IsA("TextLabel") and 1 or 0) or obj.BackgroundTransparency }):Play() elseif obj:IsA("Frame") then TweenService:Create(obj, tweenInfo, { BackgroundTransparency = 0 }):Play() elseif obj:IsA("UIStroke") then TweenService:Create(obj, tweenInfo, { Transparency = 0 }):Play() end end end) minBtn.Text = "−" end end) -- Initialise all switches to off updateAutoCollect(false) updateSpeed(false) updateAutoLock(false) end -- ─── Plot selection ─────────────────────────────────────────────────────────── for _, plot in ipairs(workspace.Plots:GetChildren()) do local lockHitbox = plot:FindFirstChild("LockHitbox") if lockHitbox and lockHitbox:IsA("BasePart") then local highlight = Instance.new("Highlight") highlight.Adornee = lockHitbox highlight.FillColor = Color3.fromRGB(0, 170, 255) highlight.FillTransparency = 0.6 highlight.OutlineColor = Color3.fromRGB(255, 255, 255) highlight.OutlineTransparency = 0 highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop highlight.Parent = lockHitbox highlights[lockHitbox] = highlight end end clickConnection = mouse.Button1Down:Connect(function() if finished then return end local target = mouse.Target if not target then return end if highlights[target] then finished = true selectedPlot = target.Parent cleanup() task.spawn(createMainMenu) end end) cancel.MouseButton1Click:Connect(function() finished = true cleanup() task.spawn(unloadScript) end)