Roblox Underground War Script (November 2026)

PUBLISHEDUPDATED
1 Available ScriptFree

Keeping up with the latest updates gets exhausting when everyone else is already dominating the map, so grabbing an Underground War script is the smartest shortcut to staying competitive.

You drop right into team battles where the main goal is outsmarting the other side by digging secret tunnels, clashing in tight spaces, or sniping from high towers.

Before you head into the tunnels and test out the newest clan features, you should grab the active bonus code to boost your stash.

Underground War Script – Working Script

Working ScriptFree
--========================================
-- FLAG TRACKER V4
-- ESP ONLY + DRAGGABLE GUI
--========================================

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")

local player = Players.LocalPlayer

--========================================
-- SETTINGS
--========================================

local SETTINGS = {
    ESP = true,
    Team1 = true,
    Team2 = true
}

local FLAGS = {
    Team1Flag = Color3.fromRGB(255, 65, 65),
    Team2Flag = Color3.fromRGB(65, 145, 255)
}

--========================================
-- ESP STORAGE
--========================================

local espObjects = {}

local function clearESP()
    for object, gui in pairs(espObjects) do
        if gui then
            gui:Destroy()
        end
    end

    table.clear(espObjects)
end

local function getFlagPart(object)
    if object:IsA("BasePart") then
        return object
    end

    if object:IsA("Model") then
        return object:FindFirstChildWhichIsA(
            "BasePart", true
        )
    end

    return nil
end

local function addESP(object)
    local color = FLAGS[object.Name]

    if not color or not SETTINGS.ESP then
        return
    end

    local teamSetting = object.Name == "Team1Flag"
        and "Team1" or "Team2"

    if not SETTINGS[teamSetting] then
        return
    end

    if espObjects[object] then
        return
    end

    local part = getFlagPart(object)

    if not part then return end

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "FlagTrackerESP"
    billboard.Adornee = part
    billboard.Size = UDim2.fromOffset(160, 40)
    billboard.StudsOffset = Vector3.new(0, 4, 0)
    billboard.AlwaysOnTop = true
    billboard.MaxDistance = 1000

    local label = Instance.new("TextLabel")
    label.Size = UDim2.fromScale(1, 1)
    label.BackgroundTransparency = 1
    label.Text = object.Name
    label.TextColor3 = color
    label.TextStrokeTransparency = 0.25
    label.TextScaled = true
    label.Font = Enum.Font.GothamBold
    label.Parent = billboard

    billboard.Parent = part

    espObjects[object] = billboard
end

local function refreshESP()
    clearESP()

    if not SETTINGS.ESP then return end

    for _, object in ipairs(workspace:GetDescendants()) do
        if FLAGS[object.Name] then
            addESP(object)
        end
    end
end

--========================================
-- GUI
--========================================

local gui = Instance.new("ScreenGui")
gui.Name = "FlagTrackerV4"
gui.ResetOnSpawn = false
gui.Parent = player:WaitForChild("PlayerGui")

local main = Instance.new("Frame")
main.Name = "Main"
main.Size = UDim2.fromOffset(280, 270)
main.Position = UDim2.new(0, 30, 0.3, 0)
main.BackgroundColor3 = Color3.fromRGB(24, 28, 39)
main.BorderSizePixel = 0
main.Active = true
main.Parent = gui

local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 13)
corner.Parent = main

local outline = Instance.new("UIStroke")
outline.Color = Color3.fromRGB(65, 85, 120)
outline.Thickness = 1.3
outline.Parent = main

--========================================
-- DRAGGABLE GUI
--========================================

local dragging = false
local dragStart
local startPosition
local dragInput

main.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1
        or input.UserInputType == Enum.UserInputType.Touch then

        dragging = true
        dragStart = input.Position
        startPosition = main.Position

        input.Changed:Connect(function()
            if input.UserInputState ==
                Enum.UserInputState.End then
                dragging = false
            end
        end)
    end
end)

UserInputService.InputChanged:Connect(function(input)
    if dragging and (
        input.UserInputType == Enum.UserInputType.MouseMovement
        or input.UserInputType == Enum.UserInputType.Touch
    ) then
        local delta = input.Position - dragStart

        main.Position = UDim2.new(
            startPosition.X.Scale,
            startPosition.X.Offset + delta.X,
            startPosition.Y.Scale,
            startPosition.Y.Offset + delta.Y
        )
    end
end)

--========================================
-- HEADER
--========================================

local header = Instance.new("TextLabel")
header.Size = UDim2.new(1, -20, 0, 42)
header.Position = UDim2.fromOffset(10, 5)
header.BackgroundTransparency = 1
header.Text = "â—ˆ  FLAG TRACKER"
header.TextColor3 = Color3.new(1, 1, 1)
header.Font = Enum.Font.GothamBold
header.TextSize = 19
header.TextXAlignment = Enum.TextXAlignment.Left
header.Parent = main

local profile = Instance.new("TextLabel")
profile.Size = UDim2.new(1, -20, 0, 25)
profile.Position = UDim2.fromOffset(10, 45)
profile.BackgroundTransparency = 1
profile.Text = "Player: " .. player.DisplayName
profile.TextColor3 = Color3.fromRGB(165, 180, 200)
profile.Font = Enum.Font.Gotham
profile.TextSize = 13
profile.TextXAlignment = Enum.TextXAlignment.Left
profile.Parent = main

--========================================
-- SECTION LABEL
--========================================

local section = Instance.new("TextLabel")
section.Size = UDim2.new(1, -20, 0, 25)
section.Position = UDim2.fromOffset(10, 77)
section.BackgroundTransparency = 1
section.Text = "ESP SETTINGS"
section.TextColor3 = Color3.fromRGB(100, 160, 255)
section.Font = Enum.Font.GothamBold
section.TextSize = 13
section.TextXAlignment = Enum.TextXAlignment.Left
section.Parent = main

--========================================
-- TOGGLE BUTTONS
--========================================

local function createToggle(text, key, y)
    local button = Instance.new("TextButton")
    button.Size = UDim2.new(1, -20, 0, 38)
    button.Position = UDim2.fromOffset(10, y)
    button.BorderSizePixel = 0
    button.TextColor3 = Color3.new(1, 1, 1)
    button.TextSize = 14
    button.Font = Enum.Font.GothamMedium
    button.Parent = main

    local round = Instance.new("UICorner")
    round.CornerRadius = UDim.new(0, 8)
    round.Parent = button

    local function update()
        button.Text = text .. "     " ..
            (SETTINGS[key] and "ON" or "OFF")

        button.BackgroundColor3 = SETTINGS[key]
            and Color3.fromRGB(35, 115, 75)
            or Color3.fromRGB(135, 48, 55)
    end

    button.MouseButton1Click:Connect(function()
        SETTINGS[key] = not SETTINGS[key]
        update()
        refreshESP()
    end)

    update()
end

createToggle("Overall ESP", "ESP", 110)
createToggle("Team 1 Flag", "Team1", 155)
createToggle("Team 2 Flag", "Team2", 200)

--========================================
-- INITIAL SCAN
--========================================

refreshESP()

-- Detect newly loaded flags
workspace.DescendantAdded:Connect(function(object)
    if FLAGS[object.Name] then
        task.defer(function()
            if object.Parent then
                addESP(object)
            end
        end)
    end
end)

-- Periodically refresh for map changes
task.spawn(function()
    while gui.Parent do
        task.wait(3)
        refreshESP()
    end
end)
Executor compatibility changes over time. Check current reports before testing.

Copy the code above into a compatible Roblox script executor if you choose to test it.

Underground War Script Status

✓AvailabilityFree
$Price$0
◫CompatibilityDesktop & Mobile
★SafetyVerified

Roblox and game updates can affect compatibility, so the script’s status should be treated as temporary rather than guaranteed.

Frequently Asked Questions

What is a Underground War script?

A Underground War script is third-party Lua code intended to run alongside the Roblox game through a compatible script executor.

What features does this Underground War script include?

Different scripts contain different code and features. Check the script menu after it loads to see everything it offers.

How do you use the Underground War script?

Pick a compatible executor such as Hydrogen, MacSploit, AWP.GG, Delta, Fluxus, Codex, launch Roblox and join the game, copy the complete Lua code from the script card above, paste it into the executor’s editor, and click Run or Execute. Compatibility changes over time, so a name here doesn’t guarantee current support.

Can a Underground War script get your Roblox account banned?

Yes. Third-party scripts can violate Roblox rules and may put an account at risk. Only use code from a source you trust, never enter your Roblox password into a script or executor, and test on an alternate account first.

Does the Underground War script work on mobile?

Check whether both the executor and the script support your device and the current Roblox version. Mobile executor support does not guarantee that every script will work.

Check out our Roblox Scripts hub and Roblox Games Directory for more.

Leave a Comment