Better Console
Key RequiredUniversal

Better Console

Universal ScriptItzPnsdgItzPnsdg 754 views 60 executesUpdated Apr 25, 2026
5.0/ 5(3 votes)
30100% Positive
Lua Script•659 lines (24791 chars)
LogService = game:GetService("LogService")
UserInputService = game:GetService("UserInputService")
RunService = game:GetService("RunService")
CoreGui = game:GetService("CoreGui")

DraggingSystem = {}

function DraggingSystem.GetDistance(pos1, pos2)
    return math.sqrt((pos2.X - pos1.X)^2 + (pos2.Y - pos1.Y)^2)
end

function DraggingSystem.IsMouseOverFrame(Frame, Position)
    AbsPos, AbsSize = Frame.AbsolutePosition, Frame.AbsoluteSize
    return Position.X >= AbsPos.X and Position.X <= AbsPos.X + AbsSize.X and Position.Y >= AbsPos.Y and Position.Y <= AbsPos.Y + AbsSize.Y
end

function DraggingSystem.MakeDraggable(MainFrame, DragFrame, CallbackTable)
    if not MainFrame or not DragFrame then return end
    
    dragging = false
    dragStart = nil
    startPos = nil
    dragDistance = 0
    DRAG_THRESHOLD = 5
    originalZIndex = MainFrame.ZIndex
    isDraggingStarted = false
    currentTouch = nil
    
    function getScreenSize()
        return workspace.CurrentCamera.ViewportSize
    end
    
    function updatePosition(input)
        if not dragging or not dragStart then return end
        delta = input.Position - dragStart
        dragDistance = math.sqrt(delta.X^2 + delta.Y^2)
        
        screenSize = getScreenSize()
        newOffsetX = startPos.X.Offset + delta.X
        newOffsetY = startPos.Y.Offset + delta.Y
        
        newScaleX = startPos.X.Scale
        newScaleY = startPos.Y.Scale
        
        if startPos.X.Scale > 0 then
            scaleOffsetX = (screenSize.X * startPos.X.Scale) + startPos.X.Offset
            newAbsoluteX = scaleOffsetX + delta.X
            newScaleX = newAbsoluteX / screenSize.X
            newOffsetX = 0
        end
        
        if startPos.Y.Scale > 0 then
            scaleOffsetY = (screenSize.Y * startPos.Y.Scale) + startPos.Y.Offset
            newAbsoluteY = scaleOffsetY + delta.Y
            newScaleY = newAbsoluteY / screenSize.Y
            newOffsetY = 0
        end
        
        MainFrame.Position = UDim2.new(newScaleX, newOffsetX, newScaleY, newOffsetY)
        
        if CallbackTable and CallbackTable.OnDragUpdate then
            CallbackTable.OnDragUpdate(MainFrame.Position, dragDistance)
        end
    end
    
    function resetDragState()
        dragging = false
        dragStart = nil
        startPos = nil
        dragDistance = 0
        isDraggingStarted = false
        currentTouch = nil
    end
    
    mouseButton1Connection = nil
    touchEndedConnection = nil
    movementConnection = nil
    
    function onInputEnded()
        if dragging then
            wasDragged = dragDistance > DRAG_THRESHOLD
            if not wasDragged and CallbackTable and CallbackTable.OnClick then
                CallbackTable.OnClick()
            end
            if wasDragged and isDraggingStarted then
                MainFrame.ZIndex = originalZIndex
                if CallbackTable and CallbackTable.OnDragEnd then
                    CallbackTable.OnDragEnd(MainFrame.Position, wasDragged)
                end
            end
            resetDragState()
            if mouseButton1Connection then
                mouseButton1Connection:Disconnect()
                mouseButton1Connection = nil
            end
            if touchEndedConnection then
                touchEndedConnection:Disconnect()
                touchEndedConnection = nil
            end
            if movementConnection then
                movementConnection:Disconnect()
                movementConnection = nil
            end
        end
    end
    
    function onInputEndedHandler(endInput)
        if dragging then
            if endInput.UserInputType == Enum.UserInputType.MouseButton1 then
                onInputEnded()
            elseif endInput.UserInputType == Enum.UserInputType.Touch and endInput == currentTouch then
                onInputEnded()
            end
        end
    end
    
    function onMovement(input)
        if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input == currentTouch) then
            if not isDraggingStarted and dragDistance > DRAG_THRESHOLD then
                isDraggingStarted = true
                if CallbackTable and CallbackTable.OnDragStart then
                    CallbackTable.OnDragStart()
                end
            end
            updatePosition(input)
        end
    end
    
    function onInputBegan(input)
        if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and input.UserInputState == Enum.UserInputState.Begin and not dragging then
            if DraggingSystem.IsMouseOverFrame(DragFrame, input.Position) then
                dragging = true
                dragStart = input.Position
                startPos = MainFrame.Position
                dragDistance = 0
                isDraggingStarted = false
                if input.UserInputType == Enum.UserInputType.Touch then
                    currentTouch = input
                else
                    currentTouch = nil
                end
                
                mouseButton1Connection = UserInputService.InputEnded:Connect(function(endInput)
                    if endInput.UserInputType == Enum.UserInputType.MouseButton1 then
                        onInputEndedHandler(endInput)
                    end
                end)
                touchEndedConnection = UserInputService.InputEnded:Connect(function(endInput)
                    if endInput.UserInputType == Enum.UserInputType.Touch then
                        onInputEndedHandler(endInput)
                    end
                end)
                movementConnection = UserInputService.InputChanged:Connect(function(moveInput)
                    if moveInput.UserInputType == Enum.UserInputType.MouseMovement or moveInput.UserInputType == Enum.UserInputType.Touch then
                        onMovement(moveInput)
                    end
                end)
            end
        end
    end
    
    inputBeganConnection = DragFrame.InputBegan:Connect(onInputBegan)
    
    cleanupFunction = function()
        inputBeganConnection:Disconnect()
        if mouseButton1Connection then mouseButton1Connection:Disconnect() end
        if touchEndedConnection then touchEndedConnection:Disconnect() end
        if movementConnection then movementConnection:Disconnect() end
    end
    
    return cleanupFunction
end

ResizeSystem = {}

function ResizeSystem.MakeResizable(MainFrame, ResizeHandle, CallbackTable)
    if not MainFrame or not ResizeHandle then return end
    
    resizing = false
    resizeStart = nil
    startSize = nil
    startPosition = nil
    resizeMode = "right"
    activeTouch = nil
    
    function updateResize(input)
        if not resizing or not resizeStart then return end
        
        delta = input.Position - resizeStart
        newWidth = startSize.X.Offset
        newHeight = startSize.Y.Offset
        newX = startPosition.X.Offset
        newY = startPosition.Y.Offset
        
        if resizeMode == "right" then
            newWidth = math.max(396, startSize.X.Offset + delta.X)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            
        elseif resizeMode == "left" then
            newWidth = math.max(396, startSize.X.Offset - delta.X)
            newX = startPosition.X.Offset + (startSize.X.Offset - newWidth)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            MainFrame.Position = UDim2.new(startPosition.X.Scale, newX, startPosition.Y.Scale, newY)
            
        elseif resizeMode == "bottom" then
            newHeight = math.max(200, startSize.Y.Offset + delta.Y)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            
        elseif resizeMode == "top" then
            newHeight = math.max(200, startSize.Y.Offset - delta.Y)
            newY = startPosition.Y.Offset + (startSize.Y.Offset - newHeight)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            MainFrame.Position = UDim2.new(startPosition.X.Scale, newX, startPosition.Y.Scale, newY)
            
        elseif resizeMode == "bottomRight" then
            newWidth = math.max(396, startSize.X.Offset + delta.X)
            newHeight = math.max(200, startSize.Y.Offset + delta.Y)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            
        elseif resizeMode == "bottomLeft" then
            newWidth = math.max(396, startSize.X.Offset - delta.X)
            newHeight = math.max(200, startSize.Y.Offset + delta.Y)
            newX = startPosition.X.Offset + (startSize.X.Offset - newWidth)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            MainFrame.Position = UDim2.new(startPosition.X.Scale, newX, startPosition.Y.Scale, newY)
            
        elseif resizeMode == "topRight" then
            newWidth = math.max(396, startSize.X.Offset + delta.X)
            newHeight = math.max(200, startSize.Y.Offset - delta.Y)
            newY = startPosition.Y.Offset + (startSize.Y.Offset - newHeight)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            MainFrame.Position = UDim2.new(startPosition.X.Scale, newX, startPosition.Y.Scale, newY)
            
        elseif resizeMode == "topLeft" then
            newWidth = math.max(396, startSize.X.Offset - delta.X)
            newHeight = math.max(200, startSize.Y.Offset - delta.Y)
            newX = startPosition.X.Offset + (startSize.X.Offset - newWidth)
            newY = startPosition.Y.Offset + (startSize.Y.Offset - newHeight)
            MainFrame.Size = UDim2.new(0, newWidth, 0, newHeight)
            MainFrame.Position = UDim2.new(startPosition.X.Scale, newX, startPosition.Y.Scale, newY)
        end
        
        if CallbackTable and CallbackTable.OnResizeUpdate then
            CallbackTable.OnResizeUpdate(MainFrame.Size, MainFrame.Position)
        end
        
        updateScrollability()
    end
    
    function resetResizeState()
        resizing = false
        resizeStart = nil
        startSize = nil
        startPosition = nil
        activeTouch = nil
    end
    
    mouseConnection = nil
    touchConnection = nil
    moveConnection = nil
    
    function onResizeEnd()
        if resizing then
            if CallbackTable and CallbackTable.OnResizeEnd then
                CallbackTable.OnResizeEnd(MainFrame.Size)
            end
            resetResizeState()
            if mouseConnection then mouseConnection:Disconnect() end
            if touchConnection then touchConnection:Disconnect() end
            if moveConnection then moveConnection:Disconnect() end
        end
    end
    
    function onResizeMovement(input)
        if resizing then
            if input.UserInputType == Enum.UserInputType.MouseMovement then
                updateResize(input)
            elseif input.UserInputType == Enum.UserInputType.Touch and input == activeTouch then
                updateResize(input)
            end
        end
    end
    
    function onResizeBegan(input)
        if (input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch) and input.UserInputState == Enum.UserInputState.Begin and not resizing then
            if DraggingSystem.IsMouseOverFrame(ResizeHandle, input.Position) then
                resizing = true
                resizeStart = input.Position
                startSize = MainFrame.Size
                startPosition = MainFrame.Position
                
                if input.UserInputType == Enum.UserInputType.Touch then
                    activeTouch = input
                else
                    activeTouch = nil
                end
                
                if ResizeHandle.Name == "ResizeRight" then
                    resizeMode = "right"
                elseif ResizeHandle.Name == "ResizeLeft" then
                    resizeMode = "left"
                elseif ResizeHandle.Name == "ResizeBottom" then
                    resizeMode = "bottom"
                elseif ResizeHandle.Name == "ResizeTop" then
                    resizeMode = "top"
                elseif ResizeHandle.Name == "ResizeBottomRight" then
                    resizeMode = "bottomRight"
                elseif ResizeHandle.Name == "ResizeBottomLeft" then
                    resizeMode = "bottomLeft"
                elseif ResizeHandle.Name == "ResizeTopRight" then
                    resizeMode = "topRight"
                elseif ResizeHandle.Name == "ResizeTopLeft" then
                    resizeMode = "topLeft"
                end
                
                if CallbackTable and CallbackTable.OnResizeStart then
                    CallbackTable.OnResizeStart()
                end
                
                mouseConnection = UserInputService.InputEnded:Connect(function(endInput)
                    if endInput.UserInputType == Enum.UserInputType.MouseButton1 then
                        onResizeEnd()
                    end
                end)
                touchConnection = UserInputService.InputEnded:Connect(function(endInput)
                    if endInput.UserInputType == Enum.UserInputType.Touch and endInput == activeTouch then
                        onResizeEnd()
                    end
                end)
                moveConnection = UserInputService.InputChanged:Connect(function(moveInput)
                    if moveInput.UserInputType == Enum.UserInputType.MouseMovement then
                        onResizeMovement(moveInput)
                    elseif moveInput.UserInputType == Enum.UserInputType.Touch and moveInput == activeTouch then
                        onResizeMovement(moveInput)
                    end
                end)
            end
        end
    end
    
    inputBeganConnection = ResizeHandle.InputBegan:Connect(onResizeBegan)
    
    cleanupFunction = function()
        inputBeganConnection:Disconnect()
        if mouseConnection then mouseConnection:Disconnect() end
        if touchConnection then touchConnection:Disconnect() end
        if moveConnection then moveConnection:Disconnect() end
    end
    
    return cleanupFunction
end

function getDPIScale()
    return 0.9
end

function updateScrollability()
    task.wait()
    local containerHeight = logContainer.AbsoluteSize.Y
    local contentHeight = logList.AbsoluteContentSize.Y
    
    if contentHeight > containerHeight then
        logContainer.ScrollBarThickness = 6
        logContainer.ScrollingEnabled = true
    else
        logContainer.ScrollBarThickness = 0
        logContainer.ScrollingEnabled = false
    end
end

autoScroll = true
textSize = 12

screenGui = Instance.new("ScreenGui")
screenGui.Name = "RBXConsole"
screenGui.ResetOnSpawn = false
screenGui.Enabled = false
screenGui.Parent = CoreGui

mainFrame = Instance.new("Frame")
mainFrame.Name = "Main"
mainFrame.Size = UDim2.new(0, 550, 0, 400)
mainFrame.Position = UDim2.new(0.5, -275, 0.5, -200)
mainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 35)
mainFrame.BackgroundTransparency = 0.3
mainFrame.BorderSizePixel = 0
mainFrame.Active = true
mainFrame.Parent = screenGui

uiScale = Instance.new("UIScale")
uiScale.Scale = getDPIScale()
uiScale.Parent = mainFrame

uiCorner = Instance.new("UICorner")
uiCorner.CornerRadius = UDim.new(0, 8)
uiCorner.Parent = mainFrame

uiStroke = Instance.new("UIStroke")
uiStroke.Color = Color3.fromRGB(60, 60, 70)
uiStroke.Thickness = 1
uiStroke.Parent = mainFrame

titleBar = Instance.new("Frame")
titleBar.Name = "TitleBar"
titleBar.Size = UDim2.new(1, 0, 0, 40)
titleBar.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
titleBar.BackgroundTransparency = 0.3
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame

tbCorner = Instance.new("UICorner")
tbCorner.CornerRadius = UDim.new(0, 8)
tbCorner.Parent = titleBar

title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -60, 1, 0)
title.Position = UDim2.new(0, 15, 0, 0)
title.BackgroundTransparency = 1
title.Text = "RBX Console"
title.TextColor3 = Color3.fromRGB(240, 240, 240)
title.TextXAlignment = Enum.TextXAlignment.Left
title.Font = Enum.Font.GothamBold
title.TextSize = 14
title.Parent = titleBar

controls = Instance.new("Frame")
controls.Size = UDim2.new(0, 340, 1, 0)
controls.Position = UDim2.new(1, -345, 0, 0)
controls.BackgroundTransparency = 1
controls.Parent = titleBar

controlList = Instance.new("UIListLayout")
controlList.SortOrder = Enum.SortOrder.LayoutOrder
controlList.FillDirection = Enum.FillDirection.Horizontal
controlList.HorizontalAlignment = Enum.HorizontalAlignment.Right
controlList.VerticalAlignment = Enum.VerticalAlignment.Center
controlList.Padding = UDim.new(0, 5)
controlList.Parent = controls

function createButton(name, text, color)
    btn = Instance.new("TextButton")
    btn.Name = name
    btn.Size = UDim2.new(0, 65, 0, 25)
    btn.BackgroundColor3 = color
    btn.BackgroundTransparency = 0.2
    btn.Text = text
    btn.TextColor3 = Color3.fromRGB(255, 255, 255)
    btn.Font = Enum.Font.GothamBold
    btn.TextSize = 11
    btn.BorderSizePixel = 0
    btn.Parent = controls
    Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4)
    return btn
end

autoScrollBtn = createButton("AutoScroll", "Scroll: ON", Color3.fromRGB(60, 100, 180))
copyAllBtn = createButton("CopyAll", "Copy All", Color3.fromRGB(60, 120, 60))
clearBtn = createButton("Clear", "Clear", Color3.fromRGB(80, 80, 85))

textSizeBox = Instance.new("TextBox")
textSizeBox.Size = UDim2.new(0, 50, 0, 25)
textSizeBox.BackgroundColor3 = Color3.fromRGB(80, 80, 85)
textSizeBox.BackgroundTransparency = 0.2
textSizeBox.Text = "12"
textSizeBox.TextColor3 = Color3.fromRGB(255, 255, 255)
textSizeBox.Font = Enum.Font.GothamBold
textSizeBox.TextSize = 11
textSizeBox.PlaceholderText = "Size"
textSizeBox.Parent = controls
Instance.new("UICorner", textSizeBox).CornerRadius = UDim.new(0, 4)

closeBtn = createButton("Close", "X", Color3.fromRGB(180, 60, 60))
closeBtn.Size = UDim2.new(0, 30, 0, 25)

function updateTextSize()
    local newSize = tonumber(textSizeBox.Text)
    if newSize then
        textSize = newSize
        for _, logFrame in ipairs(logContainer:GetChildren()) do
            if logFrame:IsA("Frame") then
                textLabel = logFrame:FindFirstChild("TextLabel")
                if textLabel then
                    textLabel.TextSize = textSize
                end
            end
        end
    end
end

textSizeBox.FocusLost:Connect(function()
    updateTextSize()
end)

logContainer = Instance.new("ScrollingFrame")
logContainer.Name = "Logs"
logContainer.Size = UDim2.new(1, -20, 1, -60)
logContainer.Position = UDim2.new(0, 10, 0, 50)
logContainer.BackgroundColor3 = Color3.fromRGB(20, 20, 23)
logContainer.BackgroundTransparency = 0.5
logContainer.BorderSizePixel = 0
logContainer.ScrollBarThickness = 0
logContainer.ScrollingEnabled = false
logContainer.AutomaticCanvasSize = Enum.AutomaticSize.Y
logContainer.CanvasSize = UDim2.new(0, 0, 0, 0)
logContainer.Parent = mainFrame

logList = Instance.new("UIListLayout")
logList.SortOrder = Enum.SortOrder.LayoutOrder
logList.Padding = UDim.new(0, 4)
logList.Parent = logContainer

Instance.new("UIPadding", logContainer).PaddingLeft = UDim.new(0, 5)

logList:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(updateScrollability)
logContainer:GetPropertyChangedSignal("AbsoluteSize"):Connect(updateScrollability)

function createResizeHandle(name, position, size)
    handle = Instance.new("TextButton")
    handle.Name = name
    handle.Size = size
    handle.Position = position
    handle.BackgroundTransparency = 1
    handle.Text = ""
    handle.AutoButtonColor = false
    handle.Parent = mainFrame
    return handle
end

resizeRight = createResizeHandle("ResizeRight", UDim2.new(1, -4, 0, 0), UDim2.new(0, 8, 1, 0))
resizeLeft = createResizeHandle("ResizeLeft", UDim2.new(0, -4, 0, 0), UDim2.new(0, 8, 1, 0))
resizeBottom = createResizeHandle("ResizeBottom", UDim2.new(0, 0, 1, -4), UDim2.new(1, 0, 0, 8))
resizeTop = createResizeHandle("ResizeTop", UDim2.new(0, 0, 0, -4), UDim2.new(1, 0, 0, 8))

resizeBottomRight = createResizeHandle("ResizeBottomRight", UDim2.new(1, -8, 1, -8), UDim2.new(0, 16, 0, 16))
resizeBottomLeft = createResizeHandle("ResizeBottomLeft", UDim2.new(0, -8, 1, -8), UDim2.new(0, 16, 0, 16))
resizeTopRight = createResizeHandle("ResizeTopRight", UDim2.new(1, -8, 0, -8), UDim2.new(0, 16, 0, 16))
resizeTopLeft = createResizeHandle("ResizeTopLeft", UDim2.new(0, -8, 0, -8), UDim2.new(0, 16, 0, 16))

DraggingSystem.MakeDraggable(mainFrame, titleBar, {
    OnClick = function() end
})

ResizeSystem.MakeResizable(mainFrame, resizeRight, {})
ResizeSystem.MakeResizable(mainFrame, resizeLeft, {})
ResizeSystem.MakeResizable(mainFrame, resizeBottom, {})
ResizeSystem.MakeResizable(mainFrame, resizeTop, {})

ResizeSystem.MakeResizable(mainFrame, resizeBottomRight, {})
ResizeSystem.MakeResizable(mainFrame, resizeBottomLeft, {})
ResizeSystem.MakeResizable(mainFrame, resizeTopRight, {})
ResizeSystem.MakeResizable(mainFrame, resizeTopLeft, {})

function addLog(message, color, messageType)
    logFrame = Instance.new("Frame")
    logFrame.Size = UDim2.new(1, -10, 0, 0)
    logFrame.BackgroundTransparency = 1
    logFrame.AutomaticSize = Enum.AutomaticSize.Y
    logFrame.Parent = logContainer

    iconLabel = Instance.new("ImageLabel")
    iconLabel.Size = UDim2.new(0, 20, 0, 20)
    iconLabel.Position = UDim2.new(0, 0, 0, 2)
    iconLabel.BackgroundTransparency = 1
    iconLabel.Parent = logFrame
    
    if messageType == Enum.MessageType.MessageError then
        iconLabel.Image = "rbxasset://textures/DevConsole/Error.png"
    elseif messageType == Enum.MessageType.MessageWarning then
        iconLabel.Image = "rbxasset://textures/DevConsole/Warning.png"
    else
        iconLabel.Image = "rbxasset://textures/DevConsole/Info.png"
    end

    textLabel = Instance.new("TextLabel")
    textLabel.Size = UDim2.new(1, -75, 0, 0)
    textLabel.Position = UDim2.new(0, 25, 0, 0)
    textLabel.BackgroundTransparency = 1
    textLabel.Text = message
    textLabel.TextColor3 = color
    textLabel.Font = Enum.Font.Code
    textLabel.TextSize = textSize
    textLabel.TextWrapped = true
    textLabel.TextXAlignment = Enum.TextXAlignment.Left
    textLabel.AutomaticSize = Enum.AutomaticSize.Y
    textLabel.Parent = logFrame

    copyBtn = Instance.new("TextButton")
    copyBtn.Size = UDim2.new(0, 45, 0, 20)
    copyBtn.Position = UDim2.new(1, -45, 0, 0)
    copyBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
    copyBtn.BackgroundTransparency = 0.2
    copyBtn.Text = "Copy"
    copyBtn.TextColor3 = Color3.fromRGB(200, 200, 200)
    copyBtn.Font = Enum.Font.Gotham
    copyBtn.TextSize = 10
    copyBtn.Parent = logFrame
    Instance.new("UICorner", copyBtn).CornerRadius = UDim.new(0, 4)

    copyBtn.MouseButton1Click:Connect(function()
        if setclipboard then
            setclipboard(message)
            copyBtn.Text = "Done!"
            task.wait(1)
            copyBtn.Text = "Copy"
        end
    end)

    if autoScroll then
        task.wait(0.03)
        logContainer.CanvasPosition = Vector2.new(0, logContainer.AbsoluteCanvasSize.Y)
    end
    
    updateScrollability()
end

autoScrollBtn.MouseButton1Click:Connect(function()
    autoScroll = not autoScroll
    autoScrollBtn.Text = "Scroll: " .. (autoScroll and "ON" or "OFF")
    autoScrollBtn.BackgroundColor3 = autoScroll and Color3.fromRGB(60, 100, 180) or Color3.fromRGB(100, 100, 110)
end)

clearBtn.MouseButton1Click:Connect(function()
    for _, child in ipairs(logContainer:GetChildren()) do
        if child:IsA("Frame") then child:Destroy() end
    end
    updateScrollability()
end)

copyAllBtn.MouseButton1Click:Connect(function()
    allLogs = {}
    for _, child in ipairs(logContainer:GetChildren()) do
        if child:IsA("Frame") and child:FindFirstChild("TextLabel") then
            table.insert(allLogs, child.TextLabel.Text)
        end
    end
    if setclipboard then setclipboard(table.concat(allLogs, "\n")) end
end)

closeBtn.MouseButton1Click:Connect(function() screenGui.Enabled = false end)

UserInputService.InputBegan:Connect(function(input, gpe)
    if not gpe and input.KeyCode == Enum.KeyCode.F2 then
        screenGui.Enabled = not screenGui.Enabled
    end
end)

LogService.MessageOut:Connect(function(message, messageType)
    color = Color3.fromRGB(220, 220, 220)
    
    if messageType == Enum.MessageType.MessageError then
        color = Color3.fromRGB(255, 100, 100)
    elseif messageType == Enum.MessageType.MessageWarning then
        color = Color3.fromRGB(255, 200, 100)
    end
    
    addLog(string.format("[%s] %s", os.date("%H:%M:%S"), message), color, messageType)
end)

updateScrollability()

Features & Information

Copiable console log Clear Text Draggble ui resizeable ui Keybind: F8 changes textsize auto scroll

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts