Universal Script – protoshamsher v2 remake - Verified script for Universal Roblox
Key RequiredUniversal

Universal Script – protoshamsher v2 remake

Universal Scriptifdjsssfifdjsssf 973 views 482 executesUpdated Oct 9, 2026
Unrated
00
Lua Script•385 lines (12353 chars)
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local playerGui = player:FindFirstChildOfClass("PlayerGui") or player:WaitForChild("PlayerGui")

local old = playerGui:FindFirstChild("ProtoSmasher")
if old then old:Destroy() end

local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "ProtoSmasher"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
pcall(function() ScreenGui.Parent = game:GetService("CoreGui") end)
if not ScreenGui.Parent then ScreenGui.Parent = playerGui end

local themes = {
	Red   = { bg = Color3.fromRGB(25, 10, 10),  border = Color3.fromRGB(200, 40, 40),  accent = Color3.fromRGB(220, 50, 50)  },
	Black = { bg = Color3.fromRGB(18, 18, 18),  border = Color3.fromRGB(80, 80, 80),   accent = Color3.fromRGB(120, 120, 120) },
	White = { bg = Color3.fromRGB(40, 40, 40),  border = Color3.fromRGB(220, 220, 220), accent = Color3.fromRGB(255, 255, 255) },
	Blue  = { bg = Color3.fromRGB(10, 15, 30),  border = Color3.fromRGB(50, 100, 200),  accent = Color3.fromRGB(70, 130, 230) },
}
local currentTheme = "Black"
local autoExecute = false
local rainbowConn = nil

local Main = Instance.new("Frame")
Main.Name = "Main"
Main.Parent = ScreenGui
Main.BackgroundColor3 = themes.Black.bg
Main.BorderColor3 = themes.Black.border
Main.BorderSizePixel = 2
Main.Position = UDim2.new(0.5, -225, 0.5, -200)
Main.Size = UDim2.new(0, 450, 0, 400)
Main.Active = true
Main.Draggable = true
Main.ClipsDescendants = true

local TitleBar = Instance.new("Frame")
TitleBar.Parent = Main
TitleBar.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
TitleBar.BorderSizePixel = 0
TitleBar.Size = UDim2.new(1, 0, 0, 26)

local Title = Instance.new("TextLabel")
Title.Parent = TitleBar
Title.BackgroundTransparency = 1
Title.Position = UDim2.new(0, 10, 0, 0)
Title.Size = UDim2.new(0, 180, 1, 0)
Title.Font = Enum.Font.SourceSans
Title.Text = "ProtoSmasher v2"
Title.TextColor3 = Color3.fromRGB(220, 220, 220)
Title.TextSize = 14
Title.TextXAlignment = Enum.TextXAlignment.Left

local MinBtn = Instance.new("TextButton")
MinBtn.Parent = TitleBar
MinBtn.BackgroundTransparency = 1
MinBtn.Position = UDim2.new(1, -50, 0, 0)
MinBtn.Size = UDim2.new(0, 25, 1, 0)
MinBtn.Font = Enum.Font.SourceSans
MinBtn.Text = "—"
MinBtn.TextColor3 = Color3.fromRGB(200, 200, 200)
MinBtn.TextSize = 14

local CloseBtn = Instance.new("TextButton")
CloseBtn.Parent = TitleBar
CloseBtn.BackgroundTransparency = 1
CloseBtn.Position = UDim2.new(1, -25, 0, 0)
CloseBtn.Size = UDim2.new(0, 25, 1, 0)
CloseBtn.Font = Enum.Font.SourceSans
CloseBtn.Text = "×"
CloseBtn.TextColor3 = Color3.fromRGB(200, 200, 200)
CloseBtn.TextSize = 16

local Editor = Instance.new("Frame")
Editor.Parent = Main
Editor.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
Editor.BorderSizePixel = 0
Editor.Position = UDim2.new(0, 4, 0, 30)
Editor.Size = UDim2.new(1, -8, 0, 245)

local LineNum = Instance.new("TextLabel")
LineNum.Parent = Editor
LineNum.BackgroundTransparency = 1
LineNum.Position = UDim2.new(0, 6, 0, 4)
LineNum.Size = UDim2.new(0, 16, 1, -8)
LineNum.Font = Enum.Font.Code
LineNum.Text = "1"
LineNum.TextColor3 = Color3.fromRGB(100, 100, 100)
LineNum.TextSize = 13
LineNum.TextYAlignment = Enum.TextYAlignment.Top

local TextBox = Instance.new("TextBox")
TextBox.Parent = Editor
TextBox.BackgroundTransparency = 1
TextBox.Position = UDim2.new(0, 26, 0, 4)
TextBox.Size = UDim2.new(1, -30, 1, -8)
TextBox.ClearTextOnFocus = false
TextBox.Font = Enum.Font.Code
TextBox.MultiLine = true
TextBox.Text = ""
TextBox.TextColor3 = Color3.fromRGB(220, 220, 220)
TextBox.TextSize = 13
TextBox.TextXAlignment = Enum.TextXAlignment.Left
TextBox.TextYAlignment = Enum.TextYAlignment.Top
TextBox.TextWrapped = false

TextBox:GetPropertyChangedSignal("Text"):Connect(function()
	local lines = 1
	for _ in TextBox.Text:gmatch("\n") do lines = lines + 1 end
	local s = ""
	for i = 1, math.max(lines, 1) do s = s .. i .. "\n" end
	LineNum.Text = s
end)

local BtnBar = Instance.new("Frame")
BtnBar.Parent = Main
BtnBar.BackgroundTransparency = 1
BtnBar.Position = UDim2.new(0, 4, 0, 283)
BtnBar.Size = UDim2.new(1, -8, 0, 36)

local function makeBtn(name, x)
	local b = Instance.new("TextButton")
	b.Parent = BtnBar
	b.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
	b.BorderColor3 = Color3.fromRGB(200, 200, 200)
	b.BorderSizePixel = 1
	b.Position = UDim2.new(0, x, 0, 2)
	b.Size = UDim2.new(0, 100, 0, 32)
	b.Font = Enum.Font.SourceSansBold
	b.Text = name
	b.TextColor3 = Color3.fromRGB(230, 230, 230)
	b.TextSize = 14
	return b
end

local ExecBtn   = makeBtn("EXECUTE", 8)
local OpenBtn   = makeBtn("OPEN", 118)
local ClearBtn  = makeBtn("CLEAR", 228)
local InjectBtn = makeBtn("INJECT", 338)

local BottomArea = Instance.new("Frame")
BottomArea.Parent = Main
BottomArea.BackgroundColor3 = Color3.fromRGB(55, 55, 55)
BottomArea.BorderSizePixel = 0
BottomArea.Position = UDim2.new(0, 0, 0, 328)
BottomArea.Size = UDim2.new(1, 0, 0, 72)

local ThemeBtn = Instance.new("TextButton")
ThemeBtn.Parent = BottomArea
ThemeBtn.BackgroundColor3 = Color3.fromRGB(240, 240, 240)
ThemeBtn.BorderColor3 = Color3.fromRGB(100, 100, 100)
ThemeBtn.BorderSizePixel = 1
ThemeBtn.Position = UDim2.new(0, 10, 1, -28)
ThemeBtn.Size = UDim2.new(0, 200, 0, 22)
ThemeBtn.Font = Enum.Font.SourceSans
ThemeBtn.Text = "  Theme: Black  ▼"
ThemeBtn.TextColor3 = Color3.fromRGB(30, 30, 30)
ThemeBtn.TextSize = 13
ThemeBtn.TextXAlignment = Enum.TextXAlignment.Left

local ColorMenu = Instance.new("Frame")
ColorMenu.Parent = Main
ColorMenu.BackgroundColor3 = Color3.fromRGB(240, 240, 240)
ColorMenu.BorderColor3 = Color3.fromRGB(100, 100, 100)
ColorMenu.BorderSizePixel = 1
ColorMenu.Position = UDim2.new(0, 10, 1, -150)
ColorMenu.Size = UDim2.new(0, 200, 0, 120)
ColorMenu.Visible = false
ColorMenu.ZIndex = 10

local function colorOption(name, y)
	local b = Instance.new("TextButton")
	b.Parent = ColorMenu
	b.BackgroundColor3 = Color3.fromRGB(240, 240, 240)
	b.BorderSizePixel = 0
	b.Position = UDim2.new(0, 0, 0, y)
	b.Size = UDim2.new(1, 0, 0, 24)
	b.Font = Enum.Font.SourceSans
	b.Text = "  " .. name
	b.TextColor3 = Color3.fromRGB(30, 30, 30)
	b.TextSize = 13
	b.TextXAlignment = Enum.TextXAlignment.Left
	b.ZIndex = 11
	return b
end

local RedOpt      = colorOption("Red", 0)
local BlackOpt    = colorOption("Black", 24)
local WhiteOpt    = colorOption("White", 48)
local BlueOpt     = colorOption("Blue", 72)
local RainbowOpt  = colorOption("Rainbow", 96)

local SettingsBtn = Instance.new("TextButton")
SettingsBtn.Parent = BottomArea
SettingsBtn.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
SettingsBtn.BorderColor3 = Color3.fromRGB(150, 150, 150)
SettingsBtn.BorderSizePixel = 1
SettingsBtn.Position = UDim2.new(0, 230, 1, -30)
SettingsBtn.Size = UDim2.new(0, 100, 0, 24)
SettingsBtn.Font = Enum.Font.SourceSansBold
SettingsBtn.Text = "Settings"
SettingsBtn.TextColor3 = Color3.fromRGB(220, 220, 220)
SettingsBtn.TextSize = 13

local function stopRainbow()
	if rainbowConn then
		rainbowConn:Disconnect()
		rainbowConn = nil
	end
end

local function applyTheme(name)
	stopRainbow()
	if name == "Rainbow" then
		currentTheme = "Rainbow"
		ThemeBtn.Text = "  Theme: Rainbow  ▼"
		ColorMenu.Visible = false
		local hue = 0
		rainbowConn = RunService.RenderStepped:Connect(function(dt)
			hue = (hue + dt * 0.15) % 1
			local c = Color3.fromHSV(hue, 0.7, 0.9)
			Main.BorderColor3 = c
			for _, btn in ipairs({ExecBtn, OpenBtn, ClearBtn, InjectBtn}) do
				btn.BorderColor3 = c
			end
		end)
		print("[ProtoSmasher]: Theme → Rainbow")
		return
	end

	local t = themes[name]
	if not t then return end
	currentTheme = name
	Main.BackgroundColor3 = t.bg
	Main.BorderColor3 = t.border
	TitleBar.BackgroundColor3 = Color3.fromRGB(
		math.clamp(t.bg.R * 255 + 12, 0, 255) / 255,
		math.clamp(t.bg.G * 255 + 12, 0, 255) / 255,
		math.clamp(t.bg.B * 255 + 12, 0, 255) / 255
	)
	for _, btn in ipairs({ExecBtn, OpenBtn, ClearBtn, InjectBtn}) do
		btn.BorderColor3 = t.accent
	end
	ThemeBtn.Text = "  Theme: " .. name .. "  ▼"
	ColorMenu.Visible = false
	print("[ProtoSmasher]: Theme → " .. name)
end

ThemeBtn.MouseButton1Click:Connect(function()
	ColorMenu.Visible = not ColorMenu.Visible
end)

RedOpt.MouseButton1Click:Connect(function() applyTheme("Red") end)
BlackOpt.MouseButton1Click:Connect(function() applyTheme("Black") end)
WhiteOpt.MouseButton1Click:Connect(function() applyTheme("White") end)
BlueOpt.MouseButton1Click:Connect(function() applyTheme("Blue") end)
RainbowOpt.MouseButton1Click:Connect(function() applyTheme("Rainbow") end)

local function runCode()
	local code = TextBox.Text
	if code == "" or code:match("^%s*$") then return end
	local chunk, err = loadstring(code)
	if chunk then
		local ok, msg = pcall(chunk)
		if not ok then warn("[ProtoSmasher]: " .. tostring(msg)) end
	else
		warn("[ProtoSmasher]: " .. tostring(err))
	end
end

ExecBtn.MouseButton1Click:Connect(runCode)
InjectBtn.MouseButton1Click:Connect(runCode)
ClearBtn.MouseButton1Click:Connect(function() TextBox.Text = "" end)
OpenBtn.MouseButton1Click:Connect(function() print("[ProtoSmasher]: Open") end)

-- Settings (tylko Auto Execute)
local settingsWin = nil

local function closeSettings()
	if settingsWin then settingsWin:Destroy() settingsWin = nil end
end

local function openSettings()
	if settingsWin then closeSettings() return end

	local win = Instance.new("Frame")
	win.Name = "SettingsWin"
	win.Parent = ScreenGui
	win.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
	win.BorderColor3 = Color3.fromRGB(100, 100, 100)
	win.BorderSizePixel = 2
	win.Position = UDim2.new(0.5, -130, 0.5, -60)
	win.Size = UDim2.new(0, 260, 0, 100)
	win.Active = true
	win.Draggable = true
	win.ZIndex = 30
	settingsWin = win

	local stBar = Instance.new("Frame")
	stBar.Parent = win
	stBar.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
	stBar.BorderSizePixel = 0
	stBar.Size = UDim2.new(1, 0, 0, 24)
	stBar.ZIndex = 31

	local stTitle = Instance.new("TextLabel")
	stTitle.Parent = stBar
	stTitle.BackgroundTransparency = 1
	stTitle.Position = UDim2.new(0, 8, 0, 0)
	stTitle.Size = UDim2.new(1, -32, 1, 0)
	stTitle.Font = Enum.Font.SourceSans
	stTitle.Text = "Settings"
	stTitle.TextColor3 = Color3.fromRGB(220, 220, 220)
	stTitle.TextSize = 13
	stTitle.TextXAlignment = Enum.TextXAlignment.Left
	stTitle.ZIndex = 32

	local stClose = Instance.new("TextButton")
	stClose.Parent = stBar
	stClose.BackgroundTransparency = 1
	stClose.Position = UDim2.new(1, -24, 0, 0)
	stClose.Size = UDim2.new(0, 24, 1, 0)
	stClose.Font = Enum.Font.SourceSans
	stClose.Text = "×"
	stClose.TextColor3 = Color3.fromRGB(200, 200, 200)
	stClose.TextSize = 14
	stClose.ZIndex = 32
	stClose.MouseButton1Click:Connect(closeSettings)

	local autoRow = Instance.new("Frame")
	autoRow.Parent = win
	autoRow.BackgroundColor3 = Color3.fromRGB(40, 40, 45)
	autoRow.BorderSizePixel = 0
	autoRow.Position = UDim2.new(0, 10, 0, 36)
	autoRow.Size = UDim2.new(1, -20, 0, 36)
	autoRow.ZIndex = 31

	local autoLbl = Instance.new("TextLabel")
	autoLbl.Parent = autoRow
	autoLbl.BackgroundTransparency = 1
	autoLbl.Position = UDim2.new(0, 10, 0, 0)
	autoLbl.Size = UDim2.new(1, -50, 1, 0)
	autoLbl.Font = Enum.Font.SourceSans
	autoLbl.Text = "Auto Execute"
	autoLbl.TextColor3 = Color3.fromRGB(220, 220, 220)
	autoLbl.TextSize = 13
	autoLbl.TextXAlignment = Enum.TextXAlignment.Left
	autoLbl.ZIndex = 32

	local autoToggle = Instance.new("TextButton")
	autoToggle.Parent = autoRow
	autoToggle.Size = UDim2.new(0, 28, 0, 28)
	autoToggle.Position = UDim2.new(1, -34, 0.5, -14)
	autoToggle.BackgroundColor3 = autoExecute and Color3.fromRGB(40, 180, 60) or Color3.fromRGB(200, 40, 40)
	autoToggle.BorderSizePixel = 0
	autoToggle.Text = ""
	autoToggle.ZIndex = 32

	autoToggle.MouseButton1Click:Connect(function()
		autoExecute = not autoExecute
		if autoExecute then
			autoToggle.BackgroundColor3 = Color3.fromRGB(40, 180, 60)
			runCode()
			print("[ProtoSmasher]: Auto Execute ON")
		else
			autoToggle.BackgroundColor3 = Color3.fromRGB(200, 40, 40)
			print("[ProtoSmasher]: Auto Execute OFF")
		end
	end)
end

SettingsBtn.MouseButton1Click:Connect(openSettings)

MinBtn.MouseButton1Click:Connect(function()
	Main.Visible = not Main.Visible
end)

CloseBtn.MouseButton1Click:Connect(function()
	stopRainbow()
	closeSettings()
	ScreenGui:Destroy()
end)

print("[ProtoSmasher v2]: Loaded")

How to Execute Universal Script – protoshamsher v2 remake

Step 1: Copy Code: Click the Copy Code button in the viewer above to grab the clean Lua loadstring.

Step 2: Launch Executor: Open a compatible, unpatched executor. If you need one, check our Roblox Executors Directory.

Step 3: Join Experience: Launch Roblox and join Universal Script.

Step 4: Attach & Run: Attach/inject your executor into the Roblox process, paste the code into the script tab, and press Execute.

Created By

ifdjsssf
ifdjsssf
Script Creator
View Author Profile

Features & Information

Execute Universal Script – protoshamsher v2 remake. Key system required, created by ifdjsssf, updated Oct 9, 2026. Tested and working on supported executors.

Script Changelog (1)

@ifdjsssfOct 9, 2026

Create script

Community Comments (0)

No comments yet for this script.

Frequently Asked Questions

How do I execute Universal Script – protoshamsher v2 remake in Roblox?

To run Universal Script – protoshamsher v2 remake, copy the Lua loadstring from the code viewer above, launch Roblox and join Universal Script, attach a working executor (such as Potassium, Solara, or Delta from our Executors directory), paste the code into your executor console, and click Execute.

Is Universal Script – protoshamsher v2 remake keyless or does it require an access key?

Universal Script – protoshamsher v2 remake requires an access key. You can retrieve the official key directly using the Get Script Key link provided above.

Is Universal Script – protoshamsher v2 remake currently safe and working?

This script is active and operational. Always test scripts using a secondary (alt) Roblox account to safeguard your main profile against anti-cheat bans.