HUSH: They can hear Script (Delta Mobile) – Mono Neon V8: Monster ESP, Auto Hotwire 41 21 No Key

HUSH: They can hear Script (Delta Mobile) – Mono Neon V8: Monster ESP, Auto Hotwire

HUSH: They can hear. · Roblox
Play
No key Mobile friendly Working · Nov 4
Report

Description

HUSH Mono Neon V8 is a HUSH: They can hear. script you can run in Delta on Android, iOS or PC. It includes monster esp, eye esp, player esp and more. The menu labels are in Russian (ESP монстров = monster ESP, Автоугон = auto hotwire). Created by matveiyga. No key.

Key Features

  • Monster ESP
  • Eye ESP
  • Player ESP
  • Mother ESP
  • Tracer lines to monsters
  • Noise indicator
  • Fullbright
  • No Fog
  • Auto Hotwire (F7)
  • Car speed boost
  • Car noclip
  • RightShift to hide or show the menu

In HUSH: They can hear., noise kills runs. The monsters that took over the town hunt by sound, and getting caught costs you everything you were carrying. The HUSH Mono Neon script (V8, by matveiyga) gives you eyes on every threat and takes the nerve-wracking hotwire mini-game off your hands.

What the panel shows

The window is titled “HUSH / MONO NEON”, and every label in it is Russian. Here’s what the switches mean:

Label Meaning
ESP монстров / ESP глазиков Monster ESP / eye ESP
ESP игроков / ESP Матери Player ESP / Mother ESP
Линии к монстрам Tracer lines to monsters
Fullbright, No Fog Lighting tweaks (these two are in English)
Автоугон [F7] Auto hotwire
Ускорение машины / Предел буста Car speed boost / boost limit
Ноуклип машины Car noclip

A live line counts players, monsters and eyes, and a separate “Шум” (noise) readout shows the game’s noise indicator once the script finds it. The Mother line reads “найдена” when that model is located.

Running it

No key gate, no web fetches: the entire script is the long Lua block on this page, and Delta just needs to execute it. If you ran an older Mono or Neon build earlier, V8 cleans those up first. RightShift hides the window and F7 flips auto hotwire. On a phone, tap the buttons in the panel instead. The ВЫКЛЮЧИТЬ СКРИПТ button, in red text, switches everything off. Other executors on the tested row: Fluxus, Arceus X, Codex and unnamed PC ones.

Hotwire and car notes

Auto hotwire only acts while the “Горячая проводка” mini-game is open. It waits for the needle to enter the yellow sector and presses Space through VirtualInputManager. If your executor lacks that, the status line says so. The boost needs you behind the wheel (the panel prompts “сядь за руль”), and the script itself warns that car noclip can drop the vehicle through the road.

FAQ

Is there another HUSH script here? Yes, s0ftkillz has one on the same game page. This is the no-key, open-source option.

Can I change keybinds? Only by editing the code. RightShift and F7 are hard-set near the top.

Stealth tip: keep an eye on the Шум readout while you loot. A loud action next to a monster your ESP is already tracing is exactly how the game punishes you, so wait for the meter to drop before breaking into the next house.

Tested With
DeltaCodexArceus XFluxusPC executors
Script CodeHUSH Mono Neon V8 (matveiyga)
--[[
    HUSH MONO NEON V8 + AUTO HOTWIRE

    RightShift — скрыть / показать меню
    F7 — включить / выключить автоугон

    Автоугон работает, когда открыта мини-игра
    «Горячая проводка».
]]

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

local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local env = getgenv and getgenv() or _G

-- Выключение предыдущих версий и отдельного автоугона
for _, key in ipairs({
    "HushNeonCleanup",
    "HushNeonV2Cleanup",
    "HushNeonV3Cleanup",
    "HushNeonV4Cleanup",
    "HushNeonV5Cleanup",
    "HushMonoV6Cleanup",
    "HushMonoV7Cleanup",
    "HushMonoV8Cleanup",
    "HushCarTestCleanup",
    "HushCarBoostCleanup",
    "HushCarBoostV2Cleanup",
    "HushQuietTestCleanup",
    "HushHotwireCleanup"
}) do
    if type(env[key]) == "function" then
        local ok, err = pcall(env[key])
        if not ok then
            warn("[HUSH] Ошибка очистки " .. key .. ": " .. tostring(err))
        end
        env[key] = nil
    end
end

for _, name in ipairs({"HushMonoV8", "HushAutoHotwire"}) do
    local previous = playerGui:FindFirstChild(name)
    if previous then
        previous:Destroy()
    end
end

local alive = true
local connections = {}

local settings = {
    monsterESP = true,
    watcherESP = true,
    playerESP = true,
    motherESP = true,
    monsterLines = true,

    fullbright = true,
    noFog = true,

    carBoost = false,
    carNoclip = false,
    carAcceleration = 10,
    carSpeedLimit = 120,

    autoHotwire = false,

    range = 700,
    maxMonsters = 5
}

local colors = {
    background = Color3.fromRGB(10, 10, 12),
    panel = Color3.fromRGB(20, 20, 23),
    button = Color3.fromRGB(32, 32, 36),
    hover = Color3.fromRGB(52, 52, 57),
    white = Color3.fromRGB(245, 245, 245),
    muted = Color3.fromRGB(165, 165, 170),
    red = Color3.fromRGB(255, 145, 145),

    monster = Color3.fromRGB(235, 235, 235),
    nearest = Color3.fromRGB(255, 175, 175),
    watcher = Color3.fromRGB(160, 225, 255),
    player = Color3.fromRGB(175, 255, 195),
    mother = Color3.fromRGB(255, 85, 85)
}

local function connect(signal, callback)
    local connection = signal:Connect(callback)
    table.insert(connections, connection)
    return connection
end

local function corner(parent, radius)
    local item = Instance.new("UICorner")
    item.CornerRadius = UDim.new(0, radius or 8)
    item.Parent = parent
end

local function stroke(parent, color, transparency)
    local item = Instance.new("UIStroke")
    item.Color = color
    item.Transparency = transparency or 0
    item.Thickness = 1
    item.Parent = parent
end

-- ==========================================
-- FULLBRIGHT И NO FOG
-- ==========================================

local brightValues = {
    Ambient = Color3.fromRGB(180, 180, 180),
    OutdoorAmbient = Color3.fromRGB(180, 180, 180),
    Brightness = 2,
    ClockTime = 14,
    GlobalShadows = false,
    ExposureCompensation = 0
}

local fogValues = {
    FogStart = 0,
    FogEnd = 100000
}

local savedBright = {}
local savedFog = {}
local savedEffects = {}
local savedAtmospheres = {}

local function saveProperties(values, destination)
    table.clear(destination)

    for property in pairs(values) do
        local ok, value = pcall(function()
            return Lighting[property]
        end)

        if ok then
            destination[property] = value
        end
    end
end

local function setProperties(values)
    for property, value in pairs(values) do
        pcall(function()
            if Lighting[property] ~= value then
                Lighting[property] = value
            end
        end)
    end
end

local function restoreProperties(saved)
    for property, value in pairs(saved) do
        pcall(function()
            Lighting[property] = value
        end)
    end

    table.clear(saved)
end

local function disableEffect(object)
    if not object:IsA("PostEffect") then
        return
    end

    if savedEffects[object] == nil then
        savedEffects[object] = object.Enabled
    end

    pcall(function()
        object.Enabled = false
    end)
end

local function clearAtmosphere(object)
    if not object:IsA("Atmosphere") then
        return
    end

    if not savedAtmospheres[object] then
        savedAtmospheres[object] = {
            Density = object.Density,
            Haze = object.Haze,
            Glare = object.Glare
        }
    end

    pcall(function()
        object.Density = 0
        object.Haze = 0
        object.Glare = 0
    end)
end

local function restoreEffects()
    for object, enabled in pairs(savedEffects) do
        pcall(function()
            if object.Parent then
                object.Enabled = enabled
            end
        end)
    end

    table.clear(savedEffects)
end

local function restoreAtmospheres()
    for object, saved in pairs(savedAtmospheres) do
        pcall(function()
            if object.Parent then
                object.Density = saved.Density
                object.Haze = saved.Haze
                object.Glare = saved.Glare
            end
        end)
    end

    table.clear(savedAtmospheres)
end

local function inspectLightingObject(object)
    if settings.fullbright and object:IsA("PostEffect") then
        disableEffect(object)
    end

    if settings.noFog and object:IsA("Atmosphere") then
        clearAtmosphere(object)
    end
end

local function inspectLighting()
    for _, object in ipairs(Lighting:GetDescendants()) do
        inspectLightingObject(object)
    end

    local camera = Workspace.CurrentCamera
    if camera then
        for _, object in ipairs(camera:GetDescendants()) do
            inspectLightingObject(object)
        end
    end
end

local function applyLighting()
    if settings.fullbright then
        setProperties(brightValues)

        for object in pairs(savedEffects) do
            pcall(function()
                if object.Parent then
                    object.Enabled = false
                end
            end)
        end
    end

    if settings.noFog then
        setProperties(fogValues)

        for object in pairs(savedAtmospheres) do
            pcall(function()
                if object.Parent then
                    object.Density = 0
                    object.Haze = 0
                    object.Glare = 0
                end
            end)
        end
    end
end

local function setFullbright(enabled)
    if settings.fullbright == enabled then
        return
    end

    settings.fullbright = enabled

    if enabled then
        saveProperties(brightValues, savedBright)
        inspectLighting()
        applyLighting()
    else
        restoreProperties(savedBright)
        restoreEffects()
    end
end

local function setNoFog(enabled)
    if settings.noFog == enabled then
        return
    end

    settings.noFog = enabled

    if enabled then
        saveProperties(fogValues, savedFog)
        inspectLighting()
        applyLighting()
    else
        restoreProperties(savedFog)
        restoreAtmospheres()
    end
end

saveProperties(brightValues, savedBright)
saveProperties(fogValues, savedFog)
inspectLighting()
applyLighting()

connect(Lighting.DescendantAdded, function(object)
    if alive then
        inspectLightingObject(object)
    end
end)

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

local screen = Instance.new("ScreenGui")
screen.Name = "HushMonoV8"
screen.ResetOnSpawn = false
screen.IgnoreGuiInset = true
screen.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
screen.Parent = playerGui

local linesFolder = Instance.new("Folder")
linesFolder.Name = "Lines"
linesFolder.Parent = screen

local main = Instance.new("Frame")
main.Name = "Main"
main.Size = UDim2.fromOffset(330, 510)
main.Position = UDim2.new(0, 35, 0.5, -255)
main.BackgroundColor3 = colors.background
main.BorderSizePixel = 0
main.ClipsDescendants = true
main.Parent = screen
corner(main, 14)
stroke(main, colors.white, 0.28)

local header = Instance.new("Frame")
header.Size = UDim2.new(1, 0, 0, 58)
header.BackgroundColor3 = colors.panel
header.BorderSizePixel = 0
header.Active = true
header.Parent = main

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -24, 0, 25)
title.Position = UDim2.fromOffset(12, 5)
title.BackgroundTransparency = 1
title.Text = "HUSH  /  MONO NEON"
title.TextColor3 = colors.white
title.TextSize = 16
title.Font = Enum.Font.GothamBold
title.TextXAlignment = Enum.TextXAlignment.Left
title.Parent = header

local subtitle = Instance.new("TextLabel")
subtitle.Size = UDim2.new(1, -24, 0, 18)
subtitle.Position = UDim2.fromOffset(12, 30)
subtitle.BackgroundTransparency = 1
subtitle.Text = "V8 + AUTO HOTWIRE  •  RightShift"
subtitle.TextColor3 = colors.muted
subtitle.TextSize = 11
subtitle.Font = Enum.Font.Gotham
subtitle.TextXAlignment = Enum.TextXAlignment.Left
subtitle.Parent = header

local scroll = Instance.new("ScrollingFrame")
scroll.Name = "Content"
scroll.Position = UDim2.fromOffset(10, 65)
scroll.Size = UDim2.new(1, -20, 1, -75)
scroll.BackgroundTransparency = 1
scroll.BorderSizePixel = 0
scroll.ScrollBarThickness = 3
scroll.ScrollBarImageColor3 = colors.white
scroll.CanvasSize = UDim2.fromOffset(0, 0)
scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
scroll.Parent = main

local layout = Instance.new("UIListLayout")
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Padding = UDim.new(0, 6)
layout.Parent = scroll

local padding = Instance.new("UIPadding")
padding.PaddingRight = UDim.new(0, 5)
padding.PaddingBottom = UDim.new(0, 8)
padding.Parent = scroll

local order = 0

local function nextOrder()
    order += 1
    return order
end

local function makeLabel(text, height, color)
    local label = Instance.new("TextLabel")
    label.LayoutOrder = nextOrder()
    label.Size = UDim2.new(1, 0, 0, height or 26)
    label.BackgroundColor3 = colors.panel
    label.BorderSizePixel = 0
    label.Text = text
    label.TextColor3 = color or colors.white
    label.TextSize = 12
    label.Font = Enum.Font.GothamMedium
    label.Parent = scroll
    corner(label, 7)
    return label
end

local function makeButton(text, callback)
    local button = Instance.new("TextButton")
    button.LayoutOrder = nextOrder()
    button.Size = UDim2.new(1, 0, 0, 30)
    button.BackgroundColor3 = colors.button
    button.BorderSizePixel = 0
    button.Text = text
    button.TextColor3 = colors.white
    button.TextSize = 12
    button.Font = Enum.Font.GothamMedium
    button.AutoButtonColor = false
    button.Parent = scroll
    corner(button, 7)

    connect(button.MouseEnter, function()
        button.BackgroundColor3 = colors.hover
    end)

    connect(button.MouseLeave, function()
        button.BackgroundColor3 = colors.button
    end)

    connect(button.MouseButton1Click, function()
        if alive then
            callback(button)
        end
    end)

    return button
end

local function toggleText(name, enabled)
    return name .. ": " .. (enabled and "ВКЛ" or "ВЫКЛ")
end

local noiseLabel = makeLabel("Шум: поиск индикатора...", 28)
local statusLabel = makeLabel("Игроки: 0 | Монстры: 0 | Глаза: 0", 26, colors.muted)
local motherStatus = makeLabel("Мать: поиск...", 26, colors.muted)

makeButton(toggleText("ESP монстров", settings.monsterESP), function(button)
    settings.monsterESP = not settings.monsterESP
    button.Text = toggleText("ESP монстров", settings.monsterESP)
end)

makeButton(toggleText("ESP глазиков", settings.watcherESP), function(button)
    settings.watcherESP = not settings.watcherESP
    button.Text = toggleText("ESP глазиков", settings.watcherESP)
end)

makeButton(toggleText("ESP игроков", settings.playerESP), function(button)
    settings.playerESP = not settings.playerESP
    button.Text = toggleText("ESP игроков", settings.playerESP)
end)

makeButton(toggleText("ESP Матери", settings.motherESP), function(button)
    settings.motherESP = not settings.motherESP
    button.Text = toggleText("ESP Матери", settings.motherESP)
end)

makeButton(toggleText("Линии к монстрам", settings.monsterLines), function(button)
    settings.monsterLines = not settings.monsterLines
    button.Text = toggleText("Линии к монстрам", settings.monsterLines)
end)

makeButton(toggleText("Fullbright", settings.fullbright), function(button)
    setFullbright(not settings.fullbright)
    button.Text = toggleText("Fullbright", settings.fullbright)
end)

makeButton(toggleText("No Fog", settings.noFog), function(button)
    setNoFog(not settings.noFog)
    button.Text = toggleText("No Fog", settings.noFog)
end)

local hotwireSection = makeLabel("──  AUTO HOTWIRE  ──", 24, colors.muted)
hotwireSection.TextSize = 11

local hotwireButton
local hotwireStatus = makeLabel("Автоугон: выключен", 26, colors.muted)
hotwireStatus.TextSize = 11

local previousHotwireAngle = nil
local lastHotwirePress = 0

local okVim, vim = pcall(function()
    return game:GetService("VirtualInputManager")
end)

local function setAutoHotwire(enabled)
    settings.autoHotwire = enabled
    previousHotwireAngle = nil

    if hotwireButton then
        hotwireButton.Text = toggleText("Автоугон [F7]", enabled)
    end

    if not enabled then
        hotwireStatus.Text = "Автоугон: выключен"
    elseif not okVim or not vim then
        hotwireStatus.Text = "Автоугон: VirtualInputManager недоступен"
    else
        hotwireStatus.Text = "Автоугон: ожидание мини-игры"
    end
end

hotwireButton = makeButton(
    toggleText("Автоугон [F7]", settings.autoHotwire),
    function()
        setAutoHotwire(not settings.autoHotwire)
    end
)

local section = makeLabel("──  CAR BOOST  ──", 24, colors.muted)
section.TextSize = 11

local carStatus = makeLabel("Авто: сядь за руль", 26, colors.muted)
carStatus.TextSize = 11

makeButton(toggleText("Ускорение машины", settings.carBoost), function(button)
    settings.carBoost = not settings.carBoost
    button.Text = toggleText("Ускорение машины", settings.carBoost)
end)

makeButton(toggleText("Ноуклип машины", settings.carNoclip), function(button)
    settings.carNoclip = not settings.carNoclip
    button.Text = toggleText("Ноуклип машины", settings.carNoclip)
end)

local function makeAdjuster(titleText, getValue, setValue, step, minimum, maximum, suffix)
    local row = Instance.new("Frame")
    row.LayoutOrder = nextOrder()
    row.Size = UDim2.new(1, 0, 0, 30)
    row.BackgroundTransparency = 1
    row.Parent = scroll

    local function sideButton(text, position)
        local button = Instance.new("TextButton")
        button.Size = UDim2.fromOffset(38, 30)
        button.Position = position
        button.BackgroundColor3 = colors.button
        button.BorderSizePixel = 0
        button.Text = text
        button.TextColor3 = colors.white
        button.TextSize = 16
        button.Font = Enum.Font.GothamBold
        button.Parent = row
        corner(button, 7)
        return button
    end

    local minus = sideButton("−", UDim2.fromOffset(0, 0))
    local plus = sideButton("+", UDim2.new(1, -38, 0, 0))

    local label = Instance.new("TextLabel")
    label.Position = UDim2.fromOffset(44, 0)
    label.Size = UDim2.new(1, -88, 1, 0)
    label.BackgroundColor3 = colors.panel
    label.BorderSizePixel = 0
    label.TextColor3 = colors.white
    label.TextSize = 11
    label.Font = Enum.Font.GothamMedium
    label.Parent = row
    corner(label, 7)

    local function refresh()
        label.Text = titleText .. ": " .. getValue() .. (suffix or "")
    end

    connect(minus.MouseButton1Click, function()
        setValue(math.clamp(getValue() - step, minimum, maximum))
        refresh()
    end)

    connect(plus.MouseButton1Click, function()
        setValue(math.clamp(getValue() + step, minimum, maximum))
        refresh()
    end)

    refresh()
end

makeAdjuster(
    "Ускорение",
    function() return settings.carAcceleration end,
    function(value) settings.carAcceleration = value end,
    5, 0, 55, ""
)

makeAdjuster(
    "Предел буста",
    function() return settings.carSpeedLimit end,
    function(value) settings.carSpeedLimit = value end,
    5, 50, 135, " studs/с"
)

local hint = makeLabel("Ноуклип может провалить авто сквозь дорогу", 26, colors.red)
hint.TextSize = 10

local cleanup
local stopButton = makeButton("ВЫКЛЮЧИТЬ СКРИПТ", function()
    cleanup()
end)
stopButton.TextColor3 = colors.red

-- Перетаскивание
local dragging = false
local dragInput
local dragStart
local startPosition

connect(header.InputBegan, function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1
        or input.UserInputType == Enum.UserInputType.Touch then

        dragging = true
        dragInput = input
        dragStart = input.Position
        startPosition = main.Position
    end
end)

connect(header.InputChanged, function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement then
        dragInput = input
    end
end)

connect(UIS.InputChanged, function(input)
    if dragging and input == dragInput and dragStart and startPosition 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)

connect(UIS.InputEnded, function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1
        or input.UserInputType == Enum.UserInputType.Touch then
        dragging = false
    end
end)

connect(UIS.InputBegan, function(input, processed)
    if processed or UIS:GetFocusedTextBox() then
        return
    end

    if input.KeyCode == Enum.KeyCode.RightShift then
        main.Visible = not main.Visible
    elseif input.KeyCode == Enum.KeyCode.F7 then
        setAutoHotwire(not settings.autoHotwire)
    end
end)

-- ==========================================
-- АВТОУГОН
-- ==========================================

local function signedDifference(a, b)
    return (a - b + 180) % 360 - 180
end

local function getYellowCenter(zone)
    local x, y, count = 0, 0, 0

    for _, segment in ipairs(zone:GetChildren()) do
        if segment:IsA("GuiObject") and segment.Visible then
            for _, inner in ipairs(segment:GetChildren()) do
                if inner:IsA("GuiObject") and inner.Visible then
                    local color = inner.BackgroundColor3

                    if color.R > 0.85
                        and color.G > 0.55
                        and color.G < 0.88
                        and color.B < 0.5 then

                        local angle = math.rad(segment.Rotation + zone.Rotation)
                        x += math.cos(angle)
                        y += math.sin(angle)
                        count += 1
                        break
                    end
                end
            end
        end
    end

    if count == 0 then
        return nil
    end

    return math.deg(math.atan2(y, x)) % 360
end

local function pressHotwireSpace()
    if not okVim or not vim then
        setAutoHotwire(false)
        hotwireStatus.Text = "Автоугон: VirtualInputManager недоступен"
        return
    end

    local success, err = pcall(function()
        vim:SendKeyEvent(true, Enum.KeyCode.Space, false, game)
    end)

    if not success then
        setAutoHotwire(false)
        hotwireStatus.Text = "Автоугон: ошибка ввода, смотри консоль"
        warn("[HUSH] Ошибка автоугона:", err)
        return
    end

    task.delay(0.04, function()
        pcall(function()
            vim:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
        end)
    end)

    hotwireStatus.Text = "Автоугон: пробел отправлен"
end

local function updateHotwire()
    if not settings.autoHotwire then
        return
    end

    if UIS:GetFocusedTextBox() then
        previousHotwireAngle = nil
        hotwireStatus.Text = "Автоугон: пауза, открыт ввод текста"
        return
    end

    local hotwire = playerGui:FindFirstChild("HotwireGui")
    local holder = hotwire and hotwire:FindFirstChild("Holder")
    local dial = holder and holder:FindFirstChild("Dial")
    local needle = dial and dial:FindFirstChild("Needle")
    local zone = dial and dial:FindFirstChild("Zone")

    if not hotwire or not hotwire.Enabled
        or not holder or not holder.Visible
        or not dial or not dial.Visible
        or not needle or not needle.Visible
        or not zone or not zone.Visible then

        previousHotwireAngle = nil
        hotwireStatus.Text = "Автоугон: ожидание мини-игры"
        return
    end

    local target = getYellowCenter(zone)

    if not target then
        previousHotwireAngle = nil
        hotwireStatus.Text = "Автоугон: жёлтый сектор не найден"
        return
    end

    local angle = needle.Rotation % 360
    local difference = signedDifference(angle, target)
    local shouldPress = math.abs(difference) <= 3

    if previousHotwireAngle then
        local movement = signedDifference(angle, previousHotwireAngle)
        local fromPreviousToTarget = signedDifference(target, previousHotwireAngle)

        if math.abs(movement) < 60
            and movement ~= 0
            and fromPreviousToTarget * movement > 0
            and math.abs(fromPreviousToTarget) <= math.abs(movement) then

            shouldPress = true
        end
    end

    previousHotwireAngle = angle

    if shouldPress and os.clock() - lastHotwirePress >= 1 then
        lastHotwirePress = os.clock()
        pressHotwireSpace()
    elseif os.clock() - lastHotwirePress >= 1 then
        hotwireStatus.Text = "Автоугон: ожидание стрелки"
    end
end

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

local monsterVisuals = {}
local watcherVisuals = {}
local playerVisuals = {}
local motherVisuals = {}

local function getRoot(model)
    if not model or not model:IsA("Model") then
        return nil
    end

    local root = model:FindFirstChild("HumanoidRootPart")
        or model:FindFirstChild("Core")
        or model.PrimaryPart
        or model:FindFirstChildWhichIsA("BasePart", true)

    if root and root:IsA("BasePart") then
        return root
    end

    return nil
end

local function destroyVisual(visual)
    if not visual then return end
    if visual.highlight then visual.highlight:Destroy() end
    if visual.billboard then visual.billboard:Destroy() end
    if visual.line then visual.line:Destroy() end
end

local function makeVisual(model, root, color, withLine, maxDistance)
    local highlight = Instance.new("Highlight")
    highlight.Name = "HushHighlight"
    highlight.Adornee = model
    highlight.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
    highlight.FillColor = color
    highlight.FillTransparency = 0.75
    highlight.OutlineColor = color
    highlight.OutlineTransparency = 0
    highlight.Parent = screen

    local billboard = Instance.new("BillboardGui")
    billboard.Name = "HushBillboard"
    billboard.Adornee = root
    billboard.Size = UDim2.fromOffset(180, 42)
    billboard.StudsOffset = Vector3.new(0, 3, 0)
    billboard.AlwaysOnTop = true
    billboard.MaxDistance = maxDistance or settings.range
    billboard.Parent = screen

    local label = Instance.new("TextLabel")
    label.Size = UDim2.fromScale(1, 1)
    label.BackgroundTransparency = 1
    label.TextColor3 = color
    label.TextStrokeColor3 = Color3.new(0, 0, 0)
    label.TextStrokeTransparency = 0
    label.TextSize = 13
    label.Font = Enum.Font.GothamBold
    label.TextWrapped = true
    label.Parent = billboard

    local line

    if withLine then
        line = Instance.new("Frame")
        line.Name = "TrackerLine"
        line.AnchorPoint = Vector2.new(0.5, 0.5)
        line.BorderSizePixel = 0
        line.BackgroundColor3 = color
        line.Visible = false
        line.Parent = linesFolder
    end

    return {
        model = model,
        root = root,
        highlight = highlight,
        billboard = billboard,
        label = label,
        line = line
    }
end

local function ensureVisual(collection, key, model, root, color, withLine, maxDistance)
    local visual = collection[key]

    if visual and (visual.model ~= model or visual.root ~= root) then
        destroyVisual(visual)
        collection[key] = nil
        visual = nil
    end

    if not visual then
        visual = makeVisual(model, root, color, withLine, maxDistance)
        collection[key] = visual
    end

    visual.highlight.FillColor = color
    visual.highlight.OutlineColor = color
    visual.label.TextColor3 = color

    if visual.line then
        visual.line.BackgroundColor3 = color
    end

    return visual
end

local function removeMissing(collection, wanted)
    for key, visual in pairs(collection) do
        if not wanted[key] then
            destroyVisual(visual)
            collection[key] = nil
        end
    end
end

local function updatePlayers(myRoot)
    local wanted = {}
    local count = 0

    if settings.playerESP and myRoot then
        for _, other in ipairs(Players:GetPlayers()) do
            if other ~= player then
                local character = other.Character
                local root = getRoot(character)
                local humanoid = character and character:FindFirstChildOfClass("Humanoid")

                if character and root and (not humanoid or humanoid.Health > 0) then
                    local distance = (root.Position - myRoot.Position).Magnitude

                    if distance <= settings.range then
                        wanted[other] = true
                        count += 1

                        local visual = ensureVisual(
                            playerVisuals, other, character, root,
                            colors.player, false
                        )

                        visual.label.Text = other.DisplayName
                            .. "\n" .. math.floor(distance) .. " studs"
                    end
                end
            end
        end
    end

    removeMissing(playerVisuals, wanted)
    return count
end

local function updateMonsters(myRoot)
    local wanted = {}
    local candidates = {}
    local folder = Workspace:FindFirstChild("Monsters")

    if settings.monsterESP and folder and myRoot then
        for _, model in ipairs(folder:GetChildren()) do
            if model:IsA("Model") then
                local root = getRoot(model)
                local humanoid = model:FindFirstChildOfClass("Humanoid")

                if root and (not humanoid or humanoid.Health > 0) then
                    local distance = (root.Position - myRoot.Position).Magnitude

                    if distance <= settings.range then
                        table.insert(candidates, {
                            model = model,
                            root = root,
                            distance = distance
                        })
                    end
                end
            end
        end

        table.sort(candidates, function(a, b)
            return a.distance < b.distance
        end)

        for i = 1, math.min(settings.maxMonsters, #candidates) do
            local item = candidates[i]
            local color = i == 1 and colors.nearest or colors.monster

            wanted[item.model] = true

            local visual = ensureVisual(
                monsterVisuals, item.model, item.model, item.root,
                color, true
            )

            visual.label.Text = item.model.Name
                .. "\n" .. math.floor(item.distance) .. " studs"
        end
    end

    removeMissing(monsterVisuals, wanted)
    return math.min(#candidates, settings.maxMonsters)
end

local function updateWatchers(myRoot)
    local wanted = {}
    local count = 0
    local folder = Workspace:FindFirstChild("Watchers")

    if settings.watcherESP and folder and myRoot then
        for _, model in ipairs(folder:GetChildren()) do
            if model:IsA("Model") then
                local root = model:FindFirstChild("Core") or getRoot(model)

                if root and root:IsA("BasePart") then
                    local distance = (root.Position - myRoot.Position).Magnitude

                    if distance <= settings.range then
                        wanted[model] = true
                        count += 1

                        local visual = ensureVisual(
                            watcherVisuals, model, model, root,
                            colors.watcher, false
                        )

                        visual.label.Text = "ГЛАЗИК"
                            .. "\n" .. math.floor(distance) .. " studs"
                    end
                end
            end
        end
    end

    removeMissing(watcherVisuals, wanted)
    return count
end

local function updateMother(myRoot)
    local wanted = {}
    local model = Workspace:FindFirstChild("Mother")

    if not settings.motherESP then
        motherStatus.Text = "Мать: ESP выключен"
    elseif not model or not model:IsA("Model") then
        motherStatus.Text = "Мать: модель не найдена"
    else
        local root = getRoot(model)

        if not root then
            motherStatus.Text = "Мать: модель есть, деталь не найдена"
        else
            wanted[model] = true

            local visual = ensureVisual(
                motherVisuals, model, model, root,
                colors.mother, false, 100000
            )

            if myRoot then
                local distance = (root.Position - myRoot.Position).Magnitude
                visual.label.Text = "МАТЬ\n" .. math.floor(distance) .. " studs"
                motherStatus.Text = "Мать: " .. math.floor(distance) .. " studs"
            else
                visual.label.Text = "МАТЬ"
                motherStatus.Text = "Мать: найдена"
            end
        end
    end

    removeMissing(motherVisuals, wanted)
end

local function updateLines()
    local camera = Workspace.CurrentCamera

    for _, visual in pairs(monsterVisuals) do
        local line = visual.line

        if line then
            line.Visible = false

            if settings.monsterESP
                and settings.monsterLines
                and camera
                and visual.root
                and visual.root.Parent then

                local point, onScreen = camera:WorldToViewportPoint(
                    visual.root.Position
                )

                if onScreen and point.Z > 0 then
                    local viewport = camera.ViewportSize
                    local startPoint = Vector2.new(viewport.X / 2, viewport.Y - 20)
                    local targetPoint = Vector2.new(point.X, point.Y)
                    local delta = targetPoint - startPoint
                    local midpoint = (startPoint + targetPoint) / 2

                    line.Size = UDim2.fromOffset(delta.Magnitude, 2)
                    line.Position = UDim2.fromOffset(midpoint.X, midpoint.Y)
                    line.Rotation = math.deg(math.atan2(delta.Y, delta.X))
                    line.Visible = true
                end
            end
        end
    end
end

local function updateNoise()
    local hud = playerGui:FindFirstChild("HudGui")
    local sway = hud and hud:FindFirstChild("Sway")
    local noise = sway and sway:FindFirstChild("Noise")
    local label = noise and noise:FindFirstChild("TextLabel")

    if label and label:IsA("TextLabel") then
        noiseLabel.Text = "Шум: " .. label.Text
    else
        noiseLabel.Text = "Шум: индикатор не найден"
    end
end

-- ==========================================
-- МАШИНА
-- ==========================================

local function getCarParts()
    local character = player.Character
    local humanoid = character and character:FindFirstChildOfClass("Humanoid")
    local seat = humanoid and humanoid.SeatPart

    if not seat or seat.Name ~= "DriverSeat" then
        return nil
    end

    local car = seat:FindFirstAncestorOfClass("Model")
    if not car then
        return nil
    end

    local body = seat.AssemblyRootPart
    if not body or body.Anchored then
        return nil
    end

    return body, seat, car
end

local rayParams = RaycastParams.new()
rayParams.FilterType = Enum.RaycastFilterType.Exclude

local collisionSaved = {}
local collisionCar
local collisionAddedConnection

local function restoreCarCollision()
    if collisionAddedConnection then
        collisionAddedConnection:Disconnect()
        collisionAddedConnection = nil
    end

    for part, original in pairs(collisionSaved) do
        pcall(function()
            if part.Parent then
                part.CanCollide = original
            end
        end)
    end

    table.clear(collisionSaved)
    collisionCar = nil
end

local function trackCollisionPart(part)
    if not part:IsA("BasePart") then
        return
    end

    if collisionSaved[part] == nil then
        collisionSaved[part] = part.CanCollide
    end

    pcall(function()
        part.CanCollide = false
    end)
end

local function startCarNoclip(car)
    restoreCarCollision()
    collisionCar = car

    for _, object in ipairs(car:GetDescendants()) do
        trackCollisionPart(object)
    end

    collisionAddedConnection = car.DescendantAdded:Connect(function(object)
        if alive and settings.carNoclip and collisionCar == car then
            trackCollisionPart(object)
        end
    end)
end

local function updateCarNoclip(car)
    if not settings.carNoclip or not car then
        if collisionCar then
            restoreCarCollision()
        end
        return
    end

    if collisionCar ~= car then
        startCarNoclip(car)
    end

    for part in pairs(collisionSaved) do
        pcall(function()
            if part.Parent and part.CanCollide then
                part.CanCollide = false
            end
        end)
    end
end

-- ==========================================
-- ОБНОВЛЕНИЕ
-- ==========================================

local espElapsed = 0
local lightingScanElapsed = 0
local carStatusElapsed = 0

connect(RunService.Heartbeat, function(dt)
    if not alive then return end

    local body, seat, car = getCarParts()
    updateCarNoclip(car)

    local holdingW = UIS:IsKeyDown(Enum.KeyCode.W)
    local holdingS = UIS:IsKeyDown(Enum.KeyCode.S)
    local typing = UIS:GetFocusedTextBox() ~= nil

    if body and seat and car then
        local velocity = body.AssemblyLinearVelocity
        local horizontal = Vector3.new(velocity.X, 0, velocity.Z)
        local speed = horizontal.Magnitude

        local upright = seat.CFrame.UpVector:Dot(Vector3.yAxis) > 0.65

        local character = player.Character
        rayParams.FilterDescendantsInstances = character and {car, character} or {car}

        local ground = Workspace:Raycast(
            body.Position,
            Vector3.new(0, -9, 0),
            rayParams
        )

        local grounded = ground ~= nil

        local forward = seat.CFrame.LookVector
        local flatForward = Vector3.new(forward.X, 0, forward.Z)
        local movingForward = false

        if flatForward.Magnitude > 0.01 and speed > 5 then
            movingForward = horizontal.Unit:Dot(flatForward.Unit) > 0.2
        end

        local canBoost =
            settings.carBoost
            and holdingW
            and not holdingS
            and not typing
            and upright
            and grounded
            and movingForward
            and speed < settings.carSpeedLimit

        if canBoost then
            local addition = math.min(
                settings.carAcceleration * math.min(dt, 0.05),
                settings.carSpeedLimit - speed
            )

            body.AssemblyLinearVelocity = velocity + horizontal.Unit * addition
        end

        carStatusElapsed += dt
        if carStatusElapsed >= 0.2 then
            carStatusElapsed = 0

            local reason

            if not settings.carBoost then
                reason = "буст выкл"
            elseif not upright then
                reason = "переворот"
            elseif not grounded then
                reason = "нет земли"
            elseif typing then
                reason = "ввод текста"
            elseif not holdingW or holdingS then
                reason = "ожидание W"
            elseif not movingForward then
                reason = "нет движения вперёд"
            elseif speed >= settings.carSpeedLimit then
                reason = "предел"
            else
                reason = "буст"
            end

            carStatus.Text = string.format(
                "Авто: %.1f studs/с | %s",
                speed,
                reason
            )
        end
    else
        carStatusElapsed += dt
        if carStatusElapsed >= 0.2 then
            carStatusElapsed = 0
            carStatus.Text = "Авто: сядь за руль"
        end
    end

    espElapsed += dt

    if espElapsed >= 0.25 then
        espElapsed = 0

        local myRoot = getRoot(player.Character)
        local playerCount = updatePlayers(myRoot)
        local monsterCount = updateMonsters(myRoot)
        local watcherCount = updateWatchers(myRoot)

        statusLabel.Text = "Игроки: " .. playerCount
            .. " | Монстры: " .. monsterCount
            .. " | Глаза: " .. watcherCount

        updateMother(myRoot)
        updateNoise()
    end

    lightingScanElapsed += dt

    if lightingScanElapsed >= 0.5 then
        lightingScanElapsed = 0

        if settings.fullbright or settings.noFog then
            inspectLighting()
        end
    end
end)

local renderName = "HushMonoV8Lighting"
RunService:UnbindFromRenderStep(renderName)

RunService:BindToRenderStep(
    renderName,
    Enum.RenderPriority.Last.Value,
    function()
        if not alive then return end
        applyLighting()
        updateLines()
        updateHotwire()
    end
)

-- ==========================================
-- ОЧИСТКА
-- ==========================================

cleanup = function()
    if not alive then return end

    alive = false
    settings.carBoost = false
    settings.carNoclip = false
    settings.autoHotwire = false

    RunService:UnbindFromRenderStep(renderName)

    for _, connection in ipairs(connections) do
        connection:Disconnect()
    end

    pcall(function()
        if vim then
            vim:SendKeyEvent(false, Enum.KeyCode.Space, false, game)
        end
    end)

    restoreCarCollision()

    if settings.fullbright then
        settings.fullbright = false
        restoreProperties(savedBright)
        restoreEffects()
    end

    if settings.noFog then
        settings.noFog = false
        restoreProperties(savedFog)
        restoreAtmospheres()
    end

    for _, collection in ipairs({
        monsterVisuals,
        watcherVisuals,
        playerVisuals,
        motherVisuals
    }) do
        for _, visual in pairs(collection) do
            destroyVisual(visual)
        end

        table.clear(collection)
    end

    screen:Destroy()

    if env.HushMonoV8Cleanup == cleanup then
        env.HushMonoV8Cleanup = nil
    end

    print("[HUSH V8] Скрипт выключен.")
end

env.HushMonoV8Cleanup = cleanup

print("[HUSH V8] Загружен. RightShift — меню, F7 — автоугон.")
Game pageHUSH: They can hear. · 2 scripts on this siteRoblox ›

More HUSH: They can hear. scripts

See all
Get Delta Script first on GoogleAdd us as a preferred source to see our new scripts in your Google results.
Add Delta Script on Google

Leave a Reply

Your email address will not be published. Required fields are marked *