-- Hook into the game services local LogService = game:GetService("LogService") local CoreGui = game:GetService("CoreGui") -- 1. DYNAMICALLY CREATE THE GUI IN THE CORE LAYER local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ExecutorOutputGui_Unified" ScreenGui.ResetOnSpawn = false ScreenGui.DisplayOrder = 2147483647 ScreenGui.Parent = CoreGui -- Main container frame local MainFrame = Instance.new("Frame") MainFrame.Size = UDim2.new(0, 550, 0, 350) MainFrame.Position = UDim2.new(0, 20, 1, -390) MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Draggable = true MainFrame.ZIndex = 9999999 MainFrame.Parent = ScreenGui -- Corner styling local UICorner = Instance.new("UICorner") UICorner.CornerRadius = UDim.new(0, 6) UICorner.Parent = MainFrame -- Scrolling container local ScrollingFrame = Instance.new("ScrollingFrame") ScrollingFrame.Size = UDim2.new(1, -10, 1, -10) ScrollingFrame.Position = UDim2.new(0, 5, 0, 5) ScrollingFrame.BackgroundTransparency = 1 ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0) ScrollingFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y ScrollingFrame.ScrollBarThickness = 6 ScrollingFrame.ZIndex = 10000000 ScrollingFrame.Parent = MainFrame -- ONE SINGLE TEXTBOX FOR THE ENTIRE CONSOLE (Allows total Ctrl+A selection) local UnifiedConsoleBox = Instance.new("TextBox") UnifiedConsoleBox.Size = UDim2.new(1, 0, 1, 0) UnifiedConsoleBox.AutomaticSize = Enum.AutomaticSize.Y UnifiedConsoleBox.BackgroundTransparency = 1 UnifiedConsoleBox.Text = "" UnifiedConsoleBox.TextColor3 = Color3.fromRGB(240, 240, 240) UnifiedConsoleBox.TextSize = 13 UnifiedConsoleBox.Font = Enum.Font.Code UnifiedConsoleBox.TextXAlignment = Enum.TextXAlignment.Left UnifiedConsoleBox.TextYAlignment = Enum.TextYAlignment.Top UnifiedConsoleBox.ClearTextOnFocus = false UnifiedConsoleBox.TextEditable = false -- Copy-pasteable, but un-editable UnifiedConsoleBox.TextWrapped = true -- Wraps lines so long lines don't clip off screen UnifiedConsoleBox.ZIndex = 10000001 UnifiedConsoleBox.Parent = ScrollingFrame -- Padding for neatness local UIPadding = Instance.new("UIPadding") UIPadding.PaddingLeft = UDim.new(0, 5) UIPadding.PaddingTop = UDim.new(0, 5) UIPadding.Parent = UnifiedConsoleBox -- 2. LOGGING LOGIC -- Since we are using a single TextBox, Rich Text colors aren't reliable for mass text selection. -- This appends a standard string timestamp/log format to make debugging highly readable. local function appendToConsole(message) if UnifiedConsoleBox.Text == "" then UnifiedConsoleBox.Text = message else UnifiedConsoleBox.Text = UnifiedConsoleBox.Text .. "\n" .. message end -- Force auto-scroll to the bottom of the log ScrollingFrame.CanvasPosition = Vector2.new(0, ScrollingFrame.AbsoluteCanvasSize.Y + 100) end LogService.MessageOut:Connect(function(message, messageType) local prefix = "[PRINT]" if messageType == Enum.MessageType.MessageWarning then prefix = "[WARN]" elseif messageType == Enum.MessageType.MessageError then prefix = "[ERROR]" elseif messageType == Enum.MessageType.MessageInfo then prefix = "[INFO]" end appendToConsole(prefix .. " " .. message) end) -- Intercept local script execution logs local oldPrint = print local oldWarn = warn print = function(...) local args = {...} local str = "" for i, v in ipairs(args) do str = str .. tostring(v) .. (i < #args and " " or "") end appendToConsole("[PRINT] " .. str) oldPrint(unpack(args)) end warn = function(...) local args = {...} local str = "" for i, v in ipairs(args) do str = str .. tostring(v) .. (i < #args and " " or "") end appendToConsole("[WARN] " .. str) oldWarn(unpack(args)) end