Blox Strike Script | Nova Simple v5 UPD for Bloxstrike, Keyless

Blox Strike Script | Nova Simple v5 UPD for Bloxstrike, Keyless

blox strike • 4 days ago
60 views
Blox Strike Script | Nova Simple v5 UPD for Bloxstrike, Keyless Keyless
XenoDev
Play Game Game Link

Description

This blox strike script has been shared by a number of players who found it useful for everyday gameplay. The standout features are ESP and Head Expand. Access is keyless.

What This Script Can Do

  • ESP: Highlights other players or objects through walls so you always know where everything is on the map.
  • Head Expand: Gives you access to Head Expand in blox strike, which can make a real difference during longer play sessions.
  • Team Check: Handles Team Check automatically in blox strike, so you don’t have to do it manually every session.
  • Autofire: Handles Autofire automatically in blox strike, so you don’t have to do it manually every session.
  • Access: No key system or Linkvertise redirect needed — just paste and run.
  • Executor Compatibility: Works great on Delta, Codex, Hydrogen, Wave, and most mobile and PC executors.

How to Use This Script

  1. Open Roblox and search for blox strike, then join any active server.
  2. Wait until you’re fully loaded into the game world before running any script.
  3. Open your executor app (Delta, Codex, Hydrogen, Wave, or any compatible one) and go to the script tab.
  4. Copy the loadstring code shown on this page and paste it into your executor’s script box, then press Execute.
  5. A GUI or confirmation should appear in-game — use it to turn on the features you want and adjust any settings.
Features
Compatible Executors

Script

-- language: Luau, target: Roblox "Blox Strike", executors: Xeno / Delta / Wave / Solara
-- NOVA SIMPLE v5: Kill All + анти-отдача · превью-каталог (drag-вращение, зум) · вкладка Мир удалена

local ENV = (getgenv and getgenv()) or {}
if ENV.NOVASimple and ENV.NOVASimple.Unload then pcall(ENV.NOVASimple.Unload) end

local Players          = game:GetService("Players")
local RunService       = game:GetService("RunService")
local TweenService     = game:GetService("TweenService")
local UserInputService = game:GetService("UserInputService")
local HttpService      = game:GetService("HttpService")
local VirtualUser      = game:GetService("VirtualUser")

local LP = Players.LocalPlayer

--// CONFIG
local CFG = {
    TeamCheck = true, TeamRadius = 30,

    ESP = true, Highlight = true, HeadBox = true,
    Name = true, Health = true, Distance = true, MaxDistance = 2500,
    ESPColor     = Color3.fromRGB(255, 70, 85),
    HeadBoxColor = Color3.fromRGB(255, 215, 60),

    HeadExpand = false, HeadSize = 6, HeadTransparency = 0.55,

    KillAll = false, FireDelay = 0.15,
    NoRecoil = false, RecoilStrength = 100,

    Particles = true,
    GuiKey = Enum.KeyCode.RightShift,
}

--// THEME
local Theme = {
    Accent  = Color3.fromRGB(227, 137, 35),
    Bg      = Color3.fromRGB(13, 13, 19),
    Bg2     = Color3.fromRGB(22, 23, 32),
    Bg3     = Color3.fromRGB(30, 31, 42),
    Stroke  = Color3.fromRGB(46, 46, 64),
    Text    = Color3.fromRGB(236, 236, 246),
    TextDim = Color3.fromRGB(138, 138, 162),
    Green   = Color3.fromRGB(116, 203, 73),
    Red     = Color3.fromRGB(236, 72, 78),
    Ally    = Color3.fromRGB(86, 196, 255),
}
local AccentPresets = {
    { "Оранж",   Color3.fromRGB(227, 137, 35) },
    { "Фиолет",  Color3.fromRGB(124, 92, 255) },
    { "Синий",   Color3.fromRGB(0, 170, 255) },
    { "Зелёный", Color3.fromRGB(0, 215, 135) },
    { "Розовый", Color3.fromRGB(255, 80, 160) },
}

--// STATE
local running = true
local minimized = false
local Conns = {}
local function Bind(signal, fn)
    local c = signal:Connect(fn)
    table.insert(Conns, c)
    return c
end

local function New(class, props, children)
    local inst = Instance.new(class)
    for k, v in pairs(props) do
        if k ~= "Parent" then inst[k] = v end
    end
    if children then
        for _, c in ipairs(children) do c.Parent = inst end
    end
    if props.Parent then inst.Parent = props.Parent end
    return inst
end
local function Corner(r) return New("UICorner", { CornerRadius = UDim.new(0, r) }) end
local function TI(t, style, dir) return TweenInfo.new(t, style or Enum.EasingStyle.Quint, dir or Enum.EasingDirection.Out) end
local function Tag(inst, role) inst:SetAttribute("__accent", role) return inst end

--// I18N
local LANG, bindings = "ru", {}
local TR = {
    ru = {
        subtitle = "KILL ALL • ESP • ГОЛОВА • АНТИ-ОТДАЧА",
        tab_team = "Команды", tab_combat = "Бой", tab_visuals = "Визуалы",
        tab_head = "Голова", tab_config = "Конфиг",
        sec_team = "Команда / Раунд", sec_killall = "Kill All", sec_recoil = "Отдача",
        sec_esp = "ESP", sec_head = "Хитбокс головы",
        sec_gui = "Интерфейс", sec_lang = "Язык", sec_keys = "Клавиши",
        team_check = "Проверка команды", radius = "Радиус спавн-команды",
        rescan = "Пересканировать сейчас", allies = "Союзников",
        scan_done = "Калибровка завершена · союзников: ",
        kill_all = "Kill All (авто-стрельба)", fire_delay = "Интервал выстрела",
        killall_note = "Головы растягиваются автоматически · стрельба по ближайшей видимой голове · не держи меню под курсором",
        killed = "Убито",
        no_recoil = "Убирать отдачу", recoil_strength = "Сила компенсации",
        esp = "ESP", highlight = "Подсветка (сквозь стены)", head_box = "Бокс головы (сквозь стены)",
        name = "Имя", hp = "Полоска HP", distance = "Дистанция", esp_dist = "Дальность ESP",
        esp_color = "Цвет ESP", hb_color = "Цвет бокса головы",
        head_expand = "Увеличение головы", head_size = "Размер головы", transparency = "Прозрачность",
        particles = "Частицы", accent = "Акцент", gui_key = "Клавиша меню",
        unload = "Выгрузить скрипт", delete_note = "Delete — выгрузка всегда",
        preview_esp = "ПРЕДПРОСМОТР · ДЕМО ESP", preview_hint = "Тяни мышью — вращение · колесо — зум",
        hp_stat = "Здоровье", team_stat = "Команда", neutral = "Нейтральный",
        lang_tip = "Переключает язык интерфейса",
        loaded = "NOVA v5 · RShift — меню · Delete — выгрузка",
    },
    en = {
        subtitle = "KILL ALL • ESP • HEAD • ANTI-RECOIL",
        tab_team = "Team", tab_combat = "Combat", tab_visuals = "Visuals",
        tab_head = "Head", tab_config = "Config",
        sec_team = "Team / Round", sec_killall = "Kill All", sec_recoil = "Recoil",
        sec_esp = "ESP", sec_head = "Head hitbox",
        sec_gui = "Interface", sec_lang = "Language", sec_keys = "Keys",
        team_check = "Team check", radius = "Spawn team radius",
        rescan = "Rescan now", allies = "Allies",
        scan_done = "Calibration done · allies: ",
        kill_all = "Kill All (auto-fire)", fire_delay = "Fire interval",
        killall_note = "Heads expand automatically · fires at nearest visible head · keep menu away from cursor",
        killed = "Killed",
        no_recoil = "Remove recoil", recoil_strength = "Compensation strength",
        esp = "ESP", highlight = "Highlight (through walls)", head_box = "Head box (through walls)",
        name = "Name", hp = "HP bar", distance = "Distance", esp_dist = "ESP distance",
        esp_color = "ESP color", hb_color = "Head box color",
        head_expand = "Head expand", head_size = "Head size", transparency = "Transparency",
        particles = "Particles", accent = "Accent", gui_key = "Menu key",
        unload = "Unload script", delete_note = "Delete — unload always",
        preview_esp = "PREVIEW · ESP DEMO", preview_hint = "Drag to rotate · wheel to zoom",
        hp_stat = "Health", team_stat = "Team", neutral = "Neutral",
        lang_tip = "Changes interface language only",
        loaded = "NOVA v5 · RShift — menu · Delete — unload",
    },
}
local function tr(k) local t = TR[LANG] return (t and t[k]) or k end
local function bind(fn) bindings[#bindings + 1] = fn fn() end
local function setLang(l)
    if l ~= "ru" and l ~= "en" then return end
    LANG = l
    for _, f in ipairs(bindings) do pcall(f) end
end

local Notify, RefreshAccent, SelectTab
local CurrentTab = 1
local AlliesLabel, KillLabel

--// ROOT GUI
local ScreenGui = New("ScreenGui", {
    Name = "NOVA_" .. HttpService:GenerateGUID(false):sub(1, 8),
    ResetOnSpawn = false, IgnoreGuiInset = true,
    ZIndexBehavior = Enum.ZIndexBehavior.Sibling, DisplayOrder = 999999,
})
do
    local mounted = false
    if gethui then
        local ok, parent = pcall(gethui)
        if ok and parent then
            local ok2 = pcall(function() ScreenGui.Parent = parent end)
            mounted = ok2 and ScreenGui.Parent == parent
        end
    end
    if not mounted then
        local ok = pcall(function() ScreenGui.Parent = game:GetService("CoreGui") end)
        if not ok or not ScreenGui.Parent then ScreenGui.Parent = LP:WaitForChild("PlayerGui") end
    end
end

local Scale = New("UIScale", { Scale = 0.9 })

local Main = New("Frame", {
    AnchorPoint = Vector2.new(0.5, 0.5), Position = UDim2.fromScale(0.5, 0.5),
    Size = UDim2.fromOffset(620, 440), BackgroundColor3 = Theme.Bg,
    BorderSizePixel = 0, ClipsDescendants = true, Active = true, Parent = ScreenGui,
}, { Scale, Corner(12) })
New("UIStroke", { Color = Theme.Stroke, Thickness = 1, Transparency = 0.15, Parent = Main })

New("Frame", {
    Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.fromRGB(255, 255, 255), Parent = Main,
}, {
    New("UIGradient", {
        Rotation = 16,
        Color = ColorSequence.new(Color3.fromRGB(255, 255, 255), Color3.fromRGB(190, 190, 220)),
        Transparency = NumberSequence.new({
            NumberSequenceKeypoint.new(0, 0.97),
            NumberSequenceKeypoint.new(1, 0.93),
        }),
    }),
})

--// PARTICLES
local ParticleLayer = New("Frame", { Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, Parent = Main })
local Particles = {}
for i = 1, 20 do
    local size = math.random(1, 3)
    local obj = New("Frame", {
        Size = UDim2.fromOffset(size, size), Position = UDim2.fromScale(math.random(), math.random()),
        BackgroundColor3 = i % 2 == 0 and Theme.Accent or Color3.fromRGB(120, 89, 58),
        BackgroundTransparency = 0.78, BorderSizePixel = 0, Parent = ParticleLayer,
    }, { Corner(size) })
    local a = math.random() * math.pi * 2
    Particles[#Particles + 1] = { Obj = obj, X = math.cos(a), Y = math.sin(a) }
end
Bind(RunService.RenderStepped, function(dt)
    ParticleLayer.Visible = running and CFG.Particles and Main.Visible and not minimized
    if not ParticleLayer.Visible then return end
    for _, p in ipairs(Particles) do
        local old = p.Obj.Position
        local x = old.X.Scale + p.X * dt * 4.2
        local y = old.Y.Scale + p.Y * dt * 4.2
        if x  1 then x = 0 end
        if y  1 then y = 0 end
        p.Obj.Position = UDim2.fromScale(x, y)
    end
end)

--// TOPBAR
local Topbar = New("Frame", { Size = UDim2.new(1, 0, 0, 44), BackgroundTransparency = 1, Active = true, Parent = Main })

local Dot = Tag(New("Frame", {
    Position = UDim2.fromOffset(16, 15), Size = UDim2.fromOffset(14, 14),
    BackgroundColor3 = Theme.Accent, Parent = Topbar,
}, { Corner(7) }), "bg")
New("Frame", {
    Position = UDim2.fromOffset(3, 3), Size = UDim2.fromOffset(8, 8),
    BackgroundColor3 = Color3.fromRGB(255, 255, 255), BackgroundTransparency = 0.55, Parent = Dot,
}, { Corner(4) })

New("TextLabel", {
    Position = UDim2.fromOffset(40, 0), Size = UDim2.fromOffset(90, 44), BackgroundTransparency = 1,
    Text = "NOVA", TextColor3 = Theme.Text, TextSize = 16,
    Font = Enum.Font.GothamBlack, TextXAlignment = Enum.TextXAlignment.Left, Parent = Topbar,
})
New("TextLabel", {
    Position = UDim2.fromOffset(96, 0), Size = UDim2.fromOffset(220, 44), BackgroundTransparency = 1,
    Text = "· simple rebuild", TextColor3 = Theme.TextDim, TextSize = 13,
    Font = Enum.Font.GothamMedium, TextXAlignment = Enum.TextXAlignment.Left, Parent = Topbar,
})

local KeyHint = New("TextLabel", {
    AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -104, 0.5, 0), Size = UDim2.fromOffset(84, 24),
    BackgroundColor3 = Theme.Bg2, BackgroundTransparency = 0.4, Text = CFG.GuiKey.Name,
    TextColor3 = Theme.TextDim, TextSize = 11, Font = Enum.Font.GothamBold, Parent = Topbar,
}, { Corner(6) })

local MinBtn = New("TextButton", {
    AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -68, 0.5, 0), Size = UDim2.fromOffset(26, 26),
    BackgroundColor3 = Theme.Bg2, BackgroundTransparency = 0.4, Text = "—",
    TextColor3 = Theme.TextDim, TextSize = 14, Font = Enum.Font.GothamBold, AutoButtonColor = false, Parent = Topbar,
}, { Corner(13) })

local CloseBtn = New("TextButton", {
    AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -36, 0.5, 0), Size = UDim2.fromOffset(26, 26),
    BackgroundColor3 = Theme.Bg2, BackgroundTransparency = 0.4, Text = "×",
    TextColor3 = Theme.TextDim, TextSize = 15, Font = Enum.Font.GothamBold, AutoButtonColor = false, Parent = Topbar,
}, { Corner(13) })

--// BODY
local Body = New("Frame", {
    Position = UDim2.fromOffset(0, 44), Size = UDim2.new(1, 0, 1, -44),
    BackgroundTransparency = 1, Parent = Main,
})

local Sidebar = New("Frame", {
    Size = UDim2.new(0, 152, 1, 0), BackgroundTransparency = 1, Parent = Body,
}, {
    New("UIListLayout", { Padding = UDim.new(0, 4), HorizontalAlignment = Enum.HorizontalAlignment.Center, SortOrder = Enum.SortOrder.LayoutOrder }),
    New("UIPadding", { PaddingTop = UDim.new(0, 10) }),
})
New("Frame", { Position = UDim2.fromOffset(152, 0), Size = UDim2.new(0, 1, 1, 0), BackgroundColor3 = Theme.Bg3, BackgroundTransparency = 0.5, Parent = Body })
local Content = New("Frame", { Position = UDim2.fromOffset(153, 0), Size = UDim2.new(1, -153, 1, 0), BackgroundTransparency = 1, Parent = Body })

--// PAGES + NAV — вкладка Мир удалена, добавлена Бой
local Pages, TabBtns = {}, {}
local NavInfo = {
    { id = "team",    key = "tab_team",    glyph = "◈" },
    { id = "combat",  key = "tab_combat",  glyph = "✦" },
    { id = "visuals", key = "tab_visuals", glyph = "◉" },
    { id = "head",    key = "tab_head",    glyph = "◎" },
    { id = "config",  key = "tab_config",  glyph = "⚙" },
}

local function MakePage(id)
    local page = New("ScrollingFrame", {
        Size = UDim2.fromScale(1, 1), BackgroundTransparency = 1, BorderSizePixel = 0, Visible = false,
        ScrollBarThickness = 3, ScrollBarImageColor3 = Theme.Stroke,
        CanvasSize = UDim2.new(), AutomaticCanvasSize = Enum.AutomaticSize.Y, Parent = Content,
    }, {
        New("UIListLayout", { Padding = UDim.new(0, 10), SortOrder = Enum.SortOrder.LayoutOrder }),
        New("UIPadding", { PaddingLeft = UDim.new(0, 10), PaddingRight = UDim.new(0, 14), PaddingTop = UDim.new(0, 12), PaddingBottom = UDim.new(0, 14) }),
    })
    Pages[id] = page
    return page
end
for _, n in ipairs(NavInfo) do MakePage(n.id) end

local function MakeTab(info, order)
    local btn = New("TextButton", {
        Size = UDim2.new(1, -16, 0, 38), BackgroundColor3 = Theme.Bg2, BackgroundTransparency = 1,
        Text = "", AutoButtonColor = false, LayoutOrder = order, Parent = Sidebar,
    }, { Corner(9) })
    local ind = Tag(New("Frame", {
        Size = UDim2.new(0, 3, 0, 16), Position = UDim2.new(0, 0, 0.5, 0),
        BackgroundColor3 = Theme.Accent, BackgroundTransparency = 1, Parent = btn,
    }, { Corner(2) }), "bg")
    New("TextLabel", {
        Position = UDim2.fromOffset(15, 0), Size = UDim2.fromOffset(22, 38), BackgroundTransparency = 1,
        Text = info.glyph, TextColor3 = Theme.TextDim, TextSize = 15, Font = Enum.Font.GothamBold, Parent = btn,
    })
    local lbl = New("TextLabel", {
        Position = UDim2.fromOffset(43, 0), Size = UDim2.new(1, -50, 1, 0), BackgroundTransparency = 1,
        TextColor3 = Theme.TextDim, TextSize = 13, Font = Enum.Font.GothamMedium,
        TextXAlignment = Enum.TextXAlignment.Left, Parent = btn,
    })
    bind(function() lbl.Text = tr(info.key) end)
    btn.MouseEnter:Connect(function() if CurrentTab ~= order then TweenService:Create(btn, TI(0.15), { BackgroundTransparency = 0.6 }):Play() end end)
    btn.MouseLeave:Connect(function() if CurrentTab ~= order then TweenService:Create(btn, TI(0.15), { BackgroundTransparency = 1 }):Play() end end)
    btn.MouseButton1Click:Connect(function() SelectTab(order) end)
    TabBtns[order] = { Btn = btn, Ind = ind, Lbl = lbl }
end
for i, n in ipairs(NavInfo) do MakeTab(n, i) end

function SelectTab(i)
    CurrentTab = i
    for j = 1, #NavInfo do
        local active = (j == i)
        Pages[NavInfo[j].id].Visible = active
        local t = TabBtns[j]
        TweenService:Create(t.Ind, TI(0.25), { BackgroundTransparency = active and 0 or 1 }):Play()
        TweenService:Create(t.Lbl, TI(0.25), { TextColor3 = active and Theme.Accent or Theme.TextDim }):Play()
        TweenService:Create(t.Btn, TI(0.25), { BackgroundTransparency = active and 0.6 or 1 }):Play()
    end
end

--// COMPONENTS
local function Row(parent, height)
    local row = New("TextButton", {
        Size = UDim2.new(1, 0, 0, height or 36), BackgroundColor3 = Theme.Bg2,
        BackgroundTransparency = 0.35, Text = "", AutoButtonColor = false, Parent = parent,
    }, { Corner(8) })
    row.MouseEnter:Connect(function() TweenService:Create(row, TI(0.13), { BackgroundTransparency = 0.08 }):Play() end)
    row.MouseLeave:Connect(function() TweenService:Create(row, TI(0.18), { BackgroundTransparency = 0.35 }):Play() end)
    return row
end

local function Section(page, titleKey)
    local holder = New("Frame", { Size = UDim2.new(1, 0, 0, 26), BackgroundTransparency = 1, Parent = page })
    Tag(New("Frame", {
        Position = UDim2.fromOffset(0, 13), Size = UDim2.fromOffset(3, 12),
        BackgroundColor3 = Theme.Accent, BackgroundTransparency = 0.35, Parent = holder,
    }, { Corner(2) }), "bg")
    local l = New("TextLabel", {
        Position = UDim2.fromOffset(11, 0), Size = UDim2.new(1, -11, 1, 0), BackgroundTransparency = 1,
        TextColor3 = Theme.TextDim, TextSize = 11, Font = Enum.Font.GothamBold,
        TextXAlignment = Enum.TextXAlignment.Left, Parent = holder,
    })
    bind(function() l.Text = tr(titleKey):upper() end)
end

local function Label(page, textKey)
    local l = New("TextLabel", {
        Size = UDim2.new(1, 0, 0, 20), BackgroundTransparency = 1,
        TextColor3 = Theme.TextDim, TextSize = 11, Font = Enum.Font.Gotham,
        TextXAlignment = Enum.TextXAlignment.Left, TextTransparency = 0.15, TextWrapped = true, Parent = page,
    })
    bind(function() l.Text = tr(textKey) end)
    return l
end

local function Toggle(page, nameKey, key, callback)
    local row = Row(page)
    local lbl = New("TextLabel", {
        Position = UDim2.fromOffset(12, 0), Size = UDim2.new(1, -80, 1, 0), BackgroundTransparency = 1,
        TextColor3 = Theme.Text, TextSize = 13, Font = Enum.Font.GothamMedium,
        TextXAlignment = Enum.TextXAlignment.Left, Parent = row,
    })
    bind(function() lbl.Text = tr(nameKey) end)
    local sw = New("Frame", {
        AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -10, 0.5, 0), Size = UDim2.fromOffset(36, 19),
        BackgroundColor3 = Theme.Bg3, Parent = row,
    }, { Corner(10), New("UIStroke", { Color = Theme.Stroke, Thickness = 1 }) })
    local knob = New("Frame", {
        AnchorPoint = Vector2.new(0, 0.5), Position = UDim2.new(0, 2.5, 0.5, 0), Size = UDim2.fromOffset(14, 14),
        BackgroundColor3 = Theme.TextDim, ZIndex = 2, Parent = sw,
    }, { Corner(7) })
    local function render(instant)
        local state = CFG[key] == true
        local t = TweenInfo.new(instant and 0 or 0.28, Enum.EasingStyle.Quint, Enum.EasingDirection.Out)
        TweenService:Create(sw, t, { BackgroundColor3 = state and Theme.Accent or Theme.Bg3 }):Play()
        TweenService:Create(knob, t, {
            Position = state and UDim2.new(1, -16.5, 0.5, 0) or UDim2.new(0, 2.5, 0.5, 0),
            BackgroundColor3 = state and Color3.fromRGB(255, 255, 255) or Theme.TextDim,
        }):Play()
    end
    row.MouseButton1Click:Connect(function()
        CFG[key] = not CFG[key]
        render()
        if callback then callback(CFG[key]) end
    end)
    render(true)
end

local function Slider(page, nameKey, key, mn, mx, step, callback)
    local row = Row(page, 48)
    local lbl = New("TextLabel", {
        Position = UDim2.fromOffset(12, 0), Size = UDim2.new(1, -90, 0, 26), BackgroundTransparency = 1,
        TextColor3 = Theme.Text, TextSize = 13, Font = Enum.Font.GothamMedium,
        TextXAlignment = Enum.TextXAlignment.Left, Parent = row,
    })
    bind(function() lbl.Text = tr(nameKey) end)
    local val = Tag(New("TextLabel", {
        AnchorPoint = Vector2.new(1, 0), Position = UDim2.new(1, -12, 0, 0), Size = UDim2.fromOffset(80, 26),
        BackgroundTransparency = 1, TextColor3 = Theme.Accent, TextSize = 12, Font = Enum.Font.GothamBold,
        TextXAlignment = Enum.TextXAlignment.Right, Parent = row,
    }), "text")
    local track = New("Frame", {
        AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, 12, 1, -10), Size = UDim2.new(1, -24, 0, 4),
        BackgroundColor3 = Theme.Bg3, Parent = row,
    }, { Corner(2) })
    local fill = Tag(New("Frame", { BackgroundColor3 = Theme.Accent, Parent = track }, { Corner(2) }), "bg")
    local knob = New("Frame", {
        AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(11, 11),
        BackgroundColor3 = Color3.fromRGB(255, 255, 255), ZIndex = 2, Parent = track,
    }, { Corner(5), New("UIStroke", { Color = Theme.Stroke, Thickness = 1 }) })
    local dragging = false
    local function set(v)
        v = math.clamp(v, mn, mx)
        v = math.floor(v / step + 0.5) * step
        v = tonumber(string.format("%.3f", v)) or mn
        CFG[key] = v
        local rel = (v - mn) / (mx - mn)
        fill.Size = UDim2.new(rel, 0, 1, 0)
        knob.Position = UDim2.new(rel, 0, 0.5, 0)
        val.Text = step < 1 and string.format("%.2f", v) or tostring(math.floor(v))
        if callback then callback(v) end
    end
    local function fromX(px)
        if track.AbsoluteSize.X <= 0 then return end
        local rel = math.clamp((px - track.AbsolutePosition.X) / track.AbsoluteSize.X, 0, 1)
        set(mn + (mx - mn) * rel)
    end
    track.InputBegan:Connect(function(inp)
        if inp.UserInputType == Enum.UserInputType.MouseButton1 or inp.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            fromX(inp.Position.X)
        end
    end)
    Bind(UserInputService.InputEnded, function(inp)
        if inp.UserInputType == Enum.UserInputType.MouseButton1 or inp.UserInputType == Enum.UserInputType.Touch then
            dragging = false
        end
    end)
    Bind(UserInputService.InputChanged, function(inp)
        if dragging and (inp.UserInputType == Enum.UserInputType.MouseMovement or inp.UserInputType == Enum.UserInputType.Touch) then
            fromX(inp.Position.X)
        end
    end)
    set(CFG[key])
end

--// COLOR PICKER
local function ColorPicker(page, nameKey, key, callback)
    local container = New("Frame", {
        Size = UDim2.new(1, 0, 0, 36), BackgroundTransparency = 1,
        ClipsDescendants = true, Parent = page,
    })
    local header = Row(container)
    local lbl = New("TextLabel", {
        Position = UDim2.fromOffset(12, 0), Size = UDim2.new(1, -110, 1, 0), BackgroundTransparency = 1,
        TextColor3 = Theme.Text, TextSize = 13, Font = Enum.Font.GothamMedium,
        TextXAlignment = Enum.TextXAlignment.Left, Parent = header,
    })
    bind(function() lbl.Text = tr(nameKey) end)
    local chip = New("Frame", {
        AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -32, 0.5, 0), Size = UDim2.fromOffset(22, 22),
        BackgroundColor3 = CFG[key], Parent = header,
    }, { Corner(6), New("UIStroke", { Color = Theme.Stroke, Thickness = 1 }) })
    local chev = New("TextLabel", {
        AnchorPoint = Vector2.new(1, 0.5), Position = UDim2.new(1, -10, 0.5, 0), Size = UDim2.fromOffset(16, 16),
        BackgroundTransparency = 1, Text = "▾", TextColor3 = Theme.TextDim, TextSize = 12,
        Font = Enum.Font.GothamBold, Parent = header,
    })

    local body = New("Frame", {
        Position = UDim2.fromOffset(0, 40), Size = UDim2.new(1, 0, 0, 178),
        BackgroundTransparency = 1, Parent = container,
    })

    local sv = New("Frame", {
        Size = UDim2.new(1, 0, 0, 146), BackgroundColor3 = Color3.fromHSV(0, 1, 1), Parent = body,
    }, { Corner(8), New("UIStroke", { Color = Theme.Stroke, Thickness = 1 }) })
    New("Frame", {
        Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(1, 1, 1), Parent = sv,
    }, {
        Corner(8),
        New("UIGradient", {
            Rotation = 0,
            Transparency = NumberSequence.new({
                NumberSequenceKeypoint.new(0, 0),
                NumberSequenceKeypoint.new(1, 1),
            }),
        }),
    })
    New("Frame", {
        Size = UDim2.fromScale(1, 1), BackgroundColor3 = Color3.new(0, 0, 0), ZIndex = 2, Parent = sv,
    }, {
        Corner(8),
        New("UIGradient", {
            Rotation = 90,
            Transparency = NumberSequence.new({
                NumberSequenceKeypoint.new(0, 1),
                NumberSequenceKeypoint.new(1, 0),
            }),
        }),
    })
    local svKnob = New("Frame", {
        AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(12, 12),
        BackgroundColor3 = Color3.new(1, 1, 1), ZIndex = 3, Parent = sv,
    }, { Corner(6), New("UIStroke", { Color = Color3.new(0, 0, 0), Thickness = 1.5, Transparency = 0.3 }) })

    local hue = New("Frame", {
        AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, 0, 1, 0), Size = UDim2.new(1, 0, 0, 18),
        Parent = body,
    }, { Corner(6), New("UIGradient", {
        Rotation = 0,
        Color = ColorSequence.new({
            ColorSequenceKeypoint.new(0,    Color3.fromRGB(255, 0, 0)),
            ColorSequenceKeypoint.new(0.17, Color3.fromRGB(255, 255, 0)),
            ColorSequenceKeypoint.new(0.33, Color3.fromRGB(0, 255, 0)),
            ColorSequenceKeypoint.new(0.5,  Color3.fromRGB(0, 255, 255)),
            ColorSequenceKeypoint.new(0.67, Color3.fromRGB(0, 0, 255)),
            ColorSequenceKeypoint.new(0.83, Color3.fromRGB(255, 0, 255)),
            ColorSequenceKeypoint.new(1,    Color3.fromRGB(255, 0, 0)),
        }),
    }) })
    local hueKnob = New("Frame", {
        AnchorPoint = Vector2.new(0.5, 0.5), Size = UDim2.fromOffset(5, 24),
        BackgroundColor3 = Color3.new(1, 1, 1), ZIndex = 2, Parent = hue,
    }, { Corner(2), New("UIStroke", { Color = Theme.Stroke, Thickness = 1 }) })

    local h, s, v = CFG[key]:ToHSV()
    local function apply()
        CFG[key] = Color3.fromHSV(h, s, v)
        chip.BackgroundColor3 = CFG[key]
        sv.BackgroundColor3 = Color3.fromHSV(h, 1, 1)
        svKnob.Position = UDim2.new(s, 0, 1 - v, 0)
        hueKnob.Position = UDim2.new(h, 0, 0.5, 0)
        if callback then callback(CFG[key]) end
    end

    local dragSV, dragH = false, false
    local function updSV(pos)
        if sv.AbsoluteSize.X <= 0 or sv.AbsoluteSize.Y <= 0 then return end
        s = math.clamp((pos.X - sv.AbsolutePosition.X) / sv.AbsoluteSize.X, 0, 1)
        v = 1 - math.clamp((pos.Y - sv.AbsolutePosition.Y) / sv.AbsoluteSize.Y, 0, 1)
        apply()
    end
    local function updH(pos)
        if hue.AbsoluteSize.X = 0.5 then
        fpsValue = fpsFrames / (os.clock() - fpsLast)
        fpsFrames, fpsLast = 0, os.clock()
    end
end)
local Wm = New("TextLabel", {
    Position = UDim2.fromOffset(12, 8), Size = UDim2.fromOffset(320, 20), BackgroundTransparency = 1,
    TextColor3 = Theme.TextDim, TextTransparency = 0.25, TextSize = 12,
    Font = Enum.Font.GothamMedium, TextXAlignment = Enum.TextXAlignment.Left, Parent = ScreenGui,
})
Bind(RunService.RenderStepped, function()
    Wm.Text = "NOVA · " .. math.floor(fpsValue + 0.5) .. " fps"
end)

--============================================================
-- FEATURES
--============================================================

local function getRoot(player)
    local c = player and player.Character
    if not c then return nil end
    return c:FindFirstChild("HumanoidRootPart") or c:FindFirstChild("UpperTorso") or c:FindFirstChild("Torso")
end

local function getHP(player)
    local c = player and player.Character
    if not c then return 0 end
    local hum = c:FindFirstChildOfClass("Humanoid")
    if hum then return hum.Health end
    local hp = c:GetAttribute("Health") or c:GetAttribute("HP")
    if typeof(hp) == "number" then return hp end
    return getRoot(player) and 100 or 0
end

local function alive(player) return getHP(player) > 0 end

--// TEAM
local roundTeam, mySpawnPoint, scanning = {}, nil, false

local ATTRIBUTE_KEYS = { "Team", "TeamId", "TeamID", "Side", "Faction" }
local function standardTeammate(a, b)
    if not a or not b then return false end
    if a.Team and b.Team then return a.Team == b.Team end
    if not a.Neutral and not b.Neutral and a.TeamColor and b.TeamColor then
        return a.TeamColor == b.TeamColor
    end
    for _, key in ipairs(ATTRIBUTE_KEYS) do
        local x, y = a:GetAttribute(key), b:GetAttribute(key)
        if x ~= nil and y ~= nil then return tostring(x) == tostring(y) end
    end
    return false
end

local function teammate(plr)
    if plr == LP then return true end
    if standardTeammate(LP, plr) then return true end
    return roundTeam[plr] == true
end

local function validTarget(plr)
    if plr == LP or not alive(plr) then return false end
    if CFG.TeamCheck and teammate(plr) then return false end
    return true
end

local function refreshCounter()
    if AlliesLabel then
        local n = 0
        for _ in pairs(roundTeam) do n += 1 end
        AlliesLabel.Text = tr("allies") .. ": " .. n .. (scanning and "  ·  …" or "")
    end
end

local function startScan(seconds)
    if scanning then return end
    scanning = true
    task.spawn(function()
        table.clear(roundTeam)
        local root = getRoot(LP)
        if root then mySpawnPoint = root.Position end
        local t0 = os.clock()
        while os.clock() - t0 < seconds do
            local mr = getRoot(LP)
            if mr then
                for _, plr in ipairs(Players:GetPlayers()) do
                    if plr ~= LP and not roundTeam[plr] and alive(plr) then
                        local r = getRoot(plr)
                        if r and (r.Position - mr.Position).Magnitude <= CFG.TeamRadius then
                            roundTeam[plr] = true
                        end
                    end
                end
            end
            task.wait(0.25)
        end
        scanning = false
        local n = 0
        for _ in pairs(roundTeam) do n += 1 end
        Notify(tr("sec_team"), tr("scan_done") .. n, 3)
        refreshCounter()
    end)
end

--// ESP
local ESP = {}
local ESPremove

local HLFolder = New("Folder", { Name = "NOVA_HL_" .. math.random(1000, 9999), Parent = workspace })

ESPremove = function(plr)
    local d = ESP[plr]
    if not d then return end
    pcall(function() d.Highlight:Destroy() end)
    pcall(function() d.HeadHL:Destroy() end)
    pcall(function() d.Box:Destroy() end)
    pcall(function() d.Gui:Destroy() end)
    ESP[plr] = nil
end

local function ensureESP(plr)
    if plr == LP then return end
    local char = plr.Character
    if not char then return end
    local ex = ESP[plr]
    if ex and ex.Char == char then return end
    if ex then ESPremove(plr) end
    local head = char:FindFirstChild("Head") or char:FindFirstChild("HumanoidRootPart")
    if not head then return end

    local hl = New("Highlight", {
        Adornee = char, DepthMode = Enum.HighlightDepthMode.AlwaysOnTop,
        FillTransparency = 0.75, OutlineTransparency = 0.1, Enabled = false, Parent = char,
    })
    local headHL = New("Highlight", {
        Adornee = head, DepthMode = Enum.HighlightDepthMode.AlwaysOnTop,
        FillTransparency = 0.85, OutlineTransparency = 0.05, Enabled = false, Parent = HLFolder,
    })
    local box = New("BoxHandleAdornment", {
        Adornee = head, AlwaysOnTop = true, ZIndex = 10, Size = head.Size,
        Transparency = 0.6, Visible = false, Parent = HLFolder,
    })
    local bill = New("BillboardGui", {
        Adornee = head, Size = UDim2.fromOffset(200, 40),
        StudsOffset = Vector3.new(0, 2.4, 0), AlwaysOnTop = true, Enabled = false, Parent = HLFolder,
    })
    local nameL = New("TextLabel", {
        Size = UDim2.new(1, 0, 0, 14), BackgroundTransparency = 1,
        Font = Enum.Font.GothamBold, TextSize = 13, TextStrokeTransparency = 0.3, Parent = bill,
    })
    local hpBg = New("Frame", {
        AnchorPoint = Vector2.new(0.5, 0), Position = UDim2.new(0.5, 0, 0, 17),
        Size = UDim2.new(1, -40, 0, 4), BackgroundColor3 = Color3.fromRGB(10, 10, 14),
        BackgroundTransparency = 0.25, Parent = bill,
    }, { Corner(2) })
    local hp = New("Frame", {
        AnchorPoint = Vector2.new(0, 1), Position = UDim2.new(0, 0, 1, 0),
        Size = UDim2.fromScale(1, 1), BackgroundColor3 = Theme.Green, Parent = hpBg,
    }, { Corner(2) })
    local distL = New("TextLabel", {
        Position = UDim2.new(0, 0, 0, 24), Size = UDim2.new(1, 0, 0, 12), BackgroundTransparency = 1,
        Font = Enum.Font.GothamMedium, TextSize = 11, TextColor3 = Theme.TextDim,
        TextStrokeTransparency = 0.3, Parent = bill,
    })
    ESP[plr] = { Char = char, Head = head, Highlight = hl, HeadHL = headHL, Box = box,
                 Gui = bill, NameL = nameL, Hp = hp, HpBg = hpBg, DistL = distL }
end

local function updateESP()
    local cam = workspace.CurrentCamera
    if not cam then return end
    for _, plr in ipairs(Players:GetPlayers()) do ensureESP(plr) end
    for plr, d in pairs(ESP) do
        local char = plr.Character
        if not char then
            ESPremove(plr)
        else
            local root = getRoot(plr)
            local dist = root and (root.Position - cam.CFrame.Position).Magnitude or math.huge
            local show = running and CFG.ESP and alive(plr)
                and (not CFG.TeamCheck or not teammate(plr))
                and dist  0.5 and Theme.Green
                    or hpv > 0.25 and Color3.fromRGB(255, 215, 60)
                    or Theme.Red
                d.DistL.Visible = CFG.Distance
                d.DistL.Text = math.floor(dist) .. (LANG == "ru" and " м" or " m")
            end
        end
    end
end

--// HEAD EXPAND — при активном Kill All расширяет головы валидных целей даже с выключенным тумблером
local originalHeads = {}

local function restoreOneHead(head)
    local o = originalHeads[head]
    if not o then return end
    originalHeads[head] = nil
    if head.Parent then
        pcall(function()
            head.Size = o.Size
            head.Transparency = o.Transparency
            head.CanCollide = o.CanCollide
            head.Massless = o.Massless
        end)
    end
end

local function restoreHeads()
    for head in pairs(originalHeads) do restoreOneHead(head) end
end

--// KILL ALL — состояние
local KillAll = { Active = false, holding = false, lastClick = 0, kills = 0, current = nil, lastHP = 0, aimed = false }

local function refreshKill()
    if KillLabel then
        KillLabel.Text = tr("killed") .. ": " .. KillAll.kills
    end
end

local function headPass()
    for _, plr in ipairs(Players:GetPlayers()) do
        if plr ~= LP then
            local char = plr.Character
            local head = char and char:FindFirstChild("Head")
            if head then
                local want = (CFG.HeadExpand or KillAll.Active) and validTarget(plr)
                if want then
                    if not originalHeads[head] then
                        originalHeads[head] = {
                            Size = head.Size, Transparency = head.Transparency,
                            CanCollide = head.CanCollide, Massless = head.Massless,
                        }
                    end
                    local sz = CFG.HeadSize
                    if KillAll.Active then sz = math.max(sz, 10) end
                    pcall(function()
                        head.Size = Vector3.new(sz, sz, sz)
                        head.Transparency = CFG.HeadTransparency
                        head.CanCollide = false
                        head.Massless = true
                    end)
                else
                    restoreOneHead(head)
                end
            end
        end
    end
end

--// FIRE INPUT — mouse1press при наличии, иначе VirtualUser
local function fireDown()
    if type(mouse1press) == "function" then
        pcall(mouse1press)
    else
        pcall(function()
            VirtualUser:CaptureController()
            VirtualUser:Button1Down(Vector2.new())
        end)
    end
end
local function fireUp()
    if type(mouse1release) == "function" then
        pcall(mouse1release)
    else
        pcall(function()
            VirtualUser:CaptureController()
            VirtualUser:Button1Up(Vector2.new())
        end)
    end
end
local function fireStop()
    if KillAll.holding then
        KillAll.holding = false
        fireUp()
    end
end

local VisParams = RaycastParams.new()
VisParams.FilterType = Enum.RaycastFilterType.Exclude
VisParams.IgnoreWater = true

local function headVisible(head)
    local cam = workspace.CurrentCamera
    if not cam then return false end
    local chars = {}
    for _, p in ipairs(Players:GetPlayers()) do
        if p.Character then table.insert(chars, p.Character) end
    end
    VisParams.FilterDescendantsInstances = chars
    local r = workspace:Raycast(cam.CFrame.Position, head.Position - cam.CFrame.Position, VisParams)
    return r == nil
end

local function collectTargets()
    local cam = workspace.CurrentCamera
    if not cam then return {} end
    local list = {}
    for _, plr in ipairs(Players:GetPlayers()) do
        if validTarget(plr) then
            local char = plr.Character
            local head = char and char:FindFirstChild("Head")
            if head then
                local root = getRoot(plr)
                local d = root and (root.Position - cam.CFrame.Position).Magnitude or math.huge
                table.insert(list, { Plr = plr, Head = head, Dist = d })
            end
        end
    end
    table.sort(list, function(a, b) return a.Dist < b.Dist end)
    return list
end

--// АИМ Kill All — после камеры игры, чтобы её контроллер не перезаписывал прицел
RunService:BindToRenderStep("nova_aim", Enum.RenderPriority.Camera.Value + 1, function()
    KillAll.aimed = false
    if not running or not KillAll.Active then
        fireStop()
        return
    end
    local cam = workspace.CurrentCamera
    if not cam then return end
    local hum = LP.Character and LP.Character:FindFirstChildOfClass("Humanoid")
    if not hum or hum.Health = CFG.FireDelay then
        KillAll.lastClick = now
        if KillAll.holding then
            KillAll.holding = false
            fireUp()
        else
            KillAll.holding = true
            fireDown()
        end
    end
end)

--// АНТИ-ОТДАЧА
-- слой 1: компенсация вращения камеры в кадрах БЕЗ движения мыши (отдача = поворот не от игрока)
-- слой 2: зануление NumberValue с recoil/kick в имени внутри PlayerScripts и персонажа
local Recoil = { lastLook = nil, userMoved = false }
Bind(UserInputService.InputChanged, function(input)
    if input.UserInputType == Enum.UserInputType.MouseMovement then
        Recoil.userMoved = true
    end
end)

RunService:BindToRenderStep("nova_recoil", Enum.RenderPriority.Camera.Value + 2, function()
    local cam = workspace.CurrentCamera
    if not cam then return end
    local cur = cam.CFrame.LookVector

    if not running or not CFG.NoRecoil or KillAll.aimed then
        Recoil.lastLook = cur
        Recoil.userMoved = false
        return
    end

    local last = Recoil.lastLook
    if not last or Recoil.userMoved then
        Recoil.lastLook = cur
        Recoil.userMoved = false
        return
    end

    local dot = math.clamp(last:Dot(cur), -1, 1)
    local angle = math.acos(dot)
    if angle > 0.0004 and angle  1e-6 then
            local corr = CFrame.fromAxisAngle(axis.Unit, -angle * (CFG.RecoilStrength / 100))
            cam.CFrame = corr * cam.CFrame
        end
    end
    Recoil.lastLook = cam.CFrame.LookVector
end)

task.spawn(function()
    while running do
        task.wait(0.5)
        if CFG.NoRecoil then
            local roots = {}
            local ps = LP:FindFirstChild("PlayerScripts")
            if ps then table.insert(roots, ps) end
            if LP.Character then table.insert(roots, LP.Character) end
            for _, root in ipairs(roots) do
                for _, inst in ipairs(root:GetDescendants()) do
                    if inst:IsA("NumberValue") or inst:IsA("IntValue") then
                        local n = inst.Name:lower()
                        if n:find("recoil", 1, true) or n:find("kick", 1, true) then
                            if inst.Value ~= 0 then
                                pcall(function() inst.Value = 0 end)
                            end
                        end
                    end
                end
            end
        end
    end
end)

--// TEAM HOOKS
Bind(LP.CharacterAdded, function()
    table.clear(roundTeam)
    refreshCounter()
    fireStop()
    task.delay(0.15, function() if running then startScan(5) end end)
end)

local function hookSpawns(plr)
    if plr == LP then return end
    Bind(plr.CharacterAdded, function(char)
        if scanning or not mySpawnPoint then return end
        local hrp = char:WaitForChild("HumanoidRootPart", 3)
        if hrp and (hrp.Position - mySpawnPoint).Magnitude = ap.X and mp.X = ap.Y and mp.Y  0 and -0.08 or 0.08), 0.6, 2.2)
            end
        end
    end)

    task.spawn(function() task.wait(0.25) load() end)
    Bind(LP.CharacterAdded, function()
        task.delay(0.8, function() if running then load() end end)
    end)

    Bind(RunService.RenderStepped, function()
        if not (running and ready) then
            mock.Visible = false
            return
        end
        if vp.Visible then updateCam() end

        -- демо ESP: живые цвета и тумблеры
        local show = CFG.ESP
        if prevBodyHL then
            prevBodyHL.Enabled = show and CFG.Highlight
            if show and CFG.Highlight then
                prevBodyHL.FillColor = CFG.ESPColor
                prevBodyHL.OutlineColor = CFG.ESPColor
            end
        end
        if prevHeadHL then
            prevHeadHL.Enabled = show and CFG.HeadBox
            if show and CFG.HeadBox then
                prevHeadHL.FillColor = CFG.HeadBoxColor
                prevHeadHL.OutlineColor = CFG.HeadBoxColor
            end
        end

        mock.Visible = show and previewHead ~= nil and vp.Visible
        if mock.Visible then
            mockName.Visible = CFG.Name
            mockName.TextColor3 = CFG.ESPColor
            mockHpBg.Visible = CFG.Health
            mockDist.Visible = CFG.Distance
            local hw = overlayHolder.AbsoluteSize.X
            local okP, p = pcall(function()
                return vcam:WorldToViewportPoint(previewHead.Position)
            end)
            if okP and typeof(p) == "Vector3" and hw > 0 then
                mock.Position = UDim2.fromOffset(
                    math.clamp(p.X, 92, hw - 92),
                    math.clamp(p.Y - 16, 42, 192))
            else
                mock.Visible = false
            end
        end
    end)
end

--============================================================
-- LOOPS
--============================================================

Bind(RunService.RenderStepped, updateESP)

local slowAcc = 0
Bind(RunService.Heartbeat, function(dt)
    slowAcc += dt
    if slowAcc < 0.3 then return end
    slowAcc = 0
    if not running then return end
    headPass()
    refreshCounter()
    refreshKill()

    -- счётчик убийств: текущая цель умерла под Kill All
    if KillAll.Active and KillAll.current then
        local hp = getHP(KillAll.current)
        if hp  0 then
            KillAll.kills += 1
            refreshKill()
        end
        KillAll.lastHP = hp
        if hp  0 then
            local vp = cam.ViewportSize
            out = p.X < 0 or p.Y  vp.X or (p.Y + s.Y) > vp.Y
        end
    end
    SetHome(out)
end)

homeClick.MouseButton1Click:Connect(function()
    if not Main.Visible then
        SetOpen(true)
    end
    TweenService:Create(Main, TweenInfo.new(0.55, Enum.EasingStyle.Back, Enum.EasingDirection.Out), {
        Position = UDim2.fromScale(0.5, 0.5),
    }):Play()
end)

Bind(UserInputService.InputBegan, function(input, gpe)
    if gpe then return end
    if input.KeyCode == CFG.GuiKey then SetOpen(not isOpen) end
    if input.KeyCode == Enum.KeyCode.Delete then Unload() end
end)

--// DRAG
do
    local dragging, dragStart, startPos = false, nil, nil
    Topbar.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            dragStart = input.Position
            startPos = Main.Position
            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then dragging = false end
            end)
        end
    end)
    Bind(UserInputService.InputChanged, function(input)
        if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
            local delta = input.Position - dragStart
            Main.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
        end
    end)
end

--// INIT
SelectTab(3)
refreshKill()
Notify("NOVA", tr("loaded"), 4)

Comments (0)

No comments yet. Be the first!