local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local RunService = game:GetService("RunService") local TweenService = game:GetService("TweenService") local player = Players.LocalPlayer local mouse = player:GetMouse() local character = player.Character or player.CharacterAdded:Wait() local humanoidRootPart = character:WaitForChild("HumanoidRootPart") local humanoid = character:WaitForChild("Humanoid") local screenGui = Instance.new("ScreenGui") screenGui.Parent = player:WaitForChild("PlayerGui") local toggleFrame = Instance.new("Frame") toggleFrame.Size = UDim2.new(0, 150, 0, 50) toggleFrame.Position = UDim2.new(0, 10, 0, 10) toggleFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 40) toggleFrame.BorderSizePixel = 0 toggleFrame.Parent = screenGui local toggleCorner = Instance.new("UICorner") toggleCorner.CornerRadius = UDim.new(0, 8) toggleCorner.Parent = toggleFrame local toggleButton = Instance.new("TextButton") toggleButton.Size = UDim2.new(1, 0, 1, 0) toggleButton.BackgroundColor3 = Color3.fromRGB(50, 50, 55) toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255) toggleButton.TextSize = 14 toggleButton.Font = Enum.Font.GothamBold toggleButton.Text = "Selection: OFF" toggleButton.Parent = toggleFrame local toggleBtnCorner = Instance.new("UICorner") toggleBtnCorner.CornerRadius = UDim.new(0, 6) toggleBtnCorner.Parent = toggleButton local sideFrame = Instance.new("Frame") sideFrame.Size = UDim2.new(0, 200, 0, 300) sideFrame.Position = UDim2.new(1, -210, 0, 10) sideFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 40) sideFrame.BorderSizePixel = 0 sideFrame.Parent = screenGui local sideCorner = Instance.new("UICorner") sideCorner.CornerRadius = UDim.new(0, 10) sideCorner.Parent = sideFrame local sideTitleBar = Instance.new("Frame") sideTitleBar.Size = UDim2.new(1, 0, 0, 32) sideTitleBar.BackgroundColor3 = Color3.fromRGB(50, 50, 55) sideTitleBar.BorderSizePixel = 0 sideTitleBar.Parent = sideFrame local sideTitleCorner = Instance.new("UICorner") sideTitleCorner.CornerRadius = UDim.new(0, 10) sideTitleCorner.Parent = sideTitleBar local sideTitleFix = Instance.new("Frame") sideTitleFix.Size = UDim2.new(1, 0, 0, 10) sideTitleFix.Position = UDim2.new(0, 0, 1, -10) sideTitleFix.BackgroundColor3 = Color3.fromRGB(50, 50, 55) sideTitleFix.BorderSizePixel = 0 sideTitleFix.Parent = sideTitleBar local sideTitle = Instance.new("TextLabel") sideTitle.Size = UDim2.new(1, -40, 1, 0) sideTitle.Position = UDim2.new(0, 10, 0, 0) sideTitle.BackgroundTransparency = 1 sideTitle.TextColor3 = Color3.fromRGB(255, 255, 255) sideTitle.Text = "📍 Selected Parts" sideTitle.Font = Enum.Font.GothamBold sideTitle.TextSize = 13 sideTitle.TextXAlignment = Enum.TextXAlignment.Left sideTitle.Parent = sideTitleBar local sideMinBtn = Instance.new("TextButton") sideMinBtn.Size = UDim2.new(0, 26, 0, 26) sideMinBtn.Position = UDim2.new(1, -30, 0, 3) sideMinBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 75) sideMinBtn.TextColor3 = Color3.fromRGB(255, 255, 255) sideMinBtn.Text = "—" sideMinBtn.Font = Enum.Font.GothamBold sideMinBtn.TextSize = 16 sideMinBtn.Parent = sideTitleBar local sideMinCorner = Instance.new("UICorner") sideMinCorner.CornerRadius = UDim.new(0, 6) sideMinCorner.Parent = sideMinBtn local partList = Instance.new("ScrollingFrame") partList.Size = UDim2.new(1, -10, 1, -42) partList.Position = UDim2.new(0, 5, 0, 37) partList.BackgroundTransparency = 1 partList.ScrollBarThickness = 4 partList.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 100) partList.CanvasSize = UDim2.new(0, 0, 0, 0) partList.Parent = sideFrame local partLayout = Instance.new("UIListLayout") partLayout.Padding = UDim.new(0, 5) partLayout.SortOrder = Enum.SortOrder.LayoutOrder partLayout.Parent = partList local notificationFrame = Instance.new("Frame") notificationFrame.Size = UDim2.new(0, 250, 0, 100) notificationFrame.Position = UDim2.new(1, -260, 1, -110) notificationFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 40) notificationFrame.BorderSizePixel = 0 notificationFrame.Parent = screenGui local notificationCorner = Instance.new("UICorner") notificationCorner.CornerRadius = UDim.new(0, 10) notificationCorner.Parent = notificationFrame local notificationTitle = Instance.new("TextLabel") notificationTitle.Size = UDim2.new(1, -30, 0, 20) notificationTitle.Position = UDim2.new(0, 10, 0, 5) notificationTitle.BackgroundTransparency = 1 notificationTitle.TextColor3 = Color3.fromRGB(255, 255, 255) notificationTitle.Text = "Notifications" notificationTitle.Font = Enum.Font.GothamBold notificationTitle.TextSize = 12 notificationTitle.TextXAlignment = Enum.TextXAlignment.Left notificationTitle.Parent = notificationFrame local notificationXBtn = Instance.new("TextButton") notificationXBtn.Size = UDim2.new(0, 20, 0, 20) notificationXBtn.Position = UDim2.new(1, -25, 0, 5) notificationXBtn.BackgroundColor3 = Color3.fromRGB(180, 60, 60) notificationXBtn.TextColor3 = Color3.fromRGB(255, 255, 255) notificationXBtn.Text = "X" notificationXBtn.Font = Enum.Font.GothamBold notificationXBtn.TextSize = 12 notificationXBtn.Parent = notificationFrame local notificationXCorner = Instance.new("UICorner") notificationXCorner.CornerRadius = UDim.new(0, 4) notificationXCorner.Parent = notificationXBtn local notificationList = Instance.new("ScrollingFrame") notificationList.Size = UDim2.new(1, -10, 1, -35) notificationList.Position = UDim2.new(0, 5, 0, 30) notificationList.BackgroundTransparency = 1 notificationList.ScrollBarThickness = 4 notificationList.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 100) notificationList.CanvasSize = UDim2.new(0, 0, 0, 0) notificationList.Parent = notificationFrame local notificationLayout = Instance.new("UIListLayout") notificationLayout.Padding = UDim.new(0, 3) notificationLayout.SortOrder = Enum.SortOrder.LayoutOrder notificationLayout.Parent = notificationList local function playSound(soundId, volume) local sound = Instance.new("Sound") sound.SoundId = soundId sound.Volume = volume or 0.5 sound.Parent = workspace sound:Play() sound.Ended:Connect(function() sound:Destroy() end) end local selectionEnabled = false local selectedParts = {} local currentHighlight = nil local sideMinimized = false local activeEntries = {} local scriptEnabled = true local notificationHistory = {} local function createHighlight(part) if not scriptEnabled then return end if currentHighlight then currentHighlight:Destroy() end if part and part:IsA("BasePart") then local highlight = Instance.new("Highlight") highlight.Adornee = part highlight.FillColor = Color3.fromRGB(0, 255, 0) highlight.OutlineColor = Color3.fromRGB(255, 255, 255) highlight.FillTransparency = 0.5 highlight.OutlineTransparency = 0 highlight.Parent = part currentHighlight = highlight end end local function removeHighlight() if currentHighlight then currentHighlight:Destroy() currentHighlight = nil end end local function isPartValid(part) return part and part:IsDescendantOf(game) and part:IsA("BasePart") end local function showNotification(message) if not scriptEnabled then return end local notificationLabel = Instance.new("TextLabel") notificationLabel.Size = UDim2.new(1, -5, 0, 20) notificationLabel.BackgroundTransparency = 1 notificationLabel.TextColor3 = Color3.fromRGB(200, 200, 200) notificationLabel.Text = message notificationLabel.Font = Enum.Font.Gotham notificationLabel.TextSize = 10 notificationLabel.TextXAlignment = Enum.TextXAlignment.Left notificationLabel.Parent = notificationList table.insert(notificationHistory, notificationLabel) notificationList.CanvasSize = UDim2.new(0, 0, 0, #notificationHistory * 23) task.delay(5, function() if notificationLabel and notificationLabel.Parent then local tween = TweenService:Create(notificationLabel, TweenInfo.new(1), {TextTransparency = 1}) tween:Play() tween.Completed:Wait() notificationLabel:Destroy() table.remove(notificationHistory, table.find(notificationHistory, notificationLabel)) notificationList.CanvasSize = UDim2.new(0, 0, 0, #notificationHistory * 23) end end) end local function updatePartList() if not scriptEnabled then return end local validParts = {} for _, part in ipairs(selectedParts) do if isPartValid(part) then table.insert(validParts, part) else showNotification("Part deselected: " .. part.Name .. " (deleted)") end end selectedParts = validParts for _, child in ipairs(partList:GetChildren()) do if child:IsA("Frame") then child:Destroy() end end activeEntries = {} local yOffset = 0 for i, part in ipairs(selectedParts) do local partFrame = Instance.new("Frame") partFrame.Size = UDim2.new(1, -5, 0, 60) partFrame.BackgroundColor3 = Color3.fromRGB(50, 50, 55) partFrame.BorderSizePixel = 0 partFrame.LayoutOrder = i partFrame.Parent = partList local partCorner = Instance.new("UICorner") partCorner.CornerRadius = UDim.new(0, 6) partCorner.Parent = partFrame local partName = Instance.new("TextLabel") partName.Size = UDim2.new(1, 0, 0, 20) partName.Position = UDim2.new(0, 8, 0, 5) partName.BackgroundTransparency = 1 partName.TextColor3 = Color3.fromRGB(255, 255, 255) partName.Text = part.Name partName.Font = Enum.Font.GothamBold partName.TextSize = 11 partName.TextXAlignment = Enum.TextXAlignment.Left partName.Parent = partFrame local posText = Instance.new("TextLabel") posText.Size = UDim2.new(1, 0, 0, 15) posText.Position = UDim2.new(0, 8, 0, 22) posText.BackgroundTransparency = 1 posText.TextColor3 = Color3.fromRGB(150, 150, 150) posText.Text = string.format("%.1f, %.1f, %.1f", part.Position.X, part.Position.Y, part.Position.Z) posText.Font = Enum.Font.Code posText.TextSize = 10 posText.TextXAlignment = Enum.TextXAlignment.Left posText.Parent = partFrame table.insert(activeEntries, {part = part, posText = posText}) local teleportButton = Instance.new("TextButton") teleportButton.Size = UDim2.new(0, 35, 0, 20) teleportButton.Position = UDim2.new(0, 8, 1, -25) teleportButton.BackgroundColor3 = Color3.fromRGB(0, 160, 120) teleportButton.TextColor3 = Color3.fromRGB(255, 255, 255) teleportButton.Text = "Go" teleportButton.Font = Enum.Font.GothamBold teleportButton.TextSize = 10 teleportButton.Parent = partFrame local teleportCorner = Instance.new("UICorner") teleportCorner.CornerRadius = UDim.new(0, 4) teleportCorner.Parent = teleportButton local deleteButton = Instance.new("TextButton") deleteButton.Size = UDim2.new(0, 22, 0, 22) deleteButton.Position = UDim2.new(1, -27, 0, 5) deleteButton.BackgroundColor3 = Color3.fromRGB(180, 60, 60) deleteButton.TextColor3 = Color3.fromRGB(255, 255, 255) deleteButton.Text = "✕" deleteButton.Font = Enum.Font.GothamBold deleteButton.TextSize = 12 deleteButton.Parent = partFrame local deleteCorner = Instance.new("UICorner") deleteCorner.CornerRadius = UDim.new(0, 4) deleteCorner.Parent = deleteButton teleportButton.MouseButton1Click:Connect(function() if scriptEnabled and isPartValid(part) then playSound("rbxassetid://12221967", 0.3) humanoidRootPart.CFrame = CFrame.new(part.Position + Vector3.new(0, 5, 0)) end end) deleteButton.MouseButton1Click:Connect(function() if scriptEnabled then playSound("rbxassetid://12221967", 0.3) showNotification("Part deselected: " .. part.Name) table.remove(selectedParts, i) updatePartList() end end) yOffset = yOffset + 65 end partList.CanvasSize = UDim2.new(0, 0, 0, yOffset) end local function updatePositions() if not scriptEnabled then return end for _, entry in ipairs(activeEntries) do local part = entry.part local posText = entry.posText if isPartValid(part) then posText.Text = string.format("%.1f, %.1f, %.1f", part.Position.X, part.Position.Y, part.Position.Z) end end end toggleButton.MouseButton1Click:Connect(function() if not scriptEnabled then return end playSound("rbxassetid://12221967", 0.3) selectionEnabled = not selectionEnabled toggleButton.Text = selectionEnabled and "Selection: ON" or "Selection: OFF" showNotification(selectionEnabled and "Selection enabled" or "Selection disabled") if not selectionEnabled then removeHighlight() end end) sideMinBtn.MouseButton1Click:Connect(function() if not scriptEnabled then return end playSound("rbxassetid://12221967", 0.3) sideMinimized = not sideMinimized partList.Visible = not sideMinimized if sideMinimized then sideFrame.Size = UDim2.new(0, 200, 0, 32) sideMinBtn.Text = "+" else sideFrame.Size = UDim2.new(0, 200, 0, 300) sideMinBtn.Text = "—" end end) notificationXBtn.MouseButton1Click:Connect(function() scriptEnabled = false screenGui:Destroy() end) local toggleDragging = false local toggleDragStart, toggleStartPos toggleFrame.InputBegan:Connect(function(input) if scriptEnabled and (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then toggleDragging = true toggleDragStart = input.Position toggleStartPos = toggleFrame.Position end end) toggleFrame.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then toggleDragging = false end end) local sideDragging = false local sideDragStart, sideStartPos sideTitleBar.InputBegan:Connect(function(input) if scriptEnabled and (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) then sideDragging = true sideDragStart = input.Position sideStartPos = sideFrame.Position end end) sideTitleBar.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then sideDragging = false end end) UserInputService.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then if toggleDragging then local delta = input.Position - toggleDragStart toggleFrame.Position = UDim2.new( toggleStartPos.X.Scale, toggleStartPos.X.Offset + delta.X, toggleStartPos.Y.Scale, toggleStartPos.Y.Offset + delta.Y ) end if sideDragging then local delta = input.Position - sideDragStart sideFrame.Position = UDim2.new( sideStartPos.X.Scale, sideStartPos.X.Offset + delta.X, sideStartPos.Y.Scale, sideStartPos.Y.Offset + delta.Y ) end end end) mouse.Move:Connect(function() if scriptEnabled and selectionEnabled then local target = mouse.Target if target and target:IsA("BasePart") then createHighlight(target) else removeHighlight() end else removeHighlight() end end) mouse.Button1Down:Connect(function() if scriptEnabled and selectionEnabled then local target = mouse.Target if target and target:IsA("BasePart") and not table.find(selectedParts, target) then playSound("rbxassetid://12222005", 0.5) table.insert(selectedParts, target) updatePartList() showNotification("Part selected: " .. target.Name) end end end) RunService.RenderStepped:Connect(updatePositions) updatePartList()