NightFall Script – Prison Life, ESP, Rapid Fire & Teleport 0 No Key

NightFall Script – Prison Life, ESP, Rapid Fire & Teleport

Prison Life • 8 hours ago • 0 views
Play Game

Description

NightFall is a Prison Life script for Roblox with visual enhancements, combat tools, movement options, and useful utilities. It includes ESP, team colors, Fullbright, Rapid Fire, Auto Criminal, Click Teleport, and Quick Respawn, along with additional player-tracking and interface controls.

Key Features

  • ESP
  • Team Colors
  • Player Highlight
  • Fullbright
  • Invisible
  • Anti-Invis
  • Damage Visible
  • Custom Weapon Visual
  • Closest Player Tracker
  • Hitbox Hat
  • Rapid Fire
  • Tase Bypass
  • Anti-Fling
  • Auto Criminal
  • AutoSprint
  • Anti-Jump
  • Underground Movement
  • Quick Respawn
  • Click Teleport
  • Killfeed Notifications
  • Unload Script
  • Reset Lighting
  • Direct Execute
Prison Life
Game Page
Prison Life
Roblox
Views 0+
Likes 0
Dislikes 0
Posted 8 hours ago
Updated 8 hours ago
Key System No
Mobile Supported

Script Preview

2274 lines • 56.9 KB
--========================================================--
-- SERVICES
--========================================================--

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Lighting = game:GetService("Lighting")
local Workspace = game:GetService("Workspace")

local LocalPlayer = Players.LocalPlayer

--========================================================--
-- WINDUI
--========================================================--

local WindUI = loadstring(game:HttpGet(
    "https://raw.githubusercontent.com/Footagesus/WindUI/main/dist/main.lua"
))()

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

local Settings = {

    AntiJump = false,
    AutoSprint = false,

    Underground = false,
    UndergroundDepth = 8,
    UndergroundSpeed = 20,

    QuickRespawn = false,

    ESP = false,
    TeamColors = true,

    Highlight = true,
    HighlightColor = Color3.fromRGB(255, 70, 70),
    HighlightTransparency = 0.5,
	FireRateMultiplier = 1.0,

    Fullbright = false,

    TargetTeam = false,
    RapidFire = false,
    FireRate = 0.05,

    Hitbox = false,
    HitboxSize = 6,
}

--========================================================--
-- STATE
--========================================================--

local UndergroundConnection = nil
local UndergroundSavedCFrame = nil

local CharacterConnection = nil
local DeathConnection = nil
local CharacterTrackConnection = nil

local LastAliveCFrame = nil
local LastDeathCFrame = nil

local ESPObjects = {}
local HitboxObjects = {}

local OriginalLighting = {
    Brightness = Lighting.Brightness,
    ClockTime = Lighting.ClockTime,
    FogEnd = Lighting.FogEnd,
    FogStart = Lighting.FogStart,
    Ambient = Lighting.Ambient,
    OutdoorAmbient = Lighting.OutdoorAmbient,
    GlobalShadows = Lighting.GlobalShadows,
    ExposureCompensation = Lighting.ExposureCompensation,
}

--========================================================--
-- CHARACTER
--========================================================--

local function getCharacter()
    local Character = LocalPlayer.Character

    if not Character then
        return nil, nil, nil
    end

    local Humanoid = Character:FindFirstChildOfClass("Humanoid")
    local Root = Character:FindFirstChild("HumanoidRootPart")

    return Character, Humanoid, Root
end

--========================================================--
-- ESP
--========================================================--

local function removeESP(Player)

    local Object = ESPObjects[Player]

    if Object then

        if Object.Highlight then
            Object.Highlight:Destroy()
        end

        if Object.Billboard then
            Object.Billboard:Destroy()
        end

        ESPObjects[Player] = nil
    end
end

local function getPlayerColor(Player)

    if Settings.TeamColors
        and Player.Team
        and Player.Team.TeamColor then

        return Player.Team.TeamColor.Color
    end

    return Settings.HighlightColor
end

local function createESP(Player)

    if Player == LocalPlayer then
        return
    end

    removeESP(Player)

    local Character = Player.Character

    if not Character then
        return
    end

    local Root =
        Character:FindFirstChild("HumanoidRootPart")

    if not Root then
        return
    end

    local HighlightObject = nil

    if Settings.Highlight then

        HighlightObject =
            Instance.new("Highlight")

        HighlightObject.Name =
            "NightfallHighlight"

        HighlightObject.Adornee =
            Character

        HighlightObject.DepthMode =
            Enum.HighlightDepthMode.AlwaysOnTop

        HighlightObject.FillTransparency =
            Settings.HighlightTransparency

        HighlightObject.OutlineTransparency = 0

        HighlightObject.FillColor =
            getPlayerColor(Player)

        HighlightObject.OutlineColor =
            getPlayerColor(Player)

        HighlightObject.Parent =
            Character
    end

    local Billboard =
        Instance.new("BillboardGui")

    Billboard.Name =
        "NightfallESP"

    Billboard.Adornee =
        Root

    Billboard.Size =
        UDim2.fromOffset(220, 55)

    Billboard.StudsOffset =
        Vector3.new(0, 3.2, 0)

    Billboard.AlwaysOnTop = true

    Billboard.Active = true

    local Label =
        Instance.new("TextButton")

    Label.BackgroundTransparency = 1
    Label.Size = UDim2.fromScale(1, 1)

    Label.Font =
        Enum.Font.GothamSemibold

    Label.TextSize = 13
    Label.TextStrokeTransparency = 0.5

    Label.TextColor3 =
        getPlayerColor(Player)

    Label.Text = Player.DisplayName

    Label.AutoButtonColor = false
    Label.Active = true
    Label.Selectable = false

    Label.Parent = Billboard
    Label:SetAttribute("NF_Owner", Player.UserId)
    Billboard.Parent = Root

    ESPObjects[Player] = {
        Highlight = HighlightObject,
        Billboard = Billboard,
        Label = Label
    }
end

local function updateESP()

    for _, Player in ipairs(Players:GetPlayers()) do

        if Player ~= LocalPlayer then

            if Settings.ESP then

                if not ESPObjects[Player]
                    and Player.Character then

                    createESP(Player)
                end

                local Object =
                    ESPObjects[Player]

                if Object
                    and Object.Label then

                    local Character =
                        Player.Character

                    local Humanoid =
                        Character
                        and Character:FindFirstChildOfClass(
                            "Humanoid"
                        )

                    local Root =
                        Character
                        and Character:FindFirstChild(
                            "HumanoidRootPart"
                        )

                    local _, _, MyRoot =
                        getCharacter()

                    local DistanceText = ""

                    if Root and MyRoot then

                        local Distance =
                            math.floor(
                                (
                                    Root.Position
                                    - MyRoot.Position
                                ).Magnitude
                            )

                        DistanceText =
                            " [" .. Distance .. "m]"
                    end

                    local HealthText = ""

                    if Humanoid then

                        HealthText =
                            " | "
                            .. math.floor(
                                Humanoid.Health
                            )
                            .. " HP"
                    end

                    Object.Label.Text =
                        Player.DisplayName
                        .. DistanceText
                        .. HealthText

                    Object.Label.TextColor3 =
                        getPlayerColor(Player)
                end

            else
                removeESP(Player)
            end
        end
    end
end

--========================================================--
-- CLICK HOTKEY TP
--========================================================--

local ESP_CLICK_RADIUS = 60
local ESP_CLICK_COOLDOWN = 0.3
local _lastTeleportTime = 0

local TP_MODIFIER_KEY = Enum.KeyCode.LeftShift

local _tpKeyHeld = false

UserInputService.InputBegan:Connect(function(input, gameProcessed)
    if input.UserInputType == Enum.UserInputType.Keyboard
       and (input.KeyCode == Enum.KeyCode.LeftShift
         or input.KeyCode == Enum.KeyCode.RightShift) then
        _tpKeyHeld = true
    end
end)

UserInputService.InputEnded:Connect(function(input, gameProcessed)
    if input.UserInputType == Enum.UserInputType.Keyboard
       and (input.KeyCode == Enum.KeyCode.LeftShift
         or input.KeyCode == Enum.KeyCode.RightShift) then
        _tpKeyHeld = false
    end
end)

local function teleportToRoot(targetRoot)
    local myChar = LocalPlayer.Character
    local myRoot = myChar and myChar:FindFirstChild("HumanoidRootPart")
    if not myRoot or not targetRoot then return end

    local targetLook = targetRoot.CFrame.LookVector
    local newPos = targetRoot.Position - targetLook * 3

    myRoot.CFrame = CFrame.new(newPos, targetRoot.Position)
    myRoot.AssemblyLinearVelocity = Vector3.zero
    myRoot.AssemblyAngularVelocity = Vector3.zero
end

UserInputService.InputBegan:Connect(function(input, gameProcessed)

    if gameProcessed then return end

    if not _tpKeyHeld then return end

    local isClick = input.UserInputType == Enum.UserInputType.MouseButton1
                 or input.UserInputType == Enum.UserInputType.Touch
    if not isClick then return end

    if os.clock() - _lastTeleportTime < ESP_CLICK_COOLDOWN then return end

    local clickPos
    if input.UserInputType == Enum.UserInputType.Touch then
        clickPos = Vector2.new(input.Position.X, input.Position.Y)
    else
        clickPos = Vector2.new(
            UserInputService:GetMouseLocation().X,
            UserInputService:GetMouseLocation().Y
        )
    end

    local cam = workspace.CurrentCamera
    if not cam then return end

    local bestPlayer = nil
    local bestDist = ESP_CLICK_RADIUS

    for player, object in pairs(ESPObjects) do
        local billboard = object.Billboard
        if billboard and billboard.Adornee and billboard.Parent then

            local worldPos = billboard.Adornee.Position + billboard.StudsOffset
            local screenPos, onScreen = cam:WorldToViewportPoint(worldPos)

            if onScreen then
                local d = (Vector2.new(screenPos.X, screenPos.Y) - clickPos).Magnitude

                if d  0
end

local function createHitbox(Player)
    removeHitbox(Player)

    local Character = Player.Character
    if not Character then return end

    local Head = Character:FindFirstChild("Head")
    if not Head then
        task.spawn(function()
            Head = Character:WaitForChild("Head", 5)
            if not Head then return end
            if not Settings.Hitbox then return end
            if not isAlive(Player) then return end
            if HitboxObjects[Player] then return end

            local s = Settings.HitboxSize or 6
            local original = Head.Size

            pcall(function() Head.Size = Vector3.new(s, s, s) end)

            HitboxObjects[Player] = {
                Head = Head,
                OriginalSize = original,
                Player = Player,
            }
        end)
        return
    end

    local s = Settings.HitboxSize or 6
    local original = Head.Size

    pcall(function()
        Head.Size = Vector3.new(s, s, s)
    end)

    HitboxObjects[Player] = {
        Head = Head,
        OriginalSize = original,
        Player = Player,
    }
end

local _hbQueue = {}
local _hbRunning = false

local function processQueue()
    if _hbRunning then return end
    _hbRunning = true

    task.spawn(function()
        while #_hbQueue > 0 do
            local job = table.remove(_hbQueue, 1)
            if job
                and job.Player
                and job.Player.Parent
                and Settings.Hitbox
                and isAlive(job.Player) then
                createHitbox(job.Player)
            end
            task.wait(0.15)
        end
        _hbRunning = false
    end)
end

local function queueHitbox(Player)
    for _, job in ipairs(_hbQueue) do
        if job.Player == Player then return end
    end
    table.insert(_hbQueue, { Player = Player })
    processQueue()
end

local function updateHitboxes()
    for _, Player in ipairs(Players:GetPlayers()) do
        if Player ~= LocalPlayer then
            if Settings.Hitbox and isAlive(Player) then
                local data = HitboxObjects[Player]
                if not data
                    or not data.Head
                    or not data.Head.Parent
                    or data.Head ~= Player.Character:FindFirstChild("Head") then
                    queueHitbox(Player)
                end
            else
                removeHitbox(Player)
            end
        end
    end
end

local HitboxVisualObjects = HitboxVisualObjects or {}

local function removeHitboxVisual(Player)
    local part = HitboxVisualObjects[Player]
    if not part then return end
    if part.Parent then
        pcall(function() part:Destroy() end)
    end
    HitboxVisualObjects[Player] = nil
end

local function createHitboxVisual(Player)
    removeHitboxVisual(Player)

    local Character = Player.Character
    if not Character then return end

    local Head = Character:FindFirstChild("Head")
    if not Head then return end

    local s = Settings.HitboxSize or 6

    local Part = Instance.new("Part")
    Part.Name         = "NightfallHitboxVisual"
    Part.Size         = Vector3.new(s, s, s)
    Part.Transparency = 0.7
    Part.Material     = Enum.Material.ForceField
    Part.Color        = Settings.HitboxVisualColor or Color3.fromRGB(255, 0, 0)
    Part.CastShadow   = false
    Part.CanCollide   = false
    Part.CanTouch     = false
    Part.CanQuery     = false
    Part.Massless     = true
    Part.Anchored     = false
    Part.CFrame       = Head.CFrame
    Part.Parent       = Head

    local Weld = Instance.new("WeldConstraint")
    Weld.Part0 = Part
    Weld.Part1 = Head
    Weld.Parent = Part

    HitboxVisualObjects[Player] = Part
end

local function updateHitboxVisuals()
    for _, Player in ipairs(Players:GetPlayers()) do
        if Player ~= LocalPlayer then
            if Settings.Hitbox and Settings.HitboxVisual and isAlive(Player) then
                local part = HitboxVisualObjects[Player]
                local needRecreate = false

                if not part or not part.Parent then
                    needRecreate = true
                elseif part.Size.X ~= (Settings.HitboxSize or 6) then
                    needRecreate = true
                end

                if needRecreate then
                    createHitboxVisual(Player)
                end
            else
                removeHitboxVisual(Player)
            end
        end
    end
end

local DamageNumbers = (function()
    local state = {
        Enabled = false,
        Conn    = nil,
        LastHP  = {},
        Pool    = {},
    }

    local function spawnNumber(worldPosition, amount)
        local bb = Instance.new("BillboardGui")
        bb.Name             = "NF_DamageNumber"
        bb.Size             = UDim2.fromOffset(120, 50)
        bb.StudsOffset      = Vector3.new(0, 0, 0)
        bb.AlwaysOnTop      = true
        bb.LightInfluence   = 0
        bb.MaxDistance      = 300
        bb.Adornee          = nil
        bb.Parent           = Workspace.CurrentCamera
        bb.Enabled          = true

        local anchor = Instance.new("Part")
        anchor.Name           = "NF_DamageAnchor"
        anchor.Size           = Vector3.new(0.1, 0.1, 0.1)
        anchor.Transparency   = 1
        anchor.CanCollide     = false
        anchor.CanQuery       = false
        anchor.CanTouch       = false
        anchor.Anchored       = true
        anchor.Massless       = true
        anchor.CFrame         = CFrame.new(worldPosition)
        anchor.Parent         = Workspace.CurrentCamera

        bb.Adornee = anchor

        local label = Instance.new("TextLabel")
        label.BackgroundTransparency = 1
        label.Size                   = UDim2.fromScale(1, 1)
        label.Font                   = Enum.Font.GothamBold
        label.TextScaled             = true
        label.TextColor3             = Color3.fromRGB(255, 60, 60)
        label.TextStrokeTransparency = 0
        label.TextStrokeColor3       = Color3.fromRGB(0, 0, 0)
        label.Text                   = "-" .. tostring(amount)
        label.Parent                 = bb

        task.spawn(function()
            local startTime = os.clock()
            local duration  = 1.0
            local startPos  = worldPosition
            local riseY     = 4

            while os.clock() - startTime  0 then

                local head = char:FindFirstChild("Head")
                local root = char:FindFirstChild("HumanoidRootPart")
                local pos

                if head then
                    pos = head.Position + Vector3.new(0, 2, 0)
                elseif root then
                    pos = root.Position + Vector3.new(0, 2, 0)
                else
                    pos = Vector3.new(0, 0, 0)
                end

                spawnNumber(pos, math.floor(delta + 0.5))
            end
        end)

        state.Conn = state.Conn
    end


    local function setupPlayer(Player)
        if Player == LocalPlayer then return end

        if Player.Character then
            hookPlayer(Player)
        end

        Player.CharacterAdded:Connect(function()
            task.wait(0.3)
            if state.Enabled then
                hookPlayer(Player)
            end
        end)
    end

    local function enable()
        if state.Enabled then return end
        state.Enabled = true
        state.LastHP  = {}

        for _, Player in ipairs(Players:GetPlayers()) do
            setupPlayer(Player)
        end
    end

    local function disable()
        if not state.Enabled then return end
        state.Enabled = false
        state.LastHP  = {}

        for _, obj in ipairs(Workspace.CurrentCamera:GetChildren()) do
            if obj.Name == "NF_DamageNumber"
                or obj.Name == "NF_DamageAnchor" then
                obj:Destroy()
            end
        end
    end

    Players.PlayerAdded:Connect(function(Player)
        if state.Enabled then
            setupPlayer(Player)
        end
    end)

    return {
        Set = function(v)
            if v then enable() else disable() end
            return state.Enabled
        end,
        Get = function() return state.Enabled end,
    }
end)()

--========================================================--
-- FULLBRIGHT
--========================================================--

local function enableFullbright()

    Lighting.Brightness = 1
    Lighting.ClockTime = 14

    Lighting.FogStart = 100
    Lighting.FogEnd = 10000

    Lighting.Ambient =
        Color3.fromRGB(140, 140, 140)

    Lighting.OutdoorAmbient =
        Color3.fromRGB(160, 160, 160)

    Lighting.GlobalShadows = true

    Lighting.ExposureCompensation = 0

    for _, Object in ipairs(Lighting:GetChildren()) do

        if Object:IsA("Atmosphere") then

            pcall(function()
                Object.Density = 0.1
            end)
        end

    end
end

local function disableFullbright()

    Lighting.Brightness =
        OriginalLighting.Brightness

    Lighting.ClockTime =
        OriginalLighting.ClockTime

    Lighting.FogStart =
        OriginalLighting.FogStart

    Lighting.FogEnd =
        OriginalLighting.FogEnd

    Lighting.Ambient =
        OriginalLighting.Ambient

    Lighting.OutdoorAmbient =
        OriginalLighting.OutdoorAmbient

    Lighting.GlobalShadows =
        OriginalLighting.GlobalShadows

    Lighting.ExposureCompensation =
        OriginalLighting.ExposureCompensation

end

local function updateFullbright()

    if Settings.Fullbright then
        enableFullbright()
    else
        disableFullbright()
    end
end

--========================================================--
-- RapidFire 
--========================================================--

local function patchTool(tool)
    if not tool or not tool:IsA("Tool") then return end
    if tool:GetAttribute("ToolType") ~= "Gun" then return end
    if not Settings.RapidFire then return end

    local newRate = tonumber(Settings.FireRate) or 0.05
    if newRate < 0.01 then newRate = 0.01 end

    pcall(function()
        tool:SetAttribute("FireRate", newRate)
    end)
end

LocalPlayer.CharacterAdded:Connect(function(char)
    task.wait(0.2)
    for _, child in ipairs(char:GetChildren()) do
        if child:IsA("Tool") then patchTool(child) end
    end
    char.ChildAdded:Connect(function(child)
        if child:IsA("Tool") then
            task.wait(0.3)
            patchTool(child)
        end
    end)
end)

if LocalPlayer.Character then
    for _, child in ipairs(LocalPlayer.Character:GetChildren()) do
        if child:IsA("Tool") then patchTool(child) end
    end
    LocalPlayer.Character.ChildAdded:Connect(function(child)
        if child:IsA("Tool") then
            task.wait(0.3)
            patchTool(child)
        end
    end)
end

--========================================================--
-- AUTO CRIMINAL
--========================================================--

local AutoCriminal = (function()
    local state = {
        Enabled   = false,
        Conn      = nil,
        LastCF    = nil,
        Teleporting = false,
    }

    local CRIMINAL_COLOR = Color3.fromRGB(218, 133, 65)
    local POLICE_COLOR   = Color3.fromRGB(13, 105, 172)

    local CRIMINAL_SPAWN_CFRAME = CFrame.new(
        -948.203491, 99.2255402, 2094.7876,
        0, 0, -1,
        0, 1, 0,
        1, 0, 0
    )

    local function getIndicatorColor()
        local ti = workspace:FindFirstChild("TeamIndicators")
        if not ti then return nil end

        local lp = ti:FindFirstChild("LocalPlayer")
        if lp then
            local frame = lp:FindFirstChild("Frame")
            if frame and frame:IsA("GuiObject") then
                return frame.BackgroundColor3
            end
        end

        local byName = ti:FindFirstChild(LocalPlayer.Name)
        if byName then
            local frame = byName:FindFirstChild("Frame")
            if frame and frame:IsA("GuiObject") then
                return frame.BackgroundColor3
            end
        end

        for _, v in ipairs(ti:GetChildren()) do
            if v:IsA("Folder") or v:IsA("Model") then
                if v.Name == LocalPlayer.Name then
                    local frame = v:FindFirstChild("Frame")
                    if frame and frame:IsA("GuiObject") then
                        return frame.BackgroundColor3
                    end
                end
            end
        end

        return nil
    end

    local function colorMatches(c, target, tolerance)
        tolerance = tolerance or 0.02
        return math.abs(c.R - target.R) < tolerance
           and math.abs(c.G - target.G) < tolerance
           and math.abs(c.B - target.B) < tolerance
    end

    local function teleportToSpawn()
        local char = LocalPlayer.Character
        local root = char and char:FindFirstChild("HumanoidRootPart")
        if not root then return end

        state.LastCF = root.CFrame

        root.CFrame = CRIMINAL_SPAWN_CFRAME
        root.AssemblyLinearVelocity  = Vector3.zero
        root.AssemblyAngularVelocity = Vector3.zero

        task.delay(0.4, function()
            local char2 = LocalPlayer.Character
            local root2 = char2 and char2:FindFirstChild("HumanoidRootPart")
            if root2 and state.LastCF then
                root2.CFrame = state.LastCF
                root2.AssemblyLinearVelocity  = Vector3.zero
                root2.AssemblyAngularVelocity = Vector3.zero
            end
            state.Teleporting = false
        end)
    end

    local function tick()
        if not state.Enabled then return end
        if state.Teleporting then return end

        local color = getIndicatorColor()
        if not color then return end

        if colorMatches(color, POLICE_COLOR) then
            return
        end

        if colorMatches(color, CRIMINAL_COLOR) then
            local char = LocalPlayer.Character
            local root = char and char:FindFirstChild("HumanoidRootPart")
            if not root then return end

            local dist = (root.Position - CRIMINAL_SPAWN_CFRAME.Position).Magnitude
            if dist  state.MaxSpeed then
            root.AssemblyLinearVelocity  = Vector3.zero
            root.AssemblyAngularVelocity = Vector3.zero
        end
    end

    local function blockSeat(seat)
        if not seat:IsA("VehicleSeat") and not seat:IsA("Seat") then return end
        if state.SeatHooks[seat] then return end

        local conn = seat:GetPropertyChangedSignal("Occupant"):Connect(function()
            if not state.Enabled then return end

            local occupant = seat.Occupant
            if occupant then
                local char = occupant.Parent
                if char == LocalPlayer.Character then
                    pcall(function()
                        occupant.Sit = false
                        occupant:ChangeState(Enum.HumanoidStateType.GettingUp)
                    end)
                end
            end
        end)

        state.SeatHooks[seat] = conn
    end

    local function unblockAllSeats()
        for seat, conn in pairs(state.SeatHooks) do
            if conn then
                pcall(function() conn:Disconnect() end)
            end
        end
        state.SeatHooks = {}
    end

    local function scanSeats()
        local carContainer = workspace:FindFirstChild("CarContainer")
        if carContainer then
            for _, v in ipairs(carContainer:GetDescendants()) do
                if v:IsA("VehicleSeat") or v:IsA("Seat") then
                    blockSeat(v)
                end
            end
        end

        for _, v in ipairs(workspace:GetChildren()) do
            if v.Name:lower():find("car") then
                for _, s in ipairs(v:GetDescendants()) do
                    if s:IsA("VehicleSeat") or s:IsA("Seat") then
                        blockSeat(s)
                    end
                end
            end
        end
    end

    local function enable()
        if state.Enabled then return end
        state.Enabled = true

        state.Conn1 = RunService.Stepped:Connect(disableCollisions)

        state.Conn2 = RunService.Heartbeat:Connect(clampVelocity)

        scanSeats()

        state.Conn3 = workspace.DescendantAdded:Connect(function(obj)
            if not state.Enabled then return end
            if obj:IsA("VehicleSeat") or obj:IsA("Seat") then
                blockSeat(obj)
            end
        end)
    end

    local function disable()
        if not state.Enabled then return end
        state.Enabled = false

        if state.Conn1 then state.Conn1:Disconnect(); state.Conn1 = nil end
        if state.Conn2 then state.Conn2:Disconnect(); state.Conn2 = nil end
        if state.Conn3 then state.Conn3:Disconnect(); state.Conn3 = nil end

        unblockAllSeats()
    end

    return {
        Set = function(v)
            if v then enable() else disable() end
            return state.Enabled
        end,
        Get = function() return state.Enabled end,
    }
end)()

--========================================================--
-- UNDERGROUND
--========================================================--

local function startUnderground()

    if UndergroundConnection then
        UndergroundConnection:Disconnect()
        UndergroundConnection = nil
    end
    UndergroundSavedCFrame = nil

    local Character, Humanoid, Root = getCharacter()
    if not Root or not Humanoid then return end

    UndergroundSavedCFrame = Root.CFrame

    UndergroundConnection = RunService.RenderStepped:Connect(function()

        if not Settings.Underground then return end

        local Character2, Humanoid2, Root2 = getCharacter()
        if not Root2 or not Humanoid2 then return end
        if not UndergroundSavedCFrame then return end

        local Current = Root2.CFrame
        local Rotation = Current - Current.Position
        local NewY = UndergroundSavedCFrame.Position.Y - Settings.UndergroundDepth

        Root2.CFrame = CFrame.new(
            Current.Position.X,
            NewY,
            Current.Position.Z
        ) * Rotation

        Root2.AssemblyLinearVelocity = Vector3.new(
            Root2.AssemblyLinearVelocity.X,
            0,
            Root2.AssemblyLinearVelocity.Z
        )
        Root2.AssemblyAngularVelocity = Vector3.zero

    end)
end

local function stopUnderground()

    if UndergroundConnection then
        UndergroundConnection:Disconnect()
        UndergroundConnection = nil
    end

    local _, Humanoid, Root = getCharacter()

    if Root then

        local CurrentPos = Root.Position
        local NewY = CurrentPos.Y + Settings.UndergroundDepth + 4

        Root.CFrame = CFrame.new(
            CurrentPos.X,
            NewY,
            CurrentPos.Z
        ) * (Root.CFrame - Root.CFrame.Position)

        Root.AssemblyLinearVelocity = Vector3.zero
        Root.AssemblyAngularVelocity = Vector3.zero
    end

    UndergroundSavedCFrame = nil
end

local function setUnderground(State)

    Settings.Underground = State

    if State then
        startUnderground()
    else
        stopUnderground()
    end
end

LocalPlayer.CharacterAdded:Connect(function(Character)

    local Humanoid = Character:WaitForChild("Humanoid", 10)
    local Root = Character:WaitForChild("HumanoidRootPart", 10)
    if not Humanoid or not Root then return end

    task.wait(0.5)

    if Settings.Underground then

        if UndergroundConnection then
            UndergroundConnection:Disconnect()
            UndergroundConnection = nil
        end
        UndergroundSavedCFrame = nil

        startUnderground()

    else
        if UndergroundConnection then
            UndergroundConnection:Disconnect()
            UndergroundConnection = nil
        end
        UndergroundSavedCFrame = nil
    end
end)

--========================================================--
-- TASE BYPASS
--========================================================--

local TaseBypass = (function()
    local TASE_ANIMS = {
        ["rbxassetid://279227693"] = true,
        ["rbxassetid://279229192"] = true,
    }

    local DEFAULT_SPEED = 16
    local DEFAULT_JUMP  = 7.2

    local Enabled = false

    local humanoid  = nil
    local lastSpeed = DEFAULT_SPEED
    local lastJump  = DEFAULT_JUMP

    local eventConns    = {}
    local humanoidConns = {}
    local charAddedConn = nil

    local PlayerTased = nil
    do
        local GunRemotes = ReplicatedStorage:FindFirstChild("GunRemotes")
        if GunRemotes then
            PlayerTased = GunRemotes:FindFirstChild("PlayerTased")
        end
    end

    local function clearTable(t)
        for _, c in ipairs(t) do
            if c and type(c.Disconnect) == "function" then
                pcall(function() c:Disconnect() end)
            end
        end
        table.clear(t)
    end

    local function enableBackpack()
        if LocalPlayer:GetAttribute("BackpackEnabled") ~= true then
            LocalPlayer:SetAttribute("BackpackEnabled", true)
        end
    end

    local function setupCharacter(character)
        if not character or not Enabled then return end

        local hum = character:FindFirstChildOfClass("Humanoid")
            or character:WaitForChild("Humanoid", 5)
        if not hum then return end
        if not Enabled then return end

        humanoid = hum

        if hum.WalkSpeed > 0 then lastSpeed = hum.WalkSpeed end
        if hum.JumpHeight > 0 then lastJump  = hum.JumpHeight end

        clearTable(humanoidConns)

        humanoidConns[#humanoidConns + 1] =
            hum:GetPropertyChangedSignal("WalkSpeed"):Connect(function()
                if hum.WalkSpeed > 0 then lastSpeed = hum.WalkSpeed end
            end)

        humanoidConns[#humanoidConns + 1] =
            hum:GetPropertyChangedSignal("JumpHeight"):Connect(function()
                if hum.JumpHeight > 0 then lastJump = hum.JumpHeight end
            end)
    end

    local function fixTase()
        if not Enabled then return end
        local hum = humanoid
        if not hum or not hum.Parent or hum.Health  0
    end

    local function getOffsets(char)
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        local root = char and char:FindFirstChild("HumanoidRootPart")
        if not hum or not root then return nil end
        local isR15 = (hum.RigType == Enum.HumanoidRigType.R15)
        local offsetY = hum.HipHeight + root.Size.Y / 2 - 1
        return isR15, offsetY
    end

    local function tweenTransparency(inst, target)
        TweenService:Create(
            inst,
            TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
            { Transparency = target }
        ):Play()
    end

    local function applyGhostTransparency()
        local char = getCharacter()
        if not char then return end
        for _, d in ipairs(char:GetDescendants()) do
            if d:IsA("BasePart") or d:IsA("Decal") or d:IsA("Texture") then
                state.Saved[d] = state.Saved[d] or d.Transparency
                tweenTransparency(d, 0.99)
            end
        end
    end

    local function restoreTransparency()
        for inst, val in pairs(state.Saved) do
            if inst and inst.Parent then
                tweenTransparency(inst, val)
            end
        end
        state.Saved = {}
    end

    local function createGhostHighlight()
        local char = getCharacter()
        if not char or state.Highlight then return end

        local h = Instance.new("Highlight")
        h.Name = "FEInvisibleGhostOutline"
        h.FillTransparency = 1
        h.OutlineColor = Color3.fromRGB(255, 255, 255)
        h.OutlineTransparency = 1
        h.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
        h.Adornee = char
        h.Parent = char

        TweenService:Create(
            h,
            TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
            { OutlineTransparency = 0.1 }
        ):Play()

        state.Highlight = h
    end

    local function removeGhostHighlight()
        if not state.Highlight then return end
        local h = state.Highlight
        state.Highlight = nil

        TweenService:Create(
            h,
            TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out),
            { OutlineTransparency = 1 }
        ):Play()

        task.delay(0.35, function()
            pcall(function() h:Destroy() end)
        end)
    end

    local function playInvisAnimation()
        if not isAlive() then return end

        local char = getCharacter()
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        if not hum then return end

        local isR15 = (hum.RigType == Enum.HumanoidRigType.R15)
        local animId = isR15 and "18665825805" or "215384594"

        local anim = Instance.new("Animation")
        anim.AnimationId = "rbxassetid://" .. animId

        local animator = hum:FindFirstChildOfClass("Animator")
        if not animator then
            animator = Instance.new("Animator")
            animator.Parent = hum
        end

        state.AnimTrack = animator:LoadAnimation(anim)
        state.AnimTrack.Priority = Enum.AnimationPriority.Action4
        state.AnimTrack:Play(0, 0.001, 0)
        anim:Destroy()

        task.delay(0, function()
            if state.AnimTrack then
                state.AnimTrack.TimePosition = isR15 and 1.95 or 0.4
            end
        end)
    end

    local function cleanup()
        if state.HeartbeatConn then
            state.HeartbeatConn:Disconnect()
            state.HeartbeatConn = nil
        end

        pcall(function()
            RunService:UnbindFromRenderStep(state.RenderKey)
        end)

        if state.AnimTrack then
            pcall(function() state.AnimTrack:Stop(0) end)
            pcall(function() state.AnimTrack:Destroy() end)
            state.AnimTrack = nil
        end

        state.Saved = {}
        removeGhostHighlight()
    end

    local function enable()
        if state.Enabled or not isAlive() then return end
        state.Enabled = true

        applyGhostTransparency()
        createGhostHighlight()
        playInvisAnimation()

        pcall(function()
            RunService:UnbindFromRenderStep(state.RenderKey)
        end)

        RunService:BindToRenderStep(
            state.RenderKey,
            Enum.RenderPriority.Camera.Value - 1,
            function()
                if not state.Enabled or not isAlive() then return end

                local char = getCharacter()
                local isR15, offsetY = getOffsets(char)
                local root = char and char:FindFirstChild("HumanoidRootPart")
                if not root or not offsetY then return end

                root.CFrame = root.CFrame
                    * CFrame.new(0, offsetY, 0)
                    * CFrame.Angles(math.rad(isR15 and -180 or -90), 0, 0)

                if state.AnimTrack then
                    state.AnimTrack:AdjustWeight(0.001)
                end
            end
        )

        state.HeartbeatConn = RunService.Heartbeat:Connect(function()
            if not state.Enabled or not isAlive() then return end

            local char = getCharacter()
            local isR15, offsetY = getOffsets(char)
            local root = char and char:FindFirstChild("HumanoidRootPart")
            if not root or not offsetY then return end

            root.CFrame = root.CFrame
                * CFrame.new(0, -offsetY, 0)
                * CFrame.Angles(math.rad(isR15 and 180 or 90), 0, 0)

            if state.AnimTrack then
                state.AnimTrack:AdjustWeight(100)
            end
        end)
    end

    local function disable()
        if not state.Enabled then return end
        state.Enabled = false

        restoreTransparency()
        cleanup()
    end

    LocalPlayer.CharacterAdded:Connect(function()
        if not state.Enabled then return end
        state.Enabled = false
        cleanup()
        task.wait(0.2)
        enable()
    end)

    return {
        Set = function(v)
            if v then enable() else disable() end
            return state.Enabled
        end,
        Get = function() return state.Enabled end,
    }
end)()

--========================================================--
-- ANTI-INVIS
--========================================================--

local AntiInvis = (function()
    local state = {
        Enabled = false,
        Conn    = nil,
        Markers = {},
    }

    local FE_ANIM_IDS = {
        ["rbxassetid://18665825805"] = true,
        ["rbxassetid://215384594"]   = true,
        ["18665825805"] = true,
        ["215384594"]   = true,
    }

    local function removeMarker(Player)
        local m = state.Markers[Player]
        if m and m.Parent then
            m:Destroy()
        end
        state.Markers[Player] = nil
    end

    local function createMarker(Player)
        removeMarker(Player)

        local char = Player.Character
        if not char then return end

        local head = char:FindFirstChild("Head")
        if not head then return end

        local billboard = Instance.new("BillboardGui")
        billboard.Name = "AntiInvisMarker"
        billboard.Size = UDim2.fromOffset(200, 50)
        billboard.StudsOffset = Vector3.new(0, 3, 0)
        billboard.AlwaysOnTop = true
        billboard.Adornee = head
        billboard.Parent = head

        local label = Instance.new("TextLabel")
        label.Size = UDim2.fromScale(1, 1)
        label.BackgroundTransparency = 1
        label.Text = "↓ " .. Player.DisplayName .. " ↓"
        label.TextColor3 = Color3.fromRGB(255, 0, 0)
        label.TextStrokeTransparency = 0
        label.TextScaled = true
        label.Font = Enum.Font.GothamBold
        label.Parent = billboard

        state.Markers[Player] = billboard
    end

    local function isUnder(Player)
        local char = Player.Character
        if not char then return false end

        local hum = char:FindFirstChildOfClass("Humanoid")
        if not hum then return false end

        local animator = hum:FindFirstChildOfClass("Animator")
        if animator then
            for _, track in ipairs(animator:GetPlayingAnimationTracks()) do
                local anim = track.Animation
                if anim
                    and FE_ANIM_IDS[anim.AnimationId]
                    and track.WeightCurrent > 0.1 then
                    return true
                end
            end
        end

        local root = char:FindFirstChild("HumanoidRootPart")
        if root and root.Position.Y  0
                and Root.Parent then

                LastAliveCFrame =
                    Root.CFrame
            end
        end)

    DeathConnection =
        Humanoid.Died:Connect(function()

            if LastAliveCFrame then

                LastDeathCFrame =
                    LastAliveCFrame

            elseif Root then

                LastDeathCFrame =
                    Root.CFrame
            end

            if CharacterTrackConnection then

                CharacterTrackConnection:Disconnect()
                CharacterTrackConnection = nil
            end
        end)

    updateSprint()
    updateJump()
end

LocalPlayer.CharacterAdded:Connect(function(Character)

    task.wait()

    trackCharacter(Character)

    if Settings.QuickRespawn
        and LastDeathCFrame then

        local Root =
            Character:WaitForChild(
                "HumanoidRootPart",
                10
            )

        if Root then

            task.wait(0.15)

            if Character.Parent
                and Settings.QuickRespawn then

                Root.CFrame =
                    LastDeathCFrame
            end
        end
    end

    if Settings.Underground then

        task.wait(0.1)

        UndergroundSavedCFrame =
            nil

        startUnderground()
    end
end)

if LocalPlayer.Character then
    task.spawn(function()
        trackCharacter(
            LocalPlayer.Character
        )
    end)
end

--========================================================--
-- KILLFEED NOTIFICATIONS
--========================================================--

local KillfeedNotify = true

local KillfeedFolder = ReplicatedStorage:WaitForChild("Killfeed", 10)

if KillfeedFolder and KillfeedFolder:IsA("Folder") then

    KillfeedFolder.ChildAdded:Connect(function(child)

        if not KillfeedNotify then return end

        local text = child.Name
        if not text or #text  c.B then
                icon = "sword"      
            elseif c.B > c.R then
                icon = "shield"     
            end
        end

        WindUI:Notify({
            Title = "Убийство",
            Content = text,
            Icon = icon,
            Image = nil,
            Duration = 5,
            Buttons = {
                {
                    Title = "ОК",
                    Callback = function()
                    end
                }
            }
        })
    end)
end

--========================================================--
-- CLOSEST PLAYER TRACKER
--========================================================--

local TrackerGui =
    Instance.new("ScreenGui")

TrackerGui.Name =
    "NightfallTracker"

TrackerGui.ResetOnSpawn = false
TrackerGui.IgnoreGuiInset = true
TrackerGui.Parent =
    LocalPlayer:WaitForChild("PlayerGui")

local TrackerLabel =
    Instance.new("TextLabel")

TrackerLabel.BackgroundTransparency = 1

TrackerLabel.Position =
    UDim2.fromOffset(15, 15)

TrackerLabel.Size =
    UDim2.fromOffset(350, 30)

TrackerLabel.Font =
    Enum.Font.GothamSemibold

TrackerLabel.TextSize = 13

TrackerLabel.TextXAlignment =
    Enum.TextXAlignment.Left

TrackerLabel.TextColor3 =
    Color3.fromRGB(255, 255, 255)

TrackerLabel.TextStrokeTransparency =
    0.5

TrackerLabel.Visible =
    Settings.ClosestTracker

TrackerLabel.Parent =
    TrackerGui

local function updateTracker()

    if not Settings.ClosestTracker then

        TrackerLabel.Visible = false
        return
    end

    TrackerLabel.Visible = true

    local Player, Part, Distance =
        getClosestTarget()

    if not Player then

        TrackerLabel.Text =
            "Target: none"

        return
    end

    local Character =
        Player.Character

    local Humanoid =
        Character
        and Character:FindFirstChildOfClass(
            "Humanoid"
        )

    local Health =
        Humanoid
        and math.floor(Humanoid.Health)
        or 0

    TrackerLabel.Text =
        string.format(
            "Target: %s | %.0f px | %d HP",
            Player.DisplayName,
            Distance or 0,
            Health
        )
end

--========================================================--
-- PLAYER CONNECTIONS
--========================================================--

local function setupPlayer(Player)

    if Player == LocalPlayer then
        return
    end

    Player.CharacterAdded:Connect(function()

        task.wait(0.2)

        if Settings.ESP then
            createESP(Player)
        end

        if Settings.Hitbox then
            createHitbox(Player)
        end
    end)

    Player.CharacterRemoving:Connect(function()

        removeESP(Player)
        removeHitbox(Player)
    end)
end

for _, Player in ipairs(Players:GetPlayers()) do
    setupPlayer(Player)
end

Players.PlayerAdded:Connect(setupPlayer)

Players.PlayerRemoving:Connect(function(Player)

    removeESP(Player)
    removeHitbox(Player)
end)

--========================================================--
-- MAIN LOOP
--========================================================--

RunService.RenderStepped:Connect(function()

    if Settings.ESP then
        updateESP()
    end

    
    updateHitboxVisuals()
    updateHitboxes()

    if Settings.Underground then
        updateSprint()
    end
end)

--========================================================--
-- WINDUI WINDOW
--========================================================--

local Window =
    WindUI:CreateWindow({
        Title = "Nightfall",
        Icon = "moon",
        Author = "Entervalov",
        Folder = "Nightfall",
        Size = UDim2.fromOffset(580, 460),
        Transparent = true,
        Theme = "Dark",
        SideBarWidth = 170,
        HasOutline = true
    })

--========================================================--
-- TABS
--========================================================--

local MovementTab =
    Window:Tab({
        Title = "Movement",
        Icon = "move"
    })

local CombatTab =
    Window:Tab({
        Title = "Fight",
        Icon = "crosshair"
    })

local VisualsTab =
    Window:Tab({
        Title = "Visual",
        Icon = "eye"
    })

local SettingsTab =
    Window:Tab({
        Title = "Settings",
        Icon = "settings"
    })

--========================================================--
-- MOVEMENT
--========================================================--

MovementTab:Section({
    Title = "Движение"
})

MovementTab:Toggle({
    Title = "Anti-Jump",
    Desc = "Disables the jump limit",
    Value = false,
    Callback = function(State)
        Settings.AntiJump = State
        updateJump()
    end,
})

MovementTab:Toggle({
    Title = "AutoSprint",
    Desc = "Autosprint",
    Value = false,

    Callback = function(State)

        Settings.AutoSprint = State

        updateSprint()
    end
})

MovementTab:Section({
    Title = "Подземщик"
})

MovementTab:Toggle({
    Title = "Подземщик",
    Desc = "It saves the startup point and returns to it when turned off",
    Value = false,

    Callback = function(State)

        setUnderground(State)
    end
})

MovementTab:Keybind({
    Title = "Подземщик (клавиша)",
    Desc = "Press to assign the on/off key for the undergrounder",
    Value = Enum.KeyCode.V,
    Callback = function()
        local Character, Humanoid = getCharacter()
        if not Character or not Humanoid then return end

        local newState = not Settings.Underground
        setUnderground(newState)

        print("[Underground]", newState and "ON" or "OFF")
    end,
})

MovementTab:Slider({
    Title = "Глубина",
    Desc = "It makes you an undergrounder btw",
    Value = {
        Min = 2,
        Max = 30,
        Default = 8
    },

    Callback = function(Value)

        Settings.UndergroundDepth =
            tonumber(Value) or 8
    end
})

MovementTab:Slider({
    Title = "Скорость",
    Desc = "Running speed underground",
    Value = {
        Min = 16,
        Max = 150,
        Default = 20
    },

    Callback = function(Value)

        Settings.UndergroundSpeed =
            tonumber(Value) or 20

        if Settings.Underground then
            updateSprint()
        end
    end
})

MovementTab:Section({
    Title = "Respawn"
})

MovementTab:Toggle({
    Title = "Quick Respawn",
    Desc = "Brings you back to the point where you died (if u have sheid ",
    Value = false,

    Callback = function(State)

        Settings.QuickRespawn = State
    end
})

MovementTab:Section({ Title = "Auto Criminal" })

MovementTab:Toggle({
    Title = "Auto Criminal",
    Desc = "Automatically becomes a criminal",
    Value = false,
    Callback = function(State)
        AutoCriminal.Set(State)
    end,
})

--========================================================--
-- COMBAT
--========================================================--

CombatTab:Section({
    Title = "Hitbox Visualizer"
})

CombatTab:Toggle({
    Title = "Hitbox",
    Desc = "Increases the player’s head size so that it’s easier to deal critical damage (Silent Aim btw)",
    Value = false,
    Callback = function(State)
        Settings.Hitbox = State
        if State then
            for _, Player in ipairs(Players:GetPlayers()) do
                if Player ~= LocalPlayer and isAlive(Player) then
                    createHitbox(Player)
                end
            end
        else
            for Player in pairs(HitboxObjects) do
                removeHitbox(Player)
            end
        end
    end,
})

CombatTab:Slider({
    Title = "Hitbox Size",
    Desc = "Increase the hitbox of players’ heads (Visual)",
    Value = { Min = 2, Max = 10, Default = 6 },
    Callback = function(Value)
        Settings.HitboxSize = tonumber(Value) or 6
        if Settings.Hitbox then
            for _, Player in ipairs(Players:GetPlayers()) do
                if Player ~= LocalPlayer and isAlive(Player) then
                    createHitbox(Player)
                end
            end
        end
    end,
})

CombatTab:Section({ Title = "Anti-Fling" })

CombatTab:Toggle({
    Title = "Anti-Fling",
    Desc = "It prevents you from flying off the map and stops the anti‑cheat from kicking you. Fucking FFling!",
    Value = false,
    Callback = function(State)
        AntiFling.Set(State)
    end,
})

CombatTab:Section({
    Title = "Rage"
})

CombatTab:Toggle({
    Title = "Rapid Fire",
    Desc = "Reduces the FireRate of the weapon when equipped (requires taking the weapon twice to use)",
    Value = false,
    Callback = function(State)
        Settings.RapidFire = State
        if State and LocalPlayer.Character then
            for _, child in ipairs(LocalPlayer.Character:GetChildren()) do
                if child:IsA("Tool") then patchTool(child) end
            end
        end
    end
})

CombatTab:Slider({
    Title = "Fire Rate",
    Desc = "Increases the firing speed",
    Value = { Min = 0.01, Max = 0.5, Default = 0.05 },
    Callback = function(Value)
        Settings.FireRate = tonumber(Value) or 0.05
        if Settings.RapidFire and LocalPlayer.Character then
            for _, child in ipairs(LocalPlayer.Character:GetChildren()) do
                if child:IsA("Tool") then patchTool(child) end
            end
        end
    end
})

CombatTab:Toggle({
    Title = "Tase Bypass",
    Desc = "Bypass Taser",
    Value = false,
    Callback = function(State)
        TaseBypass.Set(State)
    end,
})

--========================================================--
-- VISUALS
--========================================================--

VisualsTab:Section({
    Title = "XRAY"
})

VisualsTab:Toggle({
    Title = "ESP",
    Desc = "Shows players through walls",
    Value = false,

    Callback = function(State)

        Settings.ESP = State

        if not State then

            for Player in pairs(ESPObjects) do
                removeESP(Player)
            end
        end
    end
})

VisualsTab:Toggle({
    Title = "Team Colors",
    Desc = "The ESP color depends on the command",
    Value = true,

    Callback = function(State)

        Settings.TeamColors =
            State
    end
})

VisualsTab:Toggle({
    Title = "Highlight",
    Desc = "Player highlighting",
    Value = true,

    Callback = function(State)

        Settings.Highlight =
            State

        if Settings.ESP then

            for Player in ipairs(Players:GetPlayers()) do

                if Player ~= LocalPlayer then
                    createESP(Player)
                end
            end
        end
    end
})

VisualsTab:Section({ Title = "Custom Weapon" })

VisualsTab:Toggle({
    Title = "Custom Weapon Visual",
    Desc = "Replaces the weapon model with a custom one",
    Value = false,
    Callback = function(State)
        CustomWeapon.Set(State)
    end,
})

VisualsTab:Section({ Title = "Damage Visible" })

VisualsTab:Toggle({
    Title = "Damage Visible",
    Desc = "Shows the damage dealt to the player",
    Value = false,
    Callback = function(State)
        DamageNumbers.Set(State)
    end,
})

VisualsTab:Section({ Title = "Custom Weapon" })

VisualsTab:Toggle({
    Title = "Custom Weapon Visual",
    Desc = "Replaces the weapon model with a custom one (Visual)",
    Value = false,
    Callback = function(State)
        CustomWeapon.Set(State)
    end,
})

VisualsTab:Section({
    Title = "World"
})

VisualsTab:Toggle({
    Title = "Fullbright",
    Desc = "It removes darkness, fog, and shadows",
    Value = false,

    Callback = function(State)

        Settings.Fullbright =
            State

        updateFullbright()
    end
})

VisualsTab:Section({ Title = "Invisible" })

VisualsTab:Toggle({
    Title = "Invisible (FE)",
    Desc = "Invisibility",
    Value = false,
    Callback = function(State)
        FEInvisible.Set(State)
    end,
})

VisualsTab:Section({ Title = "Anti-Invis" })

VisualsTab:Toggle({
    Title = "Anti-Invis",
    Desc = "It tries to make invisible players visible so they can be killed.",
    Value = false,
    Callback = function(State)
        AntiInvis.Set(State)
    end,
})

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

SettingsTab:Section({ Title = "Killfeed" })

SettingsTab:Toggle({
    Title = "Killfeed Notifications",
    Desc = "Shows notifications about who killed whom.",
    Value = true,
    Callback = function(State)
        KillfeedNotify = State
    end
})

SettingsTab:Section({
    Title = "Interface"
})

SettingsTab:Toggle({
    Title = "Closest Player Tracker",
    Desc = "Displays the selected closest target",
    Value = true,

    Callback = function(State)

        Settings.ClosestTracker =
            State

        TrackerLabel.Visible =
            State
    end
})

SettingsTab:Button({
    Title = "Reset Lighting",

    Callback = function()

        Settings.Fullbright = false

        disableFullbright()
    end
})

SettingsTab:Button({
    Title = "Unload Nightfall",

    Callback = function()

        Settings.ESP = false
        Settings.Hitbox = false
        Settings.RapidFire = false
        Settings.AntiJump = false
        Settings.AutoSprint = false

        if Settings.Underground then
            setUnderground(false)
        end

        pcall(function() FEInvisible.Set(false) end)

        pcall(function()
            if TaseBypass then TaseBypass.Set(false) end
        end)

        pcall(function() AutoCriminal.Set(false) end)
        	
        pcall(function() DamageNumbers.Set(false) end)
        
        pcall(function() CustomWeapon.Set(false) end)

        disableFullbright()

        pcall(function()
            local StarterScripts = game:GetService("StarterPlayer"):FindFirstChild("StarterCharacterScripts")
            if StarterScripts then
                local AntiJump = StarterScripts:FindFirstChild("AntiJump")
                if AntiJump then AntiJump.Disabled = false end
            end
            local char = LocalPlayer.Character
            if char then
                local activeAJ = char:FindFirstChild("AntiJump")
                if activeAJ then activeAJ.Disabled = false end
            end
        end)

        for Player in pairs(ESPObjects) do
            removeESP(Player)
        end

        for Player in pairs(HitboxObjects) do
            removeHitbox(Player)
        end

        if TrackerGui then
            TrackerGui:Destroy()
        end

        if CharacterTrackConnection then
            CharacterTrackConnection:Disconnect()
            CharacterTrackConnection = nil
        end

        if DeathConnection then
            DeathConnection:Disconnect()
            DeathConnection = nil
        end

        if UndergroundConnection then
            UndergroundConnection:Disconnect()
            UndergroundConnection = nil
        end

        UndergroundSavedCFrame = nil

        print("[Nightfall] All functions unloaded.")
    end
})

--========================================================--
-- INITIALIZATION
--========================================================--

task.spawn(function()

    task.wait(1)

    updateFullbright()
    updateJump()
    updateSprint()

    if Settings.ESP then
        updateESP()
    end

    if Settings.Hitbox then
        updateHitboxes()
    end

end)

print("[Nightfall] Loaded.")

How to Use This Script

1

Open Your Executor

Launch a supported executor and attach it to a running Roblox session.

2

Copy the Script

Click the Copy button above. The full loadstring is placed on your clipboard instantly.

3

Paste & Execute

Paste it into the executor and hit Execute. The hub window opens inside the game.

Compatible Executors

Comments

0
Join the discussion about this script.

No comments yet. Be the first to comment!