SCP 049 GUI
Key RequiredUniversal

SCP 049 GUI

Universal Scriptscrippterrscrippterr 1.1K views 362 executesUpdated Mar 21, 2026
Unrated
00
Lua Script•504 lines (19827 chars)
local Players          = game:GetService("Players")
local RunService       = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService     = game:GetService("TweenService")

local SCP049_USERNAME = "youruserhere"
local player = Players.LocalPlayer

if player.Name ~= SCP049_USERNAME then return end
if player.PlayerGui:FindFirstChild("SCP049GUI") then return end

local character = player.Character or player.CharacterAdded:Wait()
local hrp       = character:WaitForChild("HumanoidRootPart")
local humanoid  = character:WaitForChild("Humanoid")
humanoid.WalkSpeed = 8

player.CharacterAdded:Connect(function(char)
    character = char
    hrp       = char:WaitForChild("HumanoidRootPart")
    humanoid  = char:WaitForChild("Humanoid")
    humanoid.WalkSpeed = 8
end)

local C = {
    bg        = Color3.fromRGB(10, 5, 5),
    panel     = Color3.fromRGB(20, 8, 8),
    panelMid  = Color3.fromRGB(30, 12, 12),
    blood     = Color3.fromRGB(140, 10, 10),
    bloodDark = Color3.fromRGB(80, 5, 5),
    bloodGlow = Color3.fromRGB(200, 20, 20),
    dim       = Color3.fromRGB(50, 20, 20),
    text      = Color3.fromRGB(220, 200, 200),
    subtext   = Color3.fromRGB(120, 80, 80),
    white     = Color3.fromRGB(230, 215, 215),
    line      = Color3.fromRGB(60, 25, 25),
    green     = Color3.fromRGB(15, 110, 40),
    orange    = Color3.fromRGB(150, 70, 0),
    cyan      = Color3.fromRGB(0, 180, 200),
}

local screenGui = Instance.new("ScreenGui")
screenGui.Name           = "SCP049GUI"
screenGui.ResetOnSpawn   = false
screenGui.IgnoreGuiInset = true
screenGui.DisplayOrder   = 999
screenGui.Parent         = player.PlayerGui

local glow = Instance.new("Frame")
glow.Size                   = UDim2.new(0, 240, 0, 375)
glow.Position               = UDim2.new(0, 8, 0.5, -185)
glow.BackgroundColor3       = C.blood
glow.BackgroundTransparency = 0.6
glow.BorderSizePixel        = 0
glow.Parent                 = screenGui
Instance.new("UICorner", glow).CornerRadius = UDim.new(0, 12)

local frame = Instance.new("Frame")
frame.Size                   = UDim2.new(0, 232, 0, 368)
frame.Position               = UDim2.new(0, 12, 0.5, -184)
frame.BackgroundColor3       = C.bg
frame.BackgroundTransparency = 0
frame.BorderSizePixel        = 0
frame.Parent                 = screenGui
Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10)

local topBar = Instance.new("Frame")
topBar.Size             = UDim2.new(1, 0, 0, 4)
topBar.BackgroundColor3 = C.bloodGlow
topBar.BorderSizePixel  = 0
topBar.Parent           = frame
Instance.new("UICorner", topBar).CornerRadius = UDim.new(0, 10)

local header = Instance.new("Frame")
header.Size             = UDim2.new(1, 0, 0, 85)
header.Position         = UDim2.new(0, 0, 0, 4)
header.BackgroundColor3 = C.panel
header.BorderSizePixel  = 0
header.Parent           = frame

local tag = Instance.new("TextLabel")
tag.Size                   = UDim2.new(1, -16, 0, 14)
tag.Position               = UDim2.new(0, 8, 0, 7)
tag.BackgroundTransparency = 1
tag.TextColor3             = C.subtext
tag.Text                   = "/ / SCP-049  EUCLID  ACTIVE / /"
tag.Font                   = Enum.Font.Code
tag.TextSize               = 10
tag.TextXAlignment         = Enum.TextXAlignment.Left
tag.Parent                 = header

local titleLabel = Instance.new("TextLabel")
titleLabel.Size                   = UDim2.new(1, -16, 0, 36)
titleLabel.Position               = UDim2.new(0, 8, 0, 22)
titleLabel.BackgroundTransparency = 1
titleLabel.TextColor3             = C.white
titleLabel.Text                   = "PLAGUE DOCTOR"
titleLabel.Font                   = Enum.Font.GothamBold
titleLabel.TextSize               = 26
titleLabel.TextXAlignment         = Enum.TextXAlignment.Left
titleLabel.Parent                 = header

local subTitle = Instance.new("TextLabel")
subTitle.Size                   = UDim2.new(1, -16, 0, 16)
subTitle.Position               = UDim2.new(0, 8, 0, 60)
subTitle.BackgroundTransparency = 1
subTitle.TextColor3             = C.blood
subTitle.Text                   = "THE PESTILENCE WALKS AMONG YOU"
subTitle.Font                   = Enum.Font.Code
subTitle.TextSize               = 9
subTitle.TextXAlignment         = Enum.TextXAlignment.Left
subTitle.Parent                 = header

local headerLine = Instance.new("Frame")
headerLine.Size             = UDim2.new(1, 0, 0, 1)
headerLine.Position         = UDim2.new(0, 0, 0, 89)
headerLine.BackgroundColor3 = C.blood
headerLine.BorderSizePixel  = 0
headerLine.Parent           = frame

local statusBg = Instance.new("Frame")
statusBg.Size             = UDim2.new(1, 0, 0, 30)
statusBg.Position         = UDim2.new(0, 0, 0, 90)
statusBg.BackgroundColor3 = C.panelMid
statusBg.BorderSizePixel  = 0
statusBg.Parent           = frame

local blinkDot = Instance.new("Frame")
blinkDot.Size             = UDim2.new(0, 7, 0, 7)
blinkDot.Position         = UDim2.new(0, 10, 0.5, -3)
blinkDot.BackgroundColor3 = C.bloodGlow
blinkDot.BorderSizePixel  = 0
blinkDot.Parent           = statusBg
Instance.new("UICorner", blinkDot).CornerRadius = UDim.new(0.5, 0)

task.spawn(function()
    while true do
        TweenService:Create(blinkDot, TweenInfo.new(0.6), {BackgroundTransparency = 1}):Play()
        task.wait(0.6)
        TweenService:Create(blinkDot, TweenInfo.new(0.6), {BackgroundTransparency = 0}):Play()
        task.wait(0.6)
    end
end)

local statusLabel = Instance.new("TextLabel")
statusLabel.Size                   = UDim2.new(1, -30, 1, 0)
statusLabel.Position               = UDim2.new(0, 24, 0, 0)
statusLabel.BackgroundTransparency = 1
statusLabel.TextColor3             = C.bloodGlow
statusLabel.Text                   = "SYSTEM NOMINAL — AWAITING COMMAND"
statusLabel.Font                   = Enum.Font.Code
statusLabel.TextSize               = 10
statusLabel.TextXAlignment         = Enum.TextXAlignment.Left
statusLabel.Parent                 = statusBg

local statusLine = Instance.new("Frame")
statusLine.Size             = UDim2.new(1, 0, 0, 1)
statusLine.Position         = UDim2.new(0, 0, 0, 120)
statusLine.BackgroundColor3 = C.line
statusLine.BorderSizePixel  = 0
statusLine.Parent           = frame

local cureCountLabel = Instance.new("TextLabel")
cureCountLabel.Size                   = UDim2.new(1, -16, 0, 18)
cureCountLabel.Position               = UDim2.new(0, 8, 0, 124)
cureCountLabel.BackgroundTransparency = 1
cureCountLabel.TextColor3             = C.subtext
cureCountLabel.Text                   = "SUBJECTS CURED: 0"
cureCountLabel.Font                   = Enum.Font.Code
cureCountLabel.TextSize               = 10
cureCountLabel.TextXAlignment         = Enum.TextXAlignment.Left
cureCountLabel.Parent                 = frame

local cureCountLine = Instance.new("Frame")
cureCountLine.Size             = UDim2.new(1, 0, 0, 1)
cureCountLine.Position         = UDim2.new(0, 0, 0, 145)
cureCountLine.BackgroundColor3 = C.line
cureCountLine.BorderSizePixel  = 0
cureCountLine.Parent           = frame

local function makeButton(title, desc, key, yPos, activeColor)
    local btn = Instance.new("TextButton")
    btn.Size             = UDim2.new(1, -16, 0, 58)
    btn.Position         = UDim2.new(0, 8, 0, yPos)
    btn.BackgroundColor3 = C.panel
    btn.Text             = ""
    btn.BorderSizePixel  = 0
    btn.AutoButtonColor  = false
    btn.Parent           = frame
    Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 7)

    local strip = Instance.new("Frame")
    strip.Size             = UDim2.new(0, 3, 0.6, 0)
    strip.Position         = UDim2.new(0, 0, 0.2, 0)
    strip.BackgroundColor3 = activeColor
    strip.BorderSizePixel  = 0
    strip.Parent           = btn
    Instance.new("UICorner", strip).CornerRadius = UDim.new(1, 0)

    local titleLbl = Instance.new("TextLabel")
    titleLbl.Size                   = UDim2.new(1, -70, 0, 24)
    titleLbl.Position               = UDim2.new(0, 14, 0, 8)
    titleLbl.BackgroundTransparency = 1
    titleLbl.TextColor3             = C.text
    titleLbl.Text                   = title
    titleLbl.Font                   = Enum.Font.GothamBold
    titleLbl.TextSize               = 14
    titleLbl.TextXAlignment         = Enum.TextXAlignment.Left
    titleLbl.Parent                 = btn

    local descLbl = Instance.new("TextLabel")
    descLbl.Size                   = UDim2.new(1, -70, 0, 16)
    descLbl.Position               = UDim2.new(0, 14, 0, 32)
    descLbl.BackgroundTransparency = 1
    descLbl.TextColor3             = C.subtext
    descLbl.Text                   = desc
    descLbl.Font                   = Enum.Font.Code
    descLbl.TextSize               = 10
    descLbl.TextXAlignment         = Enum.TextXAlignment.Left
    descLbl.Parent                 = btn

    local keyBg = Instance.new("Frame")
    keyBg.Size             = UDim2.new(0, 26, 0, 20)
    keyBg.Position         = UDim2.new(1, -34, 0.5, -10)
    keyBg.BackgroundColor3 = C.dim
    keyBg.BorderSizePixel  = 0
    keyBg.Parent           = btn
    Instance.new("UICorner", keyBg).CornerRadius = UDim.new(0, 4)

    local keyLbl = Instance.new("TextLabel")
    keyLbl.Size                   = UDim2.new(1, 0, 1, 0)
    keyLbl.BackgroundTransparency = 1
    keyLbl.TextColor3             = C.subtext
    keyLbl.Text                   = key
    keyLbl.Font                   = Enum.Font.GothamBold
    keyLbl.TextSize               = 10
    keyLbl.Parent                 = keyBg

    local dot = Instance.new("Frame")
    dot.Size             = UDim2.new(0, 7, 0, 7)
    dot.Position         = UDim2.new(1, -46, 0.5, -3)
    dot.BackgroundColor3 = C.dim
    dot.BorderSizePixel  = 0
    dot.Parent           = btn
    Instance.new("UICorner", dot).CornerRadius = UDim.new(0.5, 0)

    btn.MouseEnter:Connect(function()
        TweenService:Create(btn, TweenInfo.new(0.12), {BackgroundColor3 = C.panelMid}):Play()
    end)
    btn.MouseLeave:Connect(function()
        TweenService:Create(btn, TweenInfo.new(0.12), {BackgroundColor3 = C.panel}):Play()
    end)

    return btn, titleLbl, descLbl, strip, dot
end

local function makeSeparator(y)
    local s = Instance.new("Frame")
    s.Size             = UDim2.new(1, -16, 0, 1)
    s.Position         = UDim2.new(0, 8, 0, y)
    s.BackgroundColor3 = C.line
    s.BorderSizePixel  = 0
    s.Parent           = frame
end

local btnStalk, stalkTitle, stalkDesc, stalkStrip, stalkDot = makeButton("STALK",       "teleport behind nearest target",  "F", 150, C.blood)
makeSeparator(212)
local btnESP,   espTitle,   espDesc,   espStrip,   espDot   = makeButton("SUBJECT ESP", "reveal all players through walls", "Z", 216, C.cyan)
makeSeparator(278)
local btnArm,   armTitle,   armDesc,   armStrip,   armDot   = makeButton("CURE",        "extend arm to eliminate subject", "R", 282, C.green)

local bottomBar = Instance.new("Frame")
bottomBar.Size             = UDim2.new(1, 0, 0, 26)
bottomBar.Position         = UDim2.new(0, 0, 1, -26)
bottomBar.BackgroundColor3 = C.panel
bottomBar.BorderSizePixel  = 0
bottomBar.Parent           = frame
Instance.new("UICorner", bottomBar).CornerRadius = UDim.new(0, 10)

local bottomText = Instance.new("TextLabel")
bottomText.Size                   = UDim2.new(1, -16, 1, 0)
bottomText.Position               = UDim2.new(0, 8, 0, 0)
bottomText.BackgroundTransparency = 1
bottomText.TextColor3             = C.subtext
bottomText.Text                   = "DRAG  //  SCP-049  //  CLASS: EUCLID"
bottomText.Font                   = Enum.Font.Code
bottomText.TextSize               = 9
bottomText.Parent                 = bottomBar

-- Drag
local dragging, dragStart, startGlow, startFrame
header.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging   = true
        dragStart  = input.Position
        startGlow  = glow.Position
        startFrame = frame.Position
    end
end)
header.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
UserInputService.InputChanged:Connect(function(input)
    if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
        local delta = input.Position - dragStart
        glow.Position  = UDim2.new(startGlow.X.Scale,  startGlow.X.Offset  + delta.X, startGlow.Y.Scale,  startGlow.Y.Offset  + delta.Y)
        frame.Position = UDim2.new(startFrame.X.Scale, startFrame.X.Offset + delta.X, startFrame.Y.Scale, startFrame.Y.Offset + delta.Y)
    end
end)

-- STATE
local espOn         = false
local armOut        = false
local cureCount     = 0
local stalkCooldown = false
local espHighlights = {}

-- Cure touch detection while arm is out
local cureTouchConn = nil

local function getMotor()
    if not character then return nil end
    local torso = character:FindFirstChild("Torso")
    if not torso then return nil end
    return torso:FindFirstChild("Right Shoulder")
end

-- ARM / CURE
local function extendArm()
    armOut = true
    armTitle.Text             = "CURE: ACTIVE"
    armDesc.Text              = "touch a subject to cure them"
    armStrip.BackgroundColor3 = Color3.fromRGB(30, 180, 80)
    armDot.BackgroundColor3   = Color3.fromRGB(30, 180, 80)
    statusLabel.Text          = "CURE SEQUENCE INITIATED..."
    local motor = getMotor()
    if not motor then return end
    TweenService:Create(motor, TweenInfo.new(0.4, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {
        C0 = CFrame.new(1, 0.5, 0) * CFrame.Angles(math.rad(90), math.rad(90), 0)
    }):Play()
    RunService:BindToRenderStep("ArmLock", Enum.RenderPriority.Last.Value, function()
        local m = getMotor()
        if m then
            m.C0        = CFrame.new(1, 0.5, 0) * CFrame.Angles(math.rad(90), math.rad(90), 0)
            m.Transform = CFrame.new()
        end
    end)

    -- Check every frame if touching a player while arm is out
    cureTouchConn = RunService.Heartbeat:Connect(function()
        if not hrp then return end
        for _, p in ipairs(Players:GetPlayers()) do
            if p ~= player and p.Character then
                local pHRP = p.Character:FindFirstChild("HumanoidRootPart")
                local pHum = p.Character:FindFirstChild("Humanoid")
                if pHRP and pHum and pHum.Health > 0 then
                    if (hrp.Position - pHRP.Position).Magnitude <= 5 then
                        pHum.Health = 0
                        cureCount += 1
                        cureCountLabel.Text = "SUBJECTS CURED: " .. cureCount
                        statusLabel.Text    = "SUBJECT " .. p.Name .. " HAS BEEN CURED."
                    end
                end
            end
        end
    end)
end

local function retractArm()
    armOut = false
    armTitle.Text             = "CURE"
    armDesc.Text              = "extend arm to eliminate subject"
    armStrip.BackgroundColor3 = C.green
    armDot.BackgroundColor3   = C.dim
    statusLabel.Text          = "SYSTEM NOMINAL — AWAITING COMMAND"
    RunService:UnbindFromRenderStep("ArmLock")
    if cureTouchConn then cureTouchConn:Disconnect(); cureTouchConn = nil end
    local motor = getMotor()
    if not motor then return end
    motor.Transform = CFrame.new()
    TweenService:Create(motor, TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.In), {
        C0 = CFrame.new(1, 0.5, 0) * CFrame.Angles(0, math.rad(90), 0)
    }):Play()
end

local function toggleArm()
    if armOut then retractArm() else extendArm() end
end

-- STALK
local function doStalk()
    if stalkCooldown then
        statusLabel.Text = "STALK RECHARGING — PATIENCE"
        task.delay(1, function() statusLabel.Text = "SYSTEM NOMINAL — AWAITING COMMAND" end)
        return
    end
    local nearest, nearestDist = nil, math.huge
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= player and p.Character then
            local pHRP = p.Character:FindFirstChild("HumanoidRootPart")
            if pHRP then
                local d = (hrp.Position - pHRP.Position).Magnitude
                if d < nearestDist then
                    nearestDist = d
                    nearest     = pHRP
                end
            end
        end
    end
    if not nearest then
        statusLabel.Text = "NO SUBJECT DETECTED."
        task.delay(1.5, function() statusLabel.Text = "SYSTEM NOMINAL — AWAITING COMMAND" end)
        return
    end
    hrp.CFrame = nearest.CFrame * CFrame.new(0, 0, 3)
    stalkCooldown = true
    statusLabel.Text            = "STALKING SUBJECT..."
    stalkTitle.Text             = "STALK: RECHARGING"
    stalkDesc.Text              = "please wait..."
    stalkStrip.BackgroundColor3 = C.orange
    stalkDot.BackgroundColor3   = C.orange
    task.delay(8, function()
        stalkTitle.Text             = "STALK"
        stalkDesc.Text              = "teleport behind nearest target"
        stalkStrip.BackgroundColor3 = C.blood
        stalkDot.BackgroundColor3   = C.dim
        statusLabel.Text            = "SYSTEM NOMINAL — AWAITING COMMAND"
        stalkCooldown               = false
    end)
end

-- ESP
local function clearESP()
    for _, h in pairs(espHighlights) do
        if h and h.Parent then h:Destroy() end
    end
    espHighlights = {}
end

local function enableESP()
    espOn = true
    espTitle.Text             = "SUBJECT ESP: ON"
    espDesc.Text              = "tracking all subjects"
    espStrip.BackgroundColor3 = C.cyan
    espDot.BackgroundColor3   = C.cyan
    statusLabel.Text          = "ESP ACTIVE — ALL SUBJECTS VISIBLE"
    clearESP()
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= player and p.Character then
            local highlight = Instance.new("Highlight")
            highlight.FillColor           = Color3.fromRGB(200, 20, 20)
            highlight.OutlineColor        = Color3.fromRGB(255, 80, 80)
            highlight.FillTransparency    = 0.5
            highlight.OutlineTransparency = 0
            highlight.DepthMode           = Enum.HighlightDepthMode.AlwaysOnTop
            highlight.Parent              = p.Character
            espHighlights[p.Name]         = highlight
        end
    end
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= player then
            p.CharacterAdded:Connect(function(char)
                if not espOn then return end
                task.wait(0.5)
                local highlight = Instance.new("Highlight")
                highlight.FillColor           = Color3.fromRGB(200, 20, 20)
                highlight.OutlineColor        = Color3.fromRGB(255, 80, 80)
                highlight.FillTransparency    = 0.5
                highlight.OutlineTransparency = 0
                highlight.DepthMode           = Enum.HighlightDepthMode.AlwaysOnTop
                highlight.Parent              = char
                espHighlights[p.Name]         = highlight
            end)
        end
    end
end

local function disableESP()
    espOn = false
    espTitle.Text             = "SUBJECT ESP"
    espDesc.Text              = "reveal all players through walls"
    espStrip.BackgroundColor3 = C.cyan
    espDot.BackgroundColor3   = C.dim
    statusLabel.Text          = "SYSTEM NOMINAL — AWAITING COMMAND"
    clearESP()
end

local function toggleESP()
    if espOn then disableESP() else enableESP() end
end

-- BUTTONS
btnStalk.MouseButton1Click:Connect(function() doStalk() end)
btnESP.MouseButton1Click:Connect(function() toggleESP() end)
btnArm.MouseButton1Click:Connect(function() toggleArm() end)

-- KEYBINDS
UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if gameProcessed then return end
    if input.KeyCode == Enum.KeyCode.F then doStalk() end
    if input.KeyCode == Enum.KeyCode.Z then toggleESP() end
    if input.KeyCode == Enum.KeyCode.R then toggleArm() end
end)

print("SCP-049 loaded for " .. player.Name)

Features & Information

For this script to work, replace "youruserhere" with your username.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts