Script Runner V3 Client Sided By Ai Open Sourced
Key RequiredUniversal

Script Runner V3 Client Sided By Ai Open Sourced

Universal Scriptgc_idkgc_idk 354 views 35 executesUpdated Jan 3, 2026
Unrated
00
Lua Script•1004 lines (33776 chars)
-- Roblox Script Runner V3 By Ai - Client Sided

local Players = game:GetService("Players")
local TweenService = game:GetService("TweenService")
local TextService = game:GetService("TextService")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")

-- Create ScreenGui
local screenGui = Instance.new("ScreenGui")
screenGui.Name = "ScriptRunnerGUI"
screenGui.ResetOnSpawn = false
screenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screenGui.Parent = playerGui

-- Main Frame
local mainFrame = Instance.new("Frame")
mainFrame.Name = "MainFrame"
mainFrame.Size = UDim2.new(0, 800, 0, 550)
mainFrame.Position = UDim2.new(0.5, -400, 0.5, -275)
mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 25)
mainFrame.BorderSizePixel = 0
mainFrame.ClipsDescendants = true
mainFrame.Parent = screenGui

local mainCorner = Instance.new("UICorner")
mainCorner.CornerRadius = UDim.new(0, 14)
mainCorner.Parent = mainFrame

-- Glow effect
local glow = Instance.new("ImageLabel")
glow.Name = "Glow"
glow.Size = UDim2.new(1, 40, 1, 40)
glow.Position = UDim2.new(0, -20, 0, -20)
glow.BackgroundTransparency = 1
glow.Image = "rbxasset://textures/ui/GuiImagePlaceholder.png"
glow.ImageColor3 = Color3.fromRGB(88, 101, 242)
glow.ImageTransparency = 0.5
glow.ScaleType = Enum.ScaleType.Slice
glow.SliceCenter = Rect.new(10, 10, 118, 118)
glow.ZIndex = 0
glow.Parent = mainFrame

-- Title Bar
local titleBar = Instance.new("Frame")
titleBar.Name = "TitleBar"
titleBar.Size = UDim2.new(1, 0, 0, 45)
titleBar.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
titleBar.BorderSizePixel = 0
titleBar.Parent = mainFrame

local titleCorner = Instance.new("UICorner")
titleCorner.CornerRadius = UDim.new(0, 14)
titleCorner.Parent = titleBar

local titleCover = Instance.new("Frame")
titleCover.Size = UDim2.new(1, 0, 0, 14)
titleCover.Position = UDim2.new(0, 0, 1, -14)
titleCover.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
titleCover.BorderSizePixel = 0
titleCover.Parent = titleBar

local titleGradient = Instance.new("UIGradient")
titleGradient.Color = ColorSequence.new{
	ColorSequenceKeypoint.new(0, Color3.fromRGB(88, 101, 242)),
	ColorSequenceKeypoint.new(0.5, Color3.fromRGB(114, 137, 218)),
	ColorSequenceKeypoint.new(1, Color3.fromRGB(88, 101, 242))
}
titleGradient.Rotation = 90
titleGradient.Parent = titleBar

-- Animated gradient
spawn(function()
	while titleBar.Parent do
		for i = 0, 360, 2 do
			if not titleBar.Parent then break end
			titleGradient.Rotation = i
			wait(0.05)
		end
	end
end)

-- Title Label
local titleLabel = Instance.new("TextLabel")
titleLabel.Size = UDim2.new(1, -120, 1, 0)
titleLabel.Position = UDim2.new(0, 15, 0, 0)
titleLabel.BackgroundTransparency = 1
titleLabel.Text = "Script Runner V3"
titleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
titleLabel.Font = Enum.Font.GothamBold
titleLabel.TextSize = 20
titleLabel.TextXAlignment = Enum.TextXAlignment.Left
titleLabel.Parent = titleBar

-- Version badge
local versionBadge = Instance.new("TextLabel")
versionBadge.Size = UDim2.new(0, 50, 0, 18)
versionBadge.Position = UDim2.new(0, 185, 0, 14)
versionBadge.BackgroundColor3 = Color3.fromRGB(87, 242, 135)
versionBadge.Text = "v3.0"
versionBadge.TextColor3 = Color3.fromRGB(20, 20, 25)
versionBadge.Font = Enum.Font.GothamBold
versionBadge.TextSize = 11
versionBadge.Parent = titleBar

local badgeCorner = Instance.new("UICorner")
badgeCorner.CornerRadius = UDim.new(0, 4)
badgeCorner.Parent = versionBadge

-- Client sided badge
local clientBadge = Instance.new("TextLabel")
clientBadge.Size = UDim2.new(0, 100, 0, 18)
clientBadge.Position = UDim2.new(0, 245, 0, 14)
clientBadge.BackgroundColor3 = Color3.fromRGB(255, 163, 72)
clientBadge.Text = "Client Sided"
clientBadge.TextColor3 = Color3.fromRGB(20, 20, 25)
clientBadge.Font = Enum.Font.GothamBold
clientBadge.TextSize = 10
clientBadge.Parent = titleBar

local clientCorner = Instance.new("UICorner")
clientCorner.CornerRadius = UDim.new(0, 4)
clientCorner.Parent = clientBadge

-- Minimize Button
local minimizeButton = Instance.new("TextButton")
minimizeButton.Size = UDim2.new(0, 38, 0, 38)
minimizeButton.Position = UDim2.new(1, -84, 0, 3.5)
minimizeButton.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
minimizeButton.BorderSizePixel = 0
minimizeButton.Text = "−"
minimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
minimizeButton.Font = Enum.Font.GothamBold
minimizeButton.TextSize = 22
minimizeButton.AutoButtonColor = false
minimizeButton.Parent = titleBar

local minCorner = Instance.new("UICorner")
minCorner.CornerRadius = UDim.new(0, 8)
minCorner.Parent = minimizeButton

-- Close Button
local closeButton = Instance.new("TextButton")
closeButton.Size = UDim2.new(0, 38, 0, 38)
closeButton.Position = UDim2.new(1, -42, 0, 3.5)
closeButton.BackgroundColor3 = Color3.fromRGB(237, 66, 69)
closeButton.BorderSizePixel = 0
closeButton.Text = "×"
closeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
closeButton.Font = Enum.Font.GothamBold
closeButton.TextSize = 26
closeButton.AutoButtonColor = false
closeButton.Parent = titleBar

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 8)
closeCorner.Parent = closeButton

-- Toolbar
local toolbar = Instance.new("Frame")
toolbar.Name = "Toolbar"
toolbar.Size = UDim2.new(1, -20, 0, 35)
toolbar.Position = UDim2.new(0, 10, 0, 55)
toolbar.BackgroundColor3 = Color3.fromRGB(28, 28, 35)
toolbar.BorderSizePixel = 0
toolbar.Parent = mainFrame

local toolCorner = Instance.new("UICorner")
toolCorner.CornerRadius = UDim.new(0, 8)
toolCorner.Parent = toolbar

-- Font Size Label
local fontLabel = Instance.new("TextLabel")
fontLabel.Size = UDim2.new(0, 80, 1, 0)
fontLabel.Position = UDim2.new(0, 10, 0, 0)
fontLabel.BackgroundTransparency = 1
fontLabel.Text = "Font Size:"
fontLabel.TextColor3 = Color3.fromRGB(180, 180, 190)
fontLabel.Font = Enum.Font.GothamMedium
fontLabel.TextSize = 13
fontLabel.TextXAlignment = Enum.TextXAlignment.Left
fontLabel.Parent = toolbar

-- Font Size Decrease
local fontDecrease = Instance.new("TextButton")
fontDecrease.Size = UDim2.new(0, 30, 0, 25)
fontDecrease.Position = UDim2.new(0, 95, 0, 5)
fontDecrease.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
fontDecrease.Text = "−"
fontDecrease.TextColor3 = Color3.fromRGB(255, 255, 255)
fontDecrease.Font = Enum.Font.GothamBold
fontDecrease.TextSize = 16
fontDecrease.AutoButtonColor = false
fontDecrease.Parent = toolbar

local fontDecCorner = Instance.new("UICorner")
fontDecCorner.CornerRadius = UDim.new(0, 5)
fontDecCorner.Parent = fontDecrease

-- Font Size Display
local fontSizeDisplay = Instance.new("TextLabel")
fontSizeDisplay.Size = UDim2.new(0, 40, 0, 25)
fontSizeDisplay.Position = UDim2.new(0, 130, 0, 5)
fontSizeDisplay.BackgroundColor3 = Color3.fromRGB(35, 35, 45)
fontSizeDisplay.Text = "15"
fontSizeDisplay.TextColor3 = Color3.fromRGB(255, 255, 255)
fontSizeDisplay.Font = Enum.Font.GothamBold
fontSizeDisplay.TextSize = 13
fontSizeDisplay.Parent = toolbar

local fontSizeCorner = Instance.new("UICorner")
fontSizeCorner.CornerRadius = UDim.new(0, 5)
fontSizeCorner.Parent = fontSizeDisplay

-- Font Size Increase
local fontIncrease = Instance.new("TextButton")
fontIncrease.Size = UDim2.new(0, 30, 0, 25)
fontIncrease.Position = UDim2.new(0, 175, 0, 5)
fontIncrease.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
fontIncrease.Text = "+"
fontIncrease.TextColor3 = Color3.fromRGB(255, 255, 255)
fontIncrease.Font = Enum.Font.GothamBold
fontIncrease.TextSize = 16
fontIncrease.AutoButtonColor = false
fontIncrease.Parent = toolbar

local fontIncCorner = Instance.new("UICorner")
fontIncCorner.CornerRadius = UDim.new(0, 5)
fontIncCorner.Parent = fontIncrease

-- Line count display
local lineCountLabel = Instance.new("TextLabel")
lineCountLabel.Size = UDim2.new(0, 150, 1, 0)
lineCountLabel.Position = UDim2.new(1, -160, 0, 0)
lineCountLabel.BackgroundTransparency = 1
lineCountLabel.Text = "Lines: 0 | Chars: 0"
lineCountLabel.TextColor3 = Color3.fromRGB(150, 150, 160)
lineCountLabel.Font = Enum.Font.GothamMedium
lineCountLabel.TextSize = 12
lineCountLabel.TextXAlignment = Enum.TextXAlignment.Right
lineCountLabel.Parent = toolbar

-- Editor Container
local editorContainer = Instance.new("Frame")
editorContainer.Name = "EditorContainer"
editorContainer.Size = UDim2.new(1, -20, 1, -245)
editorContainer.Position = UDim2.new(0, 10, 0, 100)
editorContainer.BackgroundColor3 = Color3.fromRGB(25, 25, 32)
editorContainer.BorderSizePixel = 0
editorContainer.Parent = mainFrame

local editorCorner = Instance.new("UICorner")
editorCorner.CornerRadius = UDim.new(0, 10)
editorCorner.Parent = editorContainer

-- Editor Header
local editorHeader = Instance.new("Frame")
editorHeader.Size = UDim2.new(1, 0, 0, 30)
editorHeader.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
editorHeader.BorderSizePixel = 0
editorHeader.Parent = editorContainer

local headerCorner = Instance.new("UICorner")
headerCorner.CornerRadius = UDim.new(0, 10)
headerCorner.Parent = editorHeader

local headerCover = Instance.new("Frame")
headerCover.Size = UDim2.new(1, 0, 0, 10)
headerCover.Position = UDim2.new(0, 0, 1, -10)
headerCover.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
headerCover.BorderSizePixel = 0
headerCover.Parent = editorHeader

local editorLabel = Instance.new("TextLabel")
editorLabel.Size = UDim2.new(1, -10, 1, 0)
editorLabel.Position = UDim2.new(0, 10, 0, 0)
editorLabel.BackgroundTransparency = 1
editorLabel.Text = "Code Editor"
editorLabel.TextColor3 = Color3.fromRGB(180, 180, 190)
editorLabel.Font = Enum.Font.GothamBold
editorLabel.TextSize = 13
editorLabel.TextXAlignment = Enum.TextXAlignment.Left
editorLabel.Parent = editorHeader

-- Line numbers frame
local lineNumbersFrame = Instance.new("Frame")
lineNumbersFrame.Size = UDim2.new(0, 45, 1, -30)
lineNumbersFrame.Position = UDim2.new(0, 0, 0, 30)
lineNumbersFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 26)
lineNumbersFrame.BorderSizePixel = 0
lineNumbersFrame.Parent = editorContainer

-- Line numbers ScrollingFrame
local lineNumbersScroll = Instance.new("ScrollingFrame")
lineNumbersScroll.Size = UDim2.new(1, 0, 1, 0)
lineNumbersScroll.BackgroundTransparency = 1
lineNumbersScroll.BorderSizePixel = 0
lineNumbersScroll.ScrollBarThickness = 0
lineNumbersScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
lineNumbersScroll.ScrollingEnabled = false
lineNumbersScroll.Parent = lineNumbersFrame

-- Line numbers TextLabel
local lineNumbers = Instance.new("TextLabel")
lineNumbers.Size = UDim2.new(1, -5, 1, 0)
lineNumbers.Position = UDim2.new(0, 0, 0, 0)
lineNumbers.BackgroundTransparency = 1
lineNumbers.Text = "1"
lineNumbers.TextColor3 = Color3.fromRGB(100, 100, 120)
lineNumbers.Font = Enum.Font.Code
lineNumbers.TextSize = 15
lineNumbers.TextXAlignment = Enum.TextXAlignment.Right
lineNumbers.TextYAlignment = Enum.TextYAlignment.Top
lineNumbers.Parent = lineNumbersScroll

-- Script ScrollingFrame
local scriptScrollFrame = Instance.new("ScrollingFrame")
scriptScrollFrame.Name = "ScriptScrollFrame"
scriptScrollFrame.Size = UDim2.new(1, -55, 1, -30)
scriptScrollFrame.Position = UDim2.new(0, 50, 0, 30)
scriptScrollFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 24)
scriptScrollFrame.BorderSizePixel = 0
scriptScrollFrame.ScrollBarThickness = 10
scriptScrollFrame.ScrollBarImageColor3 = Color3.fromRGB(88, 101, 242)
scriptScrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
scriptScrollFrame.Parent = editorContainer

-- Custom scrollbar style
local scrollbarBg = Instance.new("Frame")
scrollbarBg.Size = UDim2.new(0, 10, 1, 0)
scrollbarBg.Position = UDim2.new(1, -10, 0, 0)
scrollbarBg.BackgroundColor3 = Color3.fromRGB(25, 25, 32)
scrollbarBg.BorderSizePixel = 0
scrollbarBg.ZIndex = 10
scrollbarBg.Parent = scriptScrollFrame

-- Script TextBox
local scriptBox = Instance.new("TextBox")
scriptBox.Name = "ScriptBox"
scriptBox.Size = UDim2.new(1, -15, 1, 0)
scriptBox.Position = UDim2.new(0, 10, 0, 0)
scriptBox.BackgroundTransparency = 1
scriptBox.TextColor3 = Color3.fromRGB(230, 230, 240)
scriptBox.Font = Enum.Font.Code
scriptBox.TextSize = 15
scriptBox.Text = '-- Script Runner V3 - CLIENT SIDED ONLY\n-- This executor runs on the client and cannot access server-side features\n\nprint("Hello from Script Runner V3")\n\nlocal part = Instance.new("Part")\npart.Parent = workspace\npart.Position = Vector3.new(0, 10, 0)\npart.Size = Vector3.new(5, 1, 3)\npart.BrickColor = BrickColor.new("Bright blue")\npart.Material = Enum.Material.Neon\npart.Anchored = true'
scriptBox.TextXAlignment = Enum.TextXAlignment.Left
scriptBox.TextYAlignment = Enum.TextYAlignment.Top
scriptBox.TextWrapped = true
scriptBox.ClearTextOnFocus = false
scriptBox.MultiLine = true
scriptBox.PlaceholderText = "-- Enter your Lua code here..."
scriptBox.PlaceholderColor3 = Color3.fromRGB(80, 80, 100)
scriptBox.Parent = scriptScrollFrame

-- Code assistance system
local lastText = scriptBox.Text
local cursorPosition = 0

-- Auto-complete pairs
local pairs = {
	["("] = ")",
	["["] = "]",
	["{"] = "}",
	['"'] = '"',
	["'"] = "'"
}

-- Auto-indent keywords
local indentKeywords = {
	"function", "if", "for", "while", "repeat", "do", "then"
}

-- Code snippets
local snippets = {
	["func"] = "function NAME()\n    -- code here\nend",
	["ife"] = "if CONDITION then\n    -- code here\nend",
	["ifel"] = "if CONDITION then\n    -- code here\nelse\n    -- code here\nend",
	["fori"] = "for i = 1, 10 do\n    -- code here\nend",
	["forv"] = "for i, v in pairs(TABLE) do\n    -- code here\nend",
	["whi"] = "while CONDITION do\n    -- code here\nend",
	["rep"] = "repeat\n    -- code here\nuntil CONDITION",
	["part"] = 'local part = Instance.new("Part")\npart.Parent = workspace\npart.Position = Vector3.new(0, 10, 0)\npart.Anchored = true',
	["wait"] = "wait(1)",
	["print"] = 'print("MESSAGE")',
	["tween"] = 'local TweenService = game:GetService("TweenService")\nlocal tween = TweenService:Create(OBJECT, TweenInfo.new(1), {Property = Value})\ntween:Play()',
}

-- Handle text changes for smart features
scriptBox:GetPropertyChangedSignal("Text"):Connect(function()
	local currentText = scriptBox.Text
	
	-- Detect snippet triggers
	for trigger, snippet in pairs(snippets) do
		if currentText:match(trigger .. "$") and not lastText:match(trigger .. "$") then
			local newText = currentText:gsub(trigger .. "$", snippet)
			scriptBox.Text = newText
			outputBox.TextColor3 = Color3.fromRGB(138, 173, 244)
			outputBox.Text = "[INFO] Code snippet inserted"
			updateOutputSize()
			break
		end
	end
	
	lastText = currentText
end)

-- Handle special key inputs
local UserInputService = game:GetService("UserInputService")

scriptBox.Focused:Connect(function()
	local connection
	connection = UserInputService.InputBegan:Connect(function(input, gameProcessed)
		if not scriptBox:IsFocused() then
			connection:Disconnect()
			return
		end
		
		-- Tab for indentation
		if input.KeyCode == Enum.KeyCode.Tab then
			local text = scriptBox.Text
			local cursorPos = scriptBox.CursorPosition
			local newText = text:sub(1, cursorPos - 1) .. "    " .. text:sub(cursorPos)
			scriptBox.Text = newText
			scriptBox.CursorPosition = cursorPos + 4
		end
		
		-- Auto-close brackets and quotes
		for open, close in pairs(pairs) do
			if input.KeyCode == Enum.KeyCode.Unknown then
				local text = scriptBox.Text
				local cursorPos = scriptBox.CursorPosition
				
				if text:sub(cursorPos - 1, cursorPos - 1) == open then
					if (open == '"' or open == "'") and text:sub(cursorPos - 2, cursorPos - 2) == open then
						return
					end
					
					task.wait(0.01)
					local currentText = scriptBox.Text
					local currentPos = scriptBox.CursorPosition
					scriptBox.Text = currentText:sub(1, currentPos - 1) .. close .. currentText:sub(currentPos)
					scriptBox.CursorPosition = currentPos
				end
			end
		end
		
		-- Auto-indent on Enter after keywords
		if input.KeyCode == Enum.KeyCode.Return then
			task.wait(0.01)
			local text = scriptBox.Text
			local cursorPos = scriptBox.CursorPosition
			local beforeCursor = text:sub(1, cursorPos - 1)
			local lastLine = beforeCursor:match("([^\n]*)$")
			
			for _, keyword in ipairs(indentKeywords) do
				if lastLine:match("%f[%w]" .. keyword .. "%f[%W]") then
					local newText = text:sub(1, cursorPos - 1) .. "    " .. text:sub(cursorPos)
					scriptBox.Text = newText
					scriptBox.CursorPosition = cursorPos + 4
					break
				end
			end
		end
	end)
end)

-- Update canvas and line numbers
local function updateEditor()
	local text = scriptBox.Text
	local lines = 1
	for _ in text:gmatch("\n") do
		lines = lines + 1
	end
	
	-- Update line numbers
	local lineNumberText = ""
	for i = 1, lines do
		lineNumberText = lineNumberText .. i .. "\n"
	end
	lineNumbers.Text = lineNumberText
	
	-- Update canvas sizes
	local textSize = TextService:GetTextSize(
		text,
		scriptBox.TextSize,
		scriptBox.Font,
		Vector2.new(scriptBox.AbsoluteSize.X, math.huge)
	)
	scriptScrollFrame.CanvasSize = UDim2.new(0, 0, 0, textSize.Y + 30)
	lineNumbersScroll.CanvasSize = UDim2.new(0, 0, 0, textSize.Y + 30)
	
	-- Update line count
	lineCountLabel.Text = string.format("Lines: %d | Chars: %d", lines, #text)
end

scriptBox:GetPropertyChangedSignal("Text"):Connect(updateEditor)

-- Sync scrolling
scriptScrollFrame:GetPropertyChangedSignal("CanvasPosition"):Connect(function()
	lineNumbersScroll.CanvasPosition = Vector2.new(0, scriptScrollFrame.CanvasPosition.Y)
end)

-- Output Container
local outputContainer = Instance.new("Frame")
outputContainer.Name = "OutputContainer"
outputContainer.Size = UDim2.new(1, -20, 0, 110)
outputContainer.Position = UDim2.new(0, 10, 1, -165)
outputContainer.BackgroundColor3 = Color3.fromRGB(25, 25, 32)
outputContainer.BorderSizePixel = 0
outputContainer.Parent = mainFrame

local outputCorner = Instance.new("UICorner")
outputCorner.CornerRadius = UDim.new(0, 10)
outputCorner.Parent = outputContainer

-- Output Header
local outputHeader = Instance.new("Frame")
outputHeader.Size = UDim2.new(1, 0, 0, 30)
outputHeader.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
outputHeader.BorderSizePixel = 0
outputHeader.Parent = outputContainer

local outHeaderCorner = Instance.new("UICorner")
outHeaderCorner.CornerRadius = UDim.new(0, 10)
outHeaderCorner.Parent = outputHeader

local outHeaderCover = Instance.new("Frame")
outHeaderCover.Size = UDim2.new(1, 0, 0, 10)
outHeaderCover.Position = UDim2.new(0, 0, 1, -10)
outHeaderCover.BackgroundColor3 = Color3.fromRGB(30, 30, 38)
outHeaderCover.BorderSizePixel = 0
outHeaderCover.Parent = outputHeader

local outputLabel = Instance.new("TextLabel")
outputLabel.Size = UDim2.new(1, -10, 1, 0)
outputLabel.Position = UDim2.new(0, 10, 0, 0)
outputLabel.BackgroundTransparency = 1
outputLabel.Text = "Output Console"
outputLabel.TextColor3 = Color3.fromRGB(180, 180, 190)
outputLabel.Font = Enum.Font.GothamBold
outputLabel.TextSize = 13
outputLabel.TextXAlignment = Enum.TextXAlignment.Left
outputLabel.Parent = outputHeader

-- Clear output button
local clearOutputButton = Instance.new("TextButton")
clearOutputButton.Size = UDim2.new(0, 60, 0, 20)
clearOutputButton.Position = UDim2.new(1, -70, 0, 5)
clearOutputButton.BackgroundColor3 = Color3.fromRGB(50, 50, 60)
clearOutputButton.BorderSizePixel = 0
clearOutputButton.Text = "Clear"
clearOutputButton.TextColor3 = Color3.fromRGB(200, 200, 210)
clearOutputButton.Font = Enum.Font.GothamMedium
clearOutputButton.TextSize = 11
clearOutputButton.AutoButtonColor = false
clearOutputButton.Parent = outputHeader

local clearOutCorner = Instance.new("UICorner")
clearOutCorner.CornerRadius = UDim.new(0, 5)
clearOutCorner.Parent = clearOutputButton

-- Output ScrollingFrame
local outputScrollFrame = Instance.new("ScrollingFrame")
outputScrollFrame.Name = "OutputScrollFrame"
outputScrollFrame.Size = UDim2.new(1, -10, 1, -35)
outputScrollFrame.Position = UDim2.new(0, 5, 0, 32)
outputScrollFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 24)
outputScrollFrame.BorderSizePixel = 0
outputScrollFrame.ScrollBarThickness = 10
outputScrollFrame.ScrollBarImageColor3 = Color3.fromRGB(87, 242, 135)
outputScrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
outputScrollFrame.Parent = outputContainer

local outScrollCorner = Instance.new("UICorner")
outScrollCorner.CornerRadius = UDim.new(0, 6)
outScrollCorner.Parent = outputScrollFrame

-- Output TextLabel
local outputBox = Instance.new("TextLabel")
outputBox.Name = "OutputBox"
outputBox.Size = UDim2.new(1, -15, 1, 0)
outputBox.Position = UDim2.new(0, 10, 0, 0)
outputBox.BackgroundTransparency = 1
outputBox.TextColor3 = Color3.fromRGB(150, 150, 160)
outputBox.Font = Enum.Font.Code
outputBox.TextSize = 14
outputBox.Text = "[READY] Waiting for execution..."
outputBox.TextXAlignment = Enum.TextXAlignment.Left
outputBox.TextYAlignment = Enum.TextYAlignment.Top
outputBox.TextWrapped = true
outputBox.Parent = outputScrollFrame

-- Update output size
local function updateOutputSize()
	local textSize = TextService:GetTextSize(
		outputBox.Text,
		outputBox.TextSize,
		outputBox.Font,
		Vector2.new(outputBox.AbsoluteSize.X, math.huge)
	)
	outputScrollFrame.CanvasSize = UDim2.new(0, 0, 0, math.max(textSize.Y + 20, 110))
	outputScrollFrame.CanvasPosition = Vector2.new(0, math.max(0, textSize.Y - outputScrollFrame.AbsoluteSize.Y))
end

-- Clear output button action
clearOutputButton.MouseButton1Click:Connect(function()
	outputBox.Text = "[READY] Output cleared"
	outputBox.TextColor3 = Color3.fromRGB(150, 150, 160)
	updateOutputSize()
end)

-- Button Container
local buttonContainer = Instance.new("Frame")
buttonContainer.Size = UDim2.new(1, -20, 0, 45)
buttonContainer.Position = UDim2.new(0, 10, 1, -50)
buttonContainer.BackgroundTransparency = 1
buttonContainer.Parent = mainFrame

-- Execute Button
local executeButton = Instance.new("TextButton")
executeButton.Name = "ExecuteButton"
executeButton.Size = UDim2.new(0, 170, 1, 0)
executeButton.Position = UDim2.new(0, 0, 0, 0)
executeButton.BackgroundColor3 = Color3.fromRGB(87, 242, 135)
executeButton.BorderSizePixel = 0
executeButton.Text = "Execute"
executeButton.TextColor3 = Color3.fromRGB(20, 20, 25)
executeButton.Font = Enum.Font.GothamBold
executeButton.TextSize = 16
executeButton.AutoButtonColor = false
executeButton.Parent = buttonContainer

local execCorner = Instance.new("UICorner")
execCorner.CornerRadius = UDim.new(0, 10)
execCorner.Parent = executeButton

-- Clear Button
local clearButton = Instance.new("TextButton")
clearButton.Size = UDim2.new(0, 130, 1, 0)
clearButton.Position = UDim2.new(0, 180, 0, 0)
clearButton.BackgroundColor3 = Color3.fromRGB(255, 163, 72)
clearButton.BorderSizePixel = 0
clearButton.Text = "Clear Editor"
clearButton.TextColor3 = Color3.fromRGB(20, 20, 25)
clearButton.Font = Enum.Font.GothamBold
clearButton.TextSize = 15
clearButton.AutoButtonColor = false
clearButton.Parent = buttonContainer

local clearCorner = Instance.new("UICorner")
clearCorner.CornerRadius = UDim.new(0, 10)
clearCorner.Parent = clearButton

-- Copy Button
local copyButton = Instance.new("TextButton")
copyButton.Size = UDim2.new(0, 140, 1, 0)
copyButton.Position = UDim2.new(0, 320, 0, 0)
copyButton.BackgroundColor3 = Color3.fromRGB(114, 137, 218)
copyButton.BorderSizePixel = 0
copyButton.Text = "Copy Code"
copyButton.TextColor3 = Color3.fromRGB(255, 255, 255)
copyButton.Font = Enum.Font.GothamBold
copyButton.TextSize = 15
copyButton.AutoButtonColor = false
copyButton.Parent = buttonContainer

local copyCorner = Instance.new("UICorner")
copyCorner.CornerRadius = UDim.new(0, 10)
copyCorner.Parent = copyButton

-- Save Button
local saveButton = Instance.new("TextButton")
saveButton.Size = UDim2.new(0, 110, 1, 0)
saveButton.Position = UDim2.new(0, 470, 0, 0)
saveButton.BackgroundColor3 = Color3.fromRGB(255, 184, 108)
saveButton.BorderSizePixel = 0
saveButton.Text = "Save"
saveButton.TextColor3 = Color3.fromRGB(20, 20, 25)
saveButton.Font = Enum.Font.GothamBold
saveButton.TextSize = 15
saveButton.AutoButtonColor = false
saveButton.Parent = buttonContainer

local saveCorner = Instance.new("UICorner")
saveCorner.CornerRadius = UDim.new(0, 10)
saveCorner.Parent = saveButton

-- Snippets Button
local snippetsButton = Instance.new("TextButton")
snippetsButton.Size = UDim2.new(0, 100, 1, 0)
snippetsButton.Position = UDim2.new(0, 590, 0, 0)
snippetsButton.BackgroundColor3 = Color3.fromRGB(186, 147, 216)
snippetsButton.BorderSizePixel = 0
snippetsButton.Text = "Snippets"
snippetsButton.TextColor3 = Color3.fromRGB(255, 255, 255)
snippetsButton.Font = Enum.Font.GothamBold
snippetsButton.TextSize = 14
snippetsButton.AutoButtonColor = false
snippetsButton.Parent = buttonContainer

local snippetsCorner = Instance.new("UICorner")
snippetsCorner.CornerRadius = UDim.new(0, 10)
snippetsCorner.Parent = snippetsButton

-- Load Button
local loadButton = Instance.new("TextButton")
loadButton.Size = UDim2.new(0, 90, 1, 0)
loadButton.Position = UDim2.new(1, -90, 0, 0)
loadButton.BackgroundColor3 = Color3.fromRGB(138, 173, 244)
loadButton.BorderSizePixel = 0
loadButton.Text = "Load"
loadButton.TextColor3 = Color3.fromRGB(255, 255, 255)
loadButton.Font = Enum.Font.GothamBold
loadButton.TextSize = 15
loadButton.AutoButtonColor = false
loadButton.Parent = buttonContainer

local loadCorner = Instance.new("UICorner")
loadCorner.CornerRadius = UDim.new(0, 10)
loadCorner.Parent = loadButton

-- Hover Effects
local function addHoverEffect(button, normalColor, hoverColor)
	button.MouseEnter:Connect(function()
		TweenService:Create(button, TweenInfo.new(0.2), {BackgroundColor3 = hoverColor}):Play()
		TweenService:Create(button, TweenInfo.new(0.2), {Size = button.Size + UDim2.new(0, 0, 0, 2)}):Play()
	end)
	
	button.MouseLeave:Connect(function()
		TweenService:Create(button, TweenInfo.new(0.2), {BackgroundColor3 = normalColor}):Play()
		TweenService:Create(button, TweenInfo.new(0.2), {Size = button.Size - UDim2.new(0, 0, 0, 2)}):Play()
	end)
end

addHoverEffect(executeButton, Color3.fromRGB(87, 242, 135), Color3.fromRGB(107, 255, 155))
addHoverEffect(clearButton, Color3.fromRGB(255, 163, 72), Color3.fromRGB(255, 183, 102))
addHoverEffect(copyButton, Color3.fromRGB(114, 137, 218), Color3.fromRGB(134, 157, 238))
addHoverEffect(saveButton, Color3.fromRGB(255, 184, 108), Color3.fromRGB(255, 204, 138))
addHoverEffect(snippetsButton, Color3.fromRGB(186, 147, 216), Color3.fromRGB(206, 167, 236))
addHoverEffect(loadButton, Color3.fromRGB(138, 173, 244), Color3.fromRGB(158, 193, 255))
addHoverEffect(closeButton, Color3.fromRGB(237, 66, 69), Color3.fromRGB(255, 86, 89))
addHoverEffect(minimizeButton, Color3.fromRGB(50, 50, 60), Color3.fromRGB(70, 70, 80))
addHoverEffect(fontDecrease, Color3.fromRGB(50, 50, 60), Color3.fromRGB(70, 70, 80))
addHoverEffect(fontIncrease, Color3.fromRGB(50, 50, 60), Color3.fromRGB(70, 70, 80))
addHoverEffect(clearOutputButton, Color3.fromRGB(50, 50, 60), Color3.fromRGB(70, 70, 80))

-- Font size controls
fontDecrease.MouseButton1Click:Connect(function()
	local currentSize = scriptBox.TextSize
	if currentSize > 10 then
		scriptBox.TextSize = currentSize - 1
		lineNumbers.TextSize = currentSize - 1
		outputBox.TextSize = currentSize - 1
		fontSizeDisplay.Text = tostring(currentSize - 1)
		updateEditor()
		updateOutputSize()
	end
end)

fontIncrease.MouseButton1Click:Connect(function()
	local currentSize = scriptBox.TextSize
	if currentSize < 30 then
		scriptBox.TextSize = currentSize + 1
		lineNumbers.TextSize = currentSize + 1
		outputBox.TextSize = currentSize + 1
		fontSizeDisplay.Text = tostring(currentSize + 1)
		updateEditor()
		updateOutputSize()
	end
end)

-- Dragging
local dragging = false
local dragStart = nil
local startPos = nil

titleBar.InputBegan:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		dragging = true
		dragStart = input.Position
		startPos = mainFrame.Position
	end
end)

titleBar.InputChanged:Connect(function(input)
	if dragging and input.UserInputType == Enum.UserInputType.MouseMovement 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)

titleBar.InputEnded:Connect(function(input)
	if input.UserInputType == Enum.UserInputType.MouseButton1 then
		dragging = false
	end
end)

-- Minimize
local minimized = false
local originalSize = mainFrame.Size

minimizeButton.MouseButton1Click:Connect(function()
	minimized = not minimized
	local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
	
	if minimized then
		toolbar.Visible = false
		editorContainer.Visible = false
		outputContainer.Visible = false
		buttonContainer.Visible = false
		TweenService:Create(mainFrame, tweenInfo, {Size = UDim2.new(0, 800, 0, 45)}):Play()
		minimizeButton.Text = "□"
	else
		toolbar.Visible = true
		editorContainer.Visible = true
		outputContainer.Visible = true
		buttonContainer.Visible = true
		TweenService:Create(mainFrame, tweenInfo, {Size = originalSize}):Play()
		minimizeButton.Text = "−"
	end
end)

-- Close
closeButton.MouseButton1Click:Connect(function()
	local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Back, Enum.EasingDirection.In)
	local tween = TweenService:Create(mainFrame, tweenInfo, {
		Size = UDim2.new(0, 0, 0, 0),
		Position = UDim2.new(0.5, 0, 0.5, 0)
	})
	tween:Play()
	tween.Completed:Wait()
	screenGui:Destroy()
end)

-- Clear
clearButton.MouseButton1Click:Connect(function()
	scriptBox.Text = ""
	outputBox.Text = "[INFO] Editor cleared"
	outputBox.TextColor3 = Color3.fromRGB(150, 150, 160)
	updateOutputSize()
end)

-- Copy
copyButton.MouseButton1Click:Connect(function()
	setclipboard(scriptBox.Text)
	local originalText = copyButton.Text
	copyButton.Text = "Copied"
	wait(2)
	copyButton.Text = originalText
end)

-- Save
local savedScripts = {}
saveButton.MouseButton1Click:Connect(function()
	table.insert(savedScripts, scriptBox.Text)
	outputBox.TextColor3 = Color3.fromRGB(255, 184, 108)
	outputBox.Text = string.format("[SAVE] Script saved (%d total)", #savedScripts)
	updateOutputSize()
end)

-- Load
loadButton.MouseButton1Click:Connect(function()
	if #savedScripts == 0 then
		outputBox.TextColor3 = Color3.fromRGB(255, 163, 72)
		outputBox.Text = "[ERROR] No saved scripts found"
		updateOutputSize()
		return
	end
	
	scriptBox.Text = savedScripts[#savedScripts]
	outputBox.TextColor3 = Color3.fromRGB(138, 173, 244)
	outputBox.Text = string.format("[LOAD] Script loaded (%d/%d)", #savedScripts, #savedScripts)
	updateOutputSize()
	updateEditor()
end)

-- Snippets
snippetsButton.MouseButton1Click:Connect(function()
	outputBox.TextColor3 = Color3.fromRGB(186, 147, 216)
	outputBox.Text = [[[SNIPPETS] Available code shortcuts:

CONTROL STRUCTURES:
  func  - Function template
  ife   - If statement
  ifel  - If-else statement
  fori  - For loop (numeric)
  forv  - For loop (pairs/ipairs)
  whi   - While loop
  rep   - Repeat-until loop

ROBLOX SPECIFIC:
  part  - Create a Part
  tween - TweenService template
  wait  - Wait function
  print - Print statement

Type the keyword and it will auto-expand. Edit UPPERCASE placeholders.]]
	updateOutputSize()
end)

-- Execute
executeButton.MouseButton1Click:Connect(function()
	local originalSize = executeButton.Size
	local smallerSize = UDim2.new(originalSize.X.Scale * 0.95, originalSize.X.Offset * 0.95, originalSize.Y.Scale * 0.95, originalSize.Y.Offset * 0.95)
	TweenService:Create(executeButton, TweenInfo.new(0.1), {Size = smallerSize}):Play()
	wait(0.1)
	TweenService:Create(executeButton, TweenInfo.new(0.1), {Size = originalSize}):Play()
	
	local success, err = pcall(function()
		local scriptText = scriptBox.Text
		
		if scriptText == "" or scriptText:match("^%s*$") then
			outputBox.TextColor3 = Color3.fromRGB(255, 163, 72)
			outputBox.Text = "[ERROR] No code to execute"
			updateOutputSize()
			return
		end
		
		local output = {}
		local oldPrint = print
		local oldWarn = warn
		
		-- Capture print
		print = function(...)
			local args = {...}
			local str = ""
			for i, v in ipairs(args) do
				str = str .. tostring(v)
				if i < #args then
					str = str .. " "
				end
			end
			table.insert(output, "[PRINT] " .. str)
			oldPrint(...)
		end
		
		-- Capture warn
		warn = function(...)
			local args = {...}
			local str = ""
			for i, v in ipairs(args) do
				str = str .. tostring(v)
				if i < #args then
					str = str .. " "
				end
			end
			table.insert(output, "[WARN] " .. str)
			oldWarn(...)
		end
		
		local func, loadErr = loadstring(scriptText)
		if func then
			local execSuccess, execErr = pcall(func)
			
			if execSuccess then
				outputBox.TextColor3 = Color3.fromRGB(100, 255, 150)
				local result = "[SUCCESS] Execution completed"
				
				if #output > 0 then
					result = result .. "\n" .. string.rep("-", 60) .. "\n" .. table.concat(output, "\n")
				end
				
				outputBox.Text = result
			else
				outputBox.TextColor3 = Color3.fromRGB(255, 100, 100)
				outputBox.Text = "[ERROR] Runtime error:\n" .. string.rep("-", 60) .. "\n" .. tostring(execErr)
			end
		else
			outputBox.TextColor3 = Color3.fromRGB(255, 100, 100)
			outputBox.Text = "[ERROR] Syntax error:\n" .. string.rep("-", 60) .. "\n" .. tostring(loadErr)
		end
		
		print = oldPrint
		warn = oldWarn
		
		updateOutputSize()
	end)
	
	if not success then
		outputBox.TextColor3 = Color3.fromRGB(255, 100, 100)
		outputBox.Text = "[ERROR] Fatal error:\n" .. string.rep("-", 60) .. "\n" .. tostring(err)
		updateOutputSize()
	end
end)

-- Opening animation
mainFrame.Size = UDim2.new(0, 0, 0, 0)
mainFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
wait(0.1)
local openTween = TweenService:Create(mainFrame, TweenInfo.new(0.6, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
	Size = UDim2.new(0, 800, 0, 550),
	Position = UDim2.new(0.5, -400, 0.5, -275)
})
openTween:Play()

updateEditor()

print("Script Runner V3 loaded - Client Sided")

Features & Information

Simple Client Sided Script Runner V3
#ClientSided

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts