local player = game.Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local screenGui = Instance.new("ScreenGui") screenGui.Name = "CustomExplorer" screenGui.Parent = playerGui screenGui.ResetOnSpawn = false screenGui.DisplayOrder = 1 local mainFrame = Instance.new("Frame") mainFrame.Parent = screenGui mainFrame.Size = UDim2.new(0, 250, 0, 400) mainFrame.Position = UDim2.new(0.6, 0, 0.2, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 40) -- Darker background mainFrame.BorderSizePixel = 0 local dragBar = Instance.new("Frame") dragBar.Parent = mainFrame dragBar.Size = UDim2.new(1, 0, 0, 20) dragBar.BackgroundColor3 = Color3.fromRGB(40, 40, 50) -- Darker title bar dragBar.BorderSizePixel = 0 dragBar.Position = UDim2.new(0, 0, 0, 0) local dragTitle = Instance.new("TextLabel") dragTitle.Parent = dragBar dragTitle.Size = UDim2.new(0.8, 0, 1, 0) -- Adjusted for buttons dragTitle.BackgroundTransparency = 1 dragTitle.Text = "Explorer" dragTitle.TextColor3 = Color3.fromRGB(200, 200, 210) -- Lighter text dragTitle.TextSize = 16 dragTitle.Font = Enum.Font.SourceSansBold dragTitle.TextXAlignment = Enum.TextXAlignment.Center dragTitle.BorderSizePixel = 0 -- Minimize Button local minimizeButton = Instance.new("TextButton") minimizeButton.Parent = dragBar minimizeButton.Size = UDim2.new(0, 20, 0, 20) minimizeButton.Position = UDim2.new(0.9, 0, 0, 0) minimizeButton.BackgroundColor3 = Color3.fromRGB(50, 50, 60) -- Subtle button color minimizeButton.Text = "−" minimizeButton.TextColor3 = Color3.fromRGB(200, 200, 210) minimizeButton.TextSize = 14 minimizeButton.Font = Enum.Font.SourceSansBold minimizeButton.BorderSizePixel = 0 local minCorner = Instance.new("UICorner") minCorner.CornerRadius = UDim.new(0, 4) minCorner.Parent = minimizeButton -- Close Button local closeButton = Instance.new("TextButton") closeButton.Parent = dragBar closeButton.Size = UDim2.new(0, 20, 0, 20) closeButton.Position = UDim2.new(1, -25, 0, 0) closeButton.BackgroundColor3 = Color3.fromRGB(150, 50, 50) -- Red accent for close closeButton.Text = "×" closeButton.TextColor3 = Color3.fromRGB(255, 255, 255) closeButton.TextSize = 14 closeButton.Font = Enum.Font.SourceSansBold closeButton.BorderSizePixel = 0 local closeCorner = Instance.new("UICorner") closeCorner.CornerRadius = UDim.new(0, 4) closeCorner.Parent = closeButton local explorerFrame = Instance.new("Frame") explorerFrame.Parent = mainFrame explorerFrame.Size = UDim2.new(1, 0, 0.7, 0) explorerFrame.BackgroundTransparency = 1 explorerFrame.Position = UDim2.new(0, 0, 0, 20) local scrollingFrame = Instance.new("ScrollingFrame") scrollingFrame.Parent = explorerFrame scrollingFrame.Position = UDim2.new(0, 0, 0, 0) scrollingFrame.Size = UDim2.new(1, 0, 1, 0) scrollingFrame.BackgroundTransparency = 1 scrollingFrame.BorderSizePixel = 0 scrollingFrame.ScrollBarThickness = 6 scrollingFrame.ScrollBarImageColor3 = Color3.fromRGB(80, 80, 90) scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0) local listLayout = Instance.new("UIListLayout") listLayout.Parent = scrollingFrame listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Padding = UDim.new(0, 2) listLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() scrollingFrame.CanvasSize = UDim2.new(0, 0, 0, listLayout.AbsoluteContentSize.Y) end) local propertiesFrame = Instance.new("Frame") propertiesFrame.Parent = mainFrame propertiesFrame.Size = UDim2.new(1, 0, 0.3, 0) propertiesFrame.Position = UDim2.new(0, 0, 0.7, 0) propertiesFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 45) -- Slightly lighter dark propertiesFrame.BorderSizePixel = 0 local propCorner = Instance.new("UICorner") propCorner.CornerRadius = UDim.new(0, 4) propCorner.Parent = propertiesFrame local propertiesDragBar = Instance.new("Frame") propertiesDragBar.Parent = propertiesFrame propertiesDragBar.Size = UDim2.new(1, 0, 0, 20) propertiesDragBar.BackgroundColor3 = Color3.fromRGB(40, 40, 50) -- Matches title bar propertiesDragBar.BorderSizePixel = 0 local propertiesTitle = Instance.new("TextLabel") propertiesTitle.Parent = propertiesDragBar propertiesTitle.Size = UDim2.new(1, 0, 1, 0) propertiesTitle.BackgroundTransparency = 1 propertiesTitle.Text = "Properties" propertiesTitle.TextColor3 = Color3.fromRGB(200, 200, 210) propertiesTitle.TextSize = 14 propertiesTitle.Font = Enum.Font.SourceSansBold propertiesTitle.TextXAlignment = Enum.TextXAlignment.Center propertiesTitle.BorderSizePixel = 0 local propertiesSearch = Instance.new("TextBox") propertiesSearch.Parent = propertiesFrame propertiesSearch.Size = UDim2.new(1, -10, 0, 25) propertiesSearch.Position = UDim2.new(0, 5, 0, 25) propertiesSearch.BackgroundColor3 = Color3.fromRGB(45, 45, 55) -- Darker search box propertiesSearch.Text = "Search Properties" propertiesSearch.TextColor3 = Color3.fromRGB(140, 140, 150) propertiesSearch.TextSize = 14 propertiesSearch.Font = Enum.Font.SourceSans propertiesSearch.BorderSizePixel = 0 local searchCorner = Instance.new("UICorner") searchCorner.CornerRadius = UDim.new(0, 4) searchCorner.Parent = propertiesSearch local propertiesScrolling = Instance.new("ScrollingFrame") propertiesScrolling.Parent = propertiesFrame propertiesScrolling.Position = UDim2.new(0, 5, 0, 55) propertiesScrolling.Size = UDim2.new(1, -10, 1, -60) propertiesScrolling.BackgroundTransparency = 1 propertiesScrolling.BorderSizePixel = 0 propertiesScrolling.ScrollBarThickness = 6 propertiesScrolling.ScrollBarImageColor3 = Color3.fromRGB(80, 80, 90) propertiesScrolling.CanvasSize = UDim2.new(0, 0, 0, 0) local propertiesLayout = Instance.new("UIListLayout") propertiesLayout.Parent = propertiesScrolling propertiesLayout.SortOrder = Enum.SortOrder.LayoutOrder propertiesLayout.Padding = UDim.new(0, 2) propertiesLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() propertiesScrolling.CanvasSize = UDim2.new(0, 0, 0, propertiesLayout.AbsoluteContentSize.Y) end) -- Resizing functionality local resizing local resizeInput local resizeStart local startSize local resizeHandle = Instance.new("Frame") resizeHandle.Parent = mainFrame resizeHandle.Size = UDim2.new(0, 10, 0, 10) resizeHandle.Position = UDim2.new(1, -10, 1, -10) resizeHandle.BackgroundColor3 = Color3.fromRGB(50, 50, 60) -- Matches minimize button resizeHandle.BorderSizePixel = 0 local resizeCorner = Instance.new("UICorner") resizeCorner.CornerRadius = UDim.new(0, 4) resizeCorner.Parent = resizeHandle resizeHandle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then resizing = true resizeStart = input.Position startSize = mainFrame.Size input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then resizing = false end end) end end) resizeHandle.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then resizeInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == resizeInput and resizing then local delta = input.Position - resizeStart local newWidth = math.max(150, startSize.X.Offset + delta.X) local newHeight = math.max(200, startSize.Y.Offset + delta.Y) mainFrame.Size = UDim2.new(0, newWidth, 0, newHeight) explorerFrame.Size = UDim2.new(1, 0, 0.7, 0) propertiesFrame.Size = UDim2.new(1, 0, 0.3, 0) propertiesFrame.Position = UDim2.new(0, 0, 0.7, 0) resizeHandle.Position = UDim2.new(1, -10, 1, -10) end end) -- Dragging functionality for main frame local dragging local dragInput local dragStart local startPos dragBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = true dragStart = input.Position startPos = mainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) dragBar.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging 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) -- Dragging functionality for properties frame local propDragging local propDragInput local propDragStart local propStartPos propertiesDragBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then propDragging = true propDragStart = input.Position propStartPos = propertiesFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then propDragging = false end end) end end) propertiesDragBar.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then propDragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == propDragInput and propDragging then local delta = input.Position - propDragStart local newY = math.max(20, propStartPos.Y.Offset + delta.Y) if newY + propertiesFrame.Size.Y.Offset <= mainFrame.Size.Y.Offset then propertiesFrame.Position = UDim2.new(0, 0, 0, newY) explorerFrame.Size = UDim2.new(1, 0, 0, mainFrame.Size.Y.Offset - propertiesFrame.Size.Y.Offset) end end end) local selectedInstance = nil local selectedNode = nil local isMinimized = false local defaultIcon = "rbxasset://textures/StudioIcon.png" local function getClassIcon(className) local iconMap = { ["Part"] = "rbxasset://textures/ClassImages.png", ["Camera"] = "rbxasset://textures/ClassImages.png", ["Terrain"] = "rbxasset://textures/ClassImages.png", ["Model"] = "rbxasset://textures/ClassImages.png", ["Workspace"] = "rbxasset://textures/ClassImages.png", ["StarterGui"] = "rbxasset://textures/ClassImages.png", ["ReplicatedStorage"] = "rbxasset://textures/ClassImages.png", ["CoreGui"] = "rbxasset://textures/ClassImages.png", ["Lighting"] = "rbxasset://textures/ClassImages.png", ["LocalScript"] = "rbxasset://textures/ClassImages.png", ["Script"] = "rbxasset://textures/ClassImages.png", ["Humanoid"] = "rbxasset://textures/ClassImages.png", ["Accessory"] = "rbxasset://textures/ClassImages.png", ["BodyColors"] = "rbxasset://textures/ClassImages.png", ["Pants"] = "rbxasset://textures/ClassImages.png", ["Shirt"] = "rbxasset://textures/ClassImages.png", ["ScreenGui"] = "rbxasset://textures/ClassImages.png", ["Folder"] = "rbxasset://textures/ClassImages.png", ["Players"] = "rbxasset://textures/ClassImages.png", } return iconMap[className] or defaultIcon end local function getClassIconOffset(className) local offsets = { ["Part"] = Vector2.new(16, 0), ["Camera"] = Vector2.new(80, 0), ["Terrain"] = Vector2.new(176, 0), ["Model"] = Vector2.new(48, 0), ["Workspace"] = Vector2.new(64, 0), ["StarterGui"] = Vector2.new(128, 0), ["ReplicatedStorage"] = Vector2.new(144, 0), ["CoreGui"] = Vector2.new(144, 0), ["Lighting"] = Vector2.new(112, 0), ["LocalScript"] = Vector2.new(96, 0), ["Script"] = Vector2.new(80, 0), ["Humanoid"] = Vector2.new(240, 0), ["Accessory"] = Vector2.new(320, 0), ["BodyColors"] = Vector2.new(288, 0), ["Pants"] = Vector2.new(208, 0), ["Shirt"] = Vector2.new(192, 0), ["ScreenGui"] = Vector2.new(0, 16), ["Folder"] = Vector2.new(0, 32), ["Players"] = Vector2.new(160, 0), } return offsets[className] or Vector2.new(0, 0) end -- Context Menu System local contextMenuGui = Instance.new("ScreenGui") contextMenuGui.Name = "ContextMenuGui" contextMenuGui.Parent = playerGui contextMenuGui.ResetOnSpawn = false contextMenuGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling contextMenuGui.DisplayOrder = 2 local contextMenuFrame = Instance.new("Frame") contextMenuFrame.Parent = contextMenuGui contextMenuFrame.Size = UDim2.new(0, 150, 0, 30) contextMenuFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 50) -- Matches title bar contextMenuFrame.BorderSizePixel = 0 contextMenuFrame.Visible = false local contextCorner = Instance.new("UICorner") contextCorner.CornerRadius = UDim.new(0, 4) contextCorner.Parent = contextMenuFrame local deleteButton = Instance.new("TextButton") deleteButton.Parent = contextMenuFrame deleteButton.Size = UDim2.new(1, 0, 1, 0) deleteButton.BackgroundTransparency = 1 deleteButton.Text = "Delete" deleteButton.TextColor3 = Color3.fromRGB(200, 50, 50) deleteButton.TextSize = 14 deleteButton.Font = Enum.Font.SourceSansBold deleteButton.BorderSizePixel = 0 deleteButton.ZIndex = 2 local deleteIcon = Instance.new("ImageLabel") deleteIcon.Parent = contextMenuFrame deleteIcon.Size = UDim2.new(0, 16, 0, 16) deleteIcon.Position = UDim2.new(0, 4, 0.5, -8) deleteIcon.Image = "rbxasset://textures/Delete.png" deleteIcon.BackgroundTransparency = 1 deleteIcon.ZIndex = 2 local connections = {} local function showContextMenu(position, targetInstance) print("Attempting to show context menu at:", position.X, position.Y, "Instance:", targetInstance and targetInstance.Name or "nil") -- Debug contextMenuFrame.Position = UDim2.new(0, math.clamp(position.X, 0, screenGui.AbsoluteSize.X - 150), 0, math.clamp(position.Y, 0, screenGui.AbsoluteSize.Y - 30)) contextMenuFrame.Visible = true print("Context menu frame position:", contextMenuFrame.Position.X.Offset, contextMenuFrame.Position.Y.Offset, "Visible:", contextMenuFrame.Visible) -- Debug selectedInstance = targetInstance local deleteConnection = deleteButton.MouseButton1Click:Connect(function() print("Delete button clicked, instance:", selectedInstance and selectedInstance.Name or "nil") -- Debug if selectedInstance then selectedInstance:Destroy() contextMenuFrame.Visible = false updateProperties() end for _, conn in pairs(connections) do conn:Disconnect() end connections = {} end) table.insert(connections, deleteConnection) local closeConnection = UserInputService.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 and not contextMenuFrame:FindFirstChildWhichIsA("TextButton"):IsDescendantOf(input.UserInputService:GetFocused()) then print("Closing context menu") -- Debug contextMenuFrame.Visible = false for _, conn in pairs(connections) do conn:Disconnect() end connections = {} end end) table.insert(connections, closeConnection) end local function updateProperties() for _, child in ipairs(propertiesScrolling:GetChildren()) do if child:IsA("Frame") then child:Destroy() end end if not selectedInstance then return end local commonProperties = { "Name", "ClassName", "Parent", "Position", "Size", "Transparency", "Color", "Material", "Enabled", "Visible", "Anchored", "CanCollide", "Locked", "Orientation", "Rotation", "Scale", "Reflectance", "BrickColor", "Shape", "CastShadow", "CollisionGroup", "Mass", "Velocity", "AngularVelocity", "AssemblyAngularVelocity", "AssemblyLinearVelocity", "AssemblyMass", "AssemblyRootPart", "PivotOffset", "WorldPivot", "CFrame", "BackgroundColor3", "BackgroundTransparency", "BorderColor3", "BorderSizePixel", "ZIndex", "Active", "AutoLocalize", "ClipsDescendants", "Draggable", "Selectable", "Text", "TextColor3", "TextSize", "Font", "TextWrapped", "TextXAlignment", "TextYAlignment" } for _, propName in ipairs(commonProperties) do local row = Instance.new("Frame") row.Parent = propertiesScrolling row.Size = UDim2.new(1, 0, 0, 25) row.BackgroundTransparency = 1 local propLabel = Instance.new("TextLabel") propLabel.Parent = row propLabel.Size = UDim2.new(0.5, 0, 1, 0) propLabel.BackgroundTransparency = 1 propLabel.Text = propName propLabel.TextColor3 = Color3.fromRGB(200, 200, 210) propLabel.TextSize = 14 propLabel.Font = Enum.Font.SourceSans propLabel.TextXAlignment = Enum.TextXAlignment.Left propLabel.BorderSizePixel = 0 local valueBox local success, value = pcall(function() return selectedInstance[propName] end) if not success then value = "Error" end if typeof(value) == "boolean" then valueBox = Instance.new("TextButton") valueBox.Text = value and "✔" or "✖" valueBox.TextColor3 = value and Color3.fromRGB(0, 200, 0) or Color3.fromRGB(200, 0, 0) valueBox.MouseButton1Click:Connect(function() selectedInstance[propName] = not value updateProperties() end) elseif typeof(value) == "string" or typeof(value) == "number" then valueBox = Instance.new("TextBox") valueBox.Text = tostring(value) valueBox.TextColor3 = Color3.fromRGB(200, 200, 210) valueBox.TextSize = 14 valueBox.Font = Enum.Font.SourceSans valueBox.TextXAlignment = Enum.TextXAlignment.Left valueBox.BorderSizePixel = 0 if propName == "Name" then valueBox.FocusLost:Connect(function(enterPressed) if enterPressed then selectedInstance.Name = valueBox.Text updateProperties() end end) end else valueBox = Instance.new("TextLabel") valueBox.Text = tostring(value) valueBox.TextColor3 = Color3.fromRGB(200, 200, 210) valueBox.TextSize = 14 valueBox.Font = Enum.Font.SourceSans valueBox.TextXAlignment = Enum.TextXAlignment.Left end valueBox.Parent = row valueBox.Position = UDim2.new(0.5, 0, 0, 0) valueBox.Size = UDim2.new(0.5, 0, 1, 0) valueBox.BackgroundTransparency = 1 valueBox.BorderSizePixel = 0 end end local function createNode(instance, parentContainer, depth, parentUpdate) depth = depth or 0 parentUpdate = parentUpdate or function() end local nodeFrame = Instance.new("Frame") nodeFrame.Parent = parentContainer nodeFrame.Size = UDim2.new(1, 0, 0, 25) nodeFrame.BackgroundTransparency = 1 nodeFrame.BorderSizePixel = 0 local highlight = Instance.new("Frame") highlight.Name = "Highlight" highlight.Parent = nodeFrame highlight.Size = UDim2.new(1, 0, 1, 0) highlight.BackgroundColor3 = Color3.fromRGB(50, 50, 60) highlight.BackgroundTransparency = 1 highlight.ZIndex = 0 local padding = Instance.new("UIPadding") padding.PaddingLeft = UDim.new(0, depth * 15 + 5) padding.Parent = nodeFrame local contentFrame = Instance.new("TextButton") contentFrame.Parent = nodeFrame contentFrame.Size = UDim2.new(1, 0, 0, 25) contentFrame.BackgroundTransparency = 1 contentFrame.Text = "" contentFrame.ZIndex = 1 contentFrame.AutoButtonColor = false local uiLayout = Instance.new("UIListLayout") uiLayout.Parent = contentFrame uiLayout.FillDirection = Enum.FillDirection.Horizontal uiLayout.VerticalAlignment = Enum.VerticalAlignment.Center uiLayout.Padding = UDim.new(0, 2) uiLayout.SortOrder = Enum.SortOrder.LayoutOrder local expandButton = Instance.new("TextButton") expandButton.Parent = contentFrame expandButton.Size = UDim2.new(0, 15, 0, 15) expandButton.BackgroundTransparency = 1 expandButton.TextColor3 = Color3.fromRGB(200, 200, 210) expandButton.Text = "▶" expandButton.Font = Enum.Font.SourceSansBold expandButton.TextSize = 12 expandButton.BorderSizePixel = 0 local iconLabel = Instance.new("ImageLabel") iconLabel.Parent = contentFrame iconLabel.Size = UDim2.new(0, 16, 0, 16) iconLabel.BackgroundTransparency = 1 local iconAsset = getClassIcon(instance.ClassName) iconLabel.Image = iconAsset if iconAsset == "rbxasset://textures/ClassImages.png" then iconLabel.ImageRectSize = Vector2.new(16, 16) iconLabel.ImageRectOffset = getClassIconOffset(instance.ClassName) end local nameLabel = Instance.new("TextLabel") nameLabel.Parent = contentFrame nameLabel.Size = UDim2.new(1, -33, 1, 0) nameLabel.BackgroundTransparency = 1 nameLabel.Text = instance.Name nameLabel.TextColor3 = Color3.fromRGB(200, 200, 210) nameLabel.TextSize = 14 nameLabel.Font = Enum.Font.SourceSans nameLabel.TextXAlignment = Enum.TextXAlignment.Left nameLabel.TextTruncate = Enum.TextTruncate.SplitWord local childrenContainer = Instance.new("Frame") childrenContainer.Parent = nodeFrame childrenContainer.Position = UDim2.new(0, 0, 0, 25) childrenContainer.Size = UDim2.new(1, 0, 0, 0) childrenContainer.BackgroundTransparency = 1 childrenContainer.Visible = false local childrenLayout = Instance.new("UIListLayout") childrenLayout.Parent = childrenContainer childrenLayout.SortOrder = Enum.SortOrder.LayoutOrder childrenLayout.Padding = UDim.new(0, 2) local expanded = false local loaded = false local function updateNodeSize() local height = 25 if expanded then height = height + childrenLayout.AbsoluteContentSize.Y end nodeFrame.Size = UDim2.new(1, 0, 0, height) parentUpdate() end childrenLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(updateNodeSize) contentFrame.MouseButton1Click:Connect(function() if selectedNode then local prevHighlight = selectedNode:FindFirstChild("Highlight") if prevHighlight then prevHighlight.BackgroundTransparency = 1 end end highlight.BackgroundTransparency = 0.5 selectedNode = nodeFrame selectedInstance = instance updateProperties() end) contentFrame.MouseButton2Click:Connect(function(x) print("Right-click detected on:", instance.Name, "at:", x.Position.X, x.Position.Y) -- Debug if selectedNode then local prevHighlight = selectedNode:FindFirstChild("Highlight") if prevHighlight then prevHighlight.BackgroundTransparency = 1 end end highlight.BackgroundTransparency = 0.5 selectedNode = nodeFrame selectedInstance = instance updateProperties() showContextMenu(x.Position, selectedInstance) end) expandButton.MouseButton1Click:Connect(function() expanded = not expanded childrenContainer.Visible = expanded expandButton.Text = expanded and "▼" or "▶" if expanded and not loaded then loaded = true local children = instance:GetChildren() table.sort(children, function(a, b) return a.Name < b.Name end) for _, child in ipairs(children) do createNode(child, childrenContainer, depth + 1, updateNodeSize) end end updateNodeSize() end) if #instance:GetChildren() == 0 then expandButton.Visible = false nameLabel.Size = UDim2.new(1, -18, 1, 0) end return nodeFrame end local services = { game.Players, game.CoreGui, game.Lighting, game.ReplicatedStorage, game.StarterGui, game.Workspace } table.sort(services, function(a, b) return a.Name < b.Name end) for _, service in ipairs(services) do createNode(service, scrollingFrame, 0, function() listLayout:ApplyLayout() end) end local mouse = player:GetMouse() mouse.Button1Down:Connect(function() if contextMenuFrame.Visible then contextMenuFrame.Visible = false for _, conn in pairs(connections) do conn:Disconnect() end connections = {} end end) -- Minimize Functionality local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local function toggleMinimize() if isMinimized then local tween = TweenService:Create(mainFrame, tweenInfo, {Size = UDim2.new(0, 250, 0, 400)}) tween:Play() explorerFrame.Visible = true propertiesFrame.Visible = true resizeHandle.Visible = true else local tween = TweenService:Create(mainFrame, tweenInfo, {Size = UDim2.new(0, 250, 0, 20)}) tween:Play() explorerFrame.Visible = false propertiesFrame.Visible = false resizeHandle.Visible = false end isMinimized = not isMinimized end minimizeButton.MouseButton1Click:Connect(toggleMinimize) -- Close Functionality closeButton.MouseButton1Click:Connect(function() screenGui:Destroy() end)