Back to Scripts
working SKINCHANGER

working SKINCHANGER

ScriptBlox
Free

Game: [CODE HALLOWEEN25] Combat Surf!

190 Views
0 Likes
0 Dislikes
Joyx

Joyx

offline

Features

-WORKING skin changer -Aimbot -Triggerbot -Esp

Tags

skinchanger combatsurf surf

Script Code

-- JOY MADE THIS SHITZ DONT STEAL
local TweenService = game:GetService('TweenService')
local RunService = game:GetService('RunService')
local TextService = game:GetService('TextService')

-- FUCKING WATERMARKZ
local watermark = Instance.new('ScreenGui', game:GetService('CoreGui'))
watermark.Name = 'WatermarkUI'
watermark.ResetOnSpawn = false
watermark.DisplayOrder = 9999

-- Create background elements
local background = Instance.new('Frame', watermark)
background.Size = UDim2.new(1, 0, 1, 0)
background.BackgroundColor3 = Color3.fromRGB(10, 10, 15)
background.BorderSizePixel = 0

-- Add gradient overlay
local gradient = Instance.new('UIGradient', background)
gradient.Color = ColorSequence.new({
    ColorSequenceKeypoint.new(0, Color3.fromRGB(15, 15, 25)),
    ColorSequenceKeypoint.new(1, Color3.fromRGB(10, 10, 20)),
})
gradient.Rotation = 45

-- Add subtle noise texture
local noise = Instance.new('ImageLabel', background)
noise.Size = UDim2.new(1, 0, 1, 0)
noise.BackgroundTransparency = 1
noise.Image = 'rbxassetid://8341723857' -- Subtle noise texture
noise.ImageTransparency = 0.8
noise.TileSize = UDim2.new(0, 200, 0, 200)

-- Add animated particles
local particles = Instance.new('Frame', background)
particles.Size = UDim2.new(1, 0, 1, 0)
particles.BackgroundTransparency = 1

-- Create particle effect
for i = 1, 30 do
    local particle = Instance.new('Frame', particles)
    particle.Size = UDim2.new(0, 2, 0, 2)
    particle.Position = UDim2.new(math.random(), 0, math.random(), 0)
    particle.BackgroundColor3 = Color3.fromRGB(80, 120, 255)
    particle.BorderSizePixel = 0
    Instance.new('UICorner', particle).CornerRadius = UDim.new(1, 0)

    -- Animate particles
    spawn(function()
        while particle.Parent do
            local duration = 2 + math.random() * 3
            local goalPos = UDim2.new(math.random(), 0, math.random(), 0)
            TweenService:Create(
                particle,
                TweenInfo.new(
                    duration,
                    Enum.EasingStyle.Sine,
                    Enum.EasingDirection.InOut
                ),
                {
                    Position = goalPos,
                    BackgroundTransparency = math.random(0.3, 0.7),
                }
            ):Play()
            wait(duration)
        end
    end)
end

-- Add animated grid lines
local grid = Instance.new('Frame', background)
grid.Size = UDim2.new(1, 0, 1, 0)
grid.BackgroundTransparency = 1

local function createGridLine(horizontal)
    local line = Instance.new('Frame', grid)
    line.BorderSizePixel = 0
    line.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
    line.BackgroundTransparency = 0.9

    if horizontal then
        line.Size = UDim2.new(1, 0, 0, 1)
        line.Position = UDim2.new(0, 0, math.random(), 0)
    else
        line.Size = UDim2.new(0, 1, 1, 0)
        line.Position = UDim2.new(math.random(), 0, 0, 0)
    end

    return line
end

-- Create grid lines
for i = 1, 8 do
    createGridLine(true)
    createGridLine(false)
end

-- Main container
local container = Instance.new('Frame', watermark)
container.AnchorPoint = Vector2.new(0.5, 0.5)
container.Position = UDim2.new(0.5, 0, 0.5, 0)
container.Size = UDim2.new(0.5, 0, 0, 0)
container.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
container.BackgroundTransparency = 1
container.ClipsDescendants = true

-- Add glass effect
local glass = Instance.new('Frame', container)
glass.Size = UDim2.new(1, 0, 1, 0)
glass.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
glass.BackgroundTransparency = 0.95
glass.BorderSizePixel = 0

-- Add corner radius
local corner = Instance.new('UICorner', container)
corner.CornerRadius = UDim.new(0, 16)

-- Add border
local border = Instance.new('UIStroke', container)
border.Color = Color3.fromRGB(80, 120, 255)
border.Thickness = 0
border.Transparency = 0.5

-- Add inner shadow
local shadow = Instance.new('ImageLabel', container)
shadow.Size = UDim2.new(1, 20, 1, 20)
shadow.Position = UDim2.new(0, -10, 0, -10)
shadow.BackgroundTransparency = 1
shadow.Image = 'rbxassetid://5554236805'
shadow.ImageColor3 = Color3.fromRGB(0, 0, 0)
shadow.ImageTransparency = 0.9
shadow.ScaleType = Enum.ScaleType.Slice
shadow.SliceCenter = Rect.new(10, 10, 118, 118)

-- Main text
local mainText = Instance.new('TextLabel', container)
mainText.AnchorPoint = Vector2.new(0.5, 0.5)
mainText.Position = UDim2.new(0.5, 0, 0.4, 0)
mainText.Size = UDim2.new(1, -40, 0, 80)
mainText.BackgroundTransparency = 1
mainText.Text = 'MADE BY JOY'
mainText.TextColor3 = Color3.fromRGB(255, 255, 255)
mainText.TextStrokeTransparency = 0.7
mainText.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
mainText.Font = Enum.Font.GothamBlack
mainText.TextSize = 42
mainText.TextTransparency = 1
mainText.TextXAlignment = Enum.TextXAlignment.Center

-- Sub text
local subText = mainText:Clone()
subText.Parent = container
subText.Position = UDim2.new(0.5, 0, 0.6, 0)
subText.Size = UDim2.new(1, -40, 0, 40)
subText.Text = 'If you need help DM me: lucxer8'
subText.TextSize = 20
subText.Font = Enum.Font.GothamMedium
subText.TextTransparency = 1

-- Add decorative elements
local line = Instance.new('Frame', container)
line.AnchorPoint = Vector2.new(0.5, 0.5)
line.Position = UDim2.new(0.5, 0, 0.55, 0)
line.Size = UDim2.new(0, 0, 0, 2)
line.BackgroundColor3 = Color3.fromRGB(80, 120, 255)
line.BorderSizePixel = 0

-- Animation sequence
local function animateIn()
    -- Fade in background
    TweenService
        :Create(background, TweenInfo.new(0.5), { BackgroundTransparency = 0 })
        :Play()

    -- Container animation
    local containerTween = TweenService:Create(
        container,
        TweenInfo.new(0.7, Enum.EasingStyle.Back, Enum.EasingDirection.Out),
        {
            Size = UDim2.new(0.5, 0, 0.35, 0),
            BackgroundTransparency = 0.05,
        }
    )
    containerTween:Play()

    -- Text fade in
    task.delay(0.3, function()
        TweenService
            :Create(mainText, TweenInfo.new(0.5), { TextTransparency = 0 })
            :Play()
        TweenService
            :Create(subText, TweenInfo.new(0.5), { TextTransparency = 0.2 })
            :Play()

        -- Line animation
        TweenService
            :Create(
                line,
                TweenInfo.new(
                    0.5,
                    Enum.EasingStyle.Quad,
                    Enum.EasingDirection.Out
                ),
                {
                    Size = UDim2.new(0.4, 0, 0, 2),
                    BackgroundTransparency = 0,
                }
            )
            :Play()

        -- Border pulse
        TweenService:Create(border, TweenInfo.new(0.3), { Thickness = 2 })
            :Play()
    end)
end

local function animateOut(callback)
    -- Fade out elements
    TweenService:Create(mainText, TweenInfo.new(0.3), { TextTransparency = 1 })
        :Play()
    TweenService:Create(subText, TweenInfo.new(0.3), { TextTransparency = 1 })
        :Play()
    TweenService
        :Create(line, TweenInfo.new(0.3), { BackgroundTransparency = 1 })
        :Play()
    TweenService:Create(border, TweenInfo.new(0.3), { Thickness = 0 }):Play()

    -- Container animation
    local containerTween = TweenService:Create(
        container,
        TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.In),
        {
            Size = UDim2.new(0.5, 0, 0, 0),
            BackgroundTransparency = 1,
        }
    )
    containerTween:Play()

    -- Fade out background
    TweenService
        :Create(background, TweenInfo.new(0.5), { BackgroundTransparency = 1 })
        :Play()

    -- Clean up
    task.delay(0.6, function()
        watermark:Destroy()
        if callback then
            callback()
        end
    end)
end

-- Start animation
animateIn()

-- Pause game while watermark is shown
RunService:Set3dRenderingEnabled(false)

-- Set up auto-close and cleanup
task.delay(4, function()
    animateOut(function()
        RunService:Set3dRenderingEnabled(true)
    end)
end)

-- Rest of your existing code starts here...
local Players = game:GetService('Players')
local UIS = game:GetService('UserInputService')
-- ONE FILE
local Players = game:GetService('Players')
local UIS = game:GetService('UserInputService')
local TS = game:GetService('TweenService')
local RS = game:GetService('RunService')
local Rep = game:GetService('ReplicatedStorage')
local VIM = game:GetService('VirtualInputManager')
local LP = Players.LocalPlayer
local PG = LP:WaitForChild('PlayerGui')
local Cam = workspace.CurrentCamera

-- Optional item db
local Items = nil
pcall(function()
    local M = Rep:FindFirstChild('BaseItems')
        or Rep:WaitForChild('BaseItems', 2)
    if M then
        local ok, res = pcall(require, M)
        if ok and res and res.BaseItems then
            Items = res.BaseItems
        end
    end
end)

local function ChangeKnifeModel(v)
    if Items and Items.Classic_Knife then
        Items.Classic_Knife.Model = v
    end
    return v
end

local function IdentifyGun(n)
    if n == 'v_Awp' or n == 'v_Awp2' then
        return 'AWP'
    elseif n == 'v_Deagle' then
        return 'Desert Eagle'
    elseif n == 'v_Karambit' or n == 'v_Karambit2' then
        return 'Karambit'
    elseif n == 'v_Glock' or n == 'v_Glock2' then
        return 'Glock'
    elseif n == 'v_Scythe' then
        return 'Scythe'
    elseif n == 'v_M9Bayo' then
        return 'M9 Bayonet'
    elseif n == 'v_Katana' or n == 'v_Katana2' then
        return 'Katana'
    elseif n == 'v_Butterfly' then
        return 'Butterfly'
    elseif n == 'v_AK47' then
        return 'AK-47'
    elseif n == 'v_Bayo' then
        return 'Bayonet'
    elseif n == 'v_Bowie' then
        return 'Bowie'
    elseif n == 'v_CombatKnife' or n == 'v_Combat' then
        return 'Combat Knife'
    end
end

local function ApplySkin(skinModel, targetModel)
    local m = targetModel or Cam:FindFirstChildOfClass('Model')
    if not m or not skinModel then
        return
    end
    local gun = m:FindFirstChild('Gun')
    if not gun then
        return
    end
    local ex = gun:FindFirstChild('NewSkins')
    if ex then
        ex:Destroy()
    end
    local folder = Instance.new('Folder')
    folder.Name = 'NewSkins'
    folder.Parent = gun
    local map = {}
    for _, d in ipairs(skinModel:GetDescendants()) do
        if d:IsA('MeshPart') then
            map[d.Name] = d
        end
    end
    for _, orig in ipairs(gun:GetDescendants()) do
        if orig:IsA('MeshPart') then
            local src = map[orig.Name]
            if src then
                local c = src:Clone()
                c.Name = orig.Name .. '_Skin'
                c.CFrame = orig.CFrame
                c.Size = orig.Size
                c.Anchored = false
                c.CanCollide = false
                c.Massless = true
                c.Parent = folder
                local w = Instance.new('WeldConstraint', c)
                w.Part0 = c
                w.Part1 = orig
                orig.Transparency = 1
            end
        end
    end
end

-- UI root
local SG = Instance.new('ScreenGui', PG)
SG.Name = 'AllInOneUI'
SG.ResetOnSpawn = false
SG.DisplayOrder = 9999
SG.IgnoreGuiInset = true
local Win = Instance.new('Frame', SG)
Win.AnchorPoint = Vector2.new(0.5, 0.5)
Win.Position = UDim2.new(0.5, 0, 0.5, 0)
Win.Size = UDim2.fromOffset(940, 560)
Win.BackgroundColor3 = Color3.fromRGB(20, 20, 22)
Instance.new('UICorner', Win).CornerRadius = UDim.new(0, 8)
Instance.new('UIStroke', Win).Transparency = 0.35
local TitleBar = Instance.new('Frame', Win)
TitleBar.Size = UDim2.new(1, 0, 0, 40)
TitleBar.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
Instance.new('UIStroke', TitleBar).Transparency = 0.4
local Title = Instance.new('TextLabel', TitleBar)
Title.BackgroundTransparency = 1
Title.Text = 'Skin Changer'
Title.Font = Enum.Font.GothamSemibold
Title.TextSize = 16
Title.TextColor3 = Color3.fromRGB(235, 235, 235)
Title.TextXAlignment = Enum.TextXAlignment.Left
Title.Position = UDim2.new(0, 14, 0, 0)
Title.Size = UDim2.new(1, -14, 1, 0)

-- drag
do
    local dragging = false
    local s
    local base
    TitleBar.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragging = true
            s = i.Position
            base = Vector2.new(Win.Position.X.Offset, Win.Position.Y.Offset)
            i.Changed:Connect(function()
                if i.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then
            local d = i.Position - s
            Win.Position = UDim2.new(0.5, base.X + d.X, 0.5, base.Y + d.Y)
        end
    end)
end

-- sidebar + pages
local Sidebar = Instance.new('Frame', Win)
Sidebar.Position = UDim2.new(0, 0, 0, 40)
Sidebar.Size = UDim2.new(0, 220, 1, -40)
Sidebar.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
Instance.new('UIStroke', Sidebar).Transparency = 0.4
local Nav = Instance.new('Frame', Sidebar)
Nav.Position = UDim2.new(0, 0, 0, 8)
Nav.Size = UDim2.new(1, 0, 1, -16)
Nav.BackgroundTransparency = 1
local NL = Instance.new('UIListLayout', Nav)
NL.Padding = UDim.new(0, 8)
NL.FillDirection = Enum.FillDirection.Vertical
NL.HorizontalAlignment = Enum.HorizontalAlignment.Center
local function NavBtn(t, sel)
    local b = Instance.new('TextButton', Nav)
    b.Size = UDim2.new(1, -20, 0, 32)
    b.AutoButtonColor = false
    b.Text = t
    b.TextSize = 14
    b.Font = Enum.Font.Gotham
    b.TextColor3 = Color3.fromRGB(230, 230, 230)
    b.BackgroundColor3 = sel and Color3.fromRGB(38, 38, 42)
        or Color3.fromRGB(30, 30, 34)
    Instance.new('UICorner', b).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', b).Transparency = 0.5
    return b
end
local BMain = NavBtn('Main', true)
local BAim = NavBtn('Aim', false)
local BVis = NavBtn('Visuals', false)
local BSet = NavBtn('Settings', false)

local function Card(t, p)
    local c = Instance.new('Frame', p)
    c.Size = UDim2.new(1, -20, 1, -20)
    c.Position = UDim2.new(0, 10, 0, 10)
    c.BackgroundColor3 = Color3.fromRGB(30, 30, 34)
    Instance.new('UICorner', c).CornerRadius = UDim.new(0, 8)
    Instance.new('UIStroke', c).Transparency = 0.45
    local h = Instance.new('TextLabel', c)
    h.BackgroundTransparency = 1
    h.Text = t
    h.Position = UDim2.new(0, 8, 0, 8)
    h.Size = UDim2.new(1, -16, 0, 24)
    h.Font = Enum.Font.GothamSemibold
    h.TextSize = 15
    h.TextColor3 = Color3.fromRGB(235, 235, 235)
    h.TextXAlignment = Enum.TextXAlignment.Left
    return c
end

local PageMain = Instance.new('Frame', Win)
PageMain.BackgroundTransparency = 1
PageMain.Position = UDim2.new(0, 220, 0, 40)
PageMain.Size = UDim2.new(1, -220, 1, -40)
local PageAim = Instance.new('Frame', Win)
PageAim.BackgroundTransparency = 1
PageAim.Position = PageMain.Position
PageAim.Size = PageMain.Size
PageAim.Visible = false
local PageVis = Instance.new('Frame', Win)
PageVis.BackgroundTransparency = 1
PageVis.Position = PageMain.Position
PageVis.Size = PageMain.Size
PageVis.Visible = false
local PageSet = Instance.new('Frame', Win)
PageSet.BackgroundTransparency = 1
PageSet.Position = PageMain.Position
PageSet.Size = PageMain.Size
PageSet.Visible = false

local function setSelected(b, s)
    TS:Create(
        b,
        TweenInfo.new(0.12),
        {
            BackgroundColor3 = s and Color3.fromRGB(38, 38, 42)
                or Color3.fromRGB(30, 30, 34),
        }
    ):Play()
end
local function Show(w)
    local m = (w == 'Main')
    local a = (w == 'Aim')
    local v = (w == 'Visuals')
    local s = (w == 'Settings')
    PageMain.Visible = m
    PageAim.Visible = a
    PageVis.Visible = v
    PageSet.Visible = s
    setSelected(BMain, m)
    setSelected(BAim, a)
    setSelected(BVis, v)
    setSelected(BSet, s)
end
BMain.MouseButton1Click:Connect(function()
    Show('Main')
end)
BAim.MouseButton1Click:Connect(function()
    Show('Aim')
end)
BVis.MouseButton1Click:Connect(function()
    Show('Visuals')
end)
BSet.MouseButton1Click:Connect(function()
    Show('Settings')
end)
Show('Main')

-- cursor control + enforcement
local function UpdateCursorForMenu()
    if Win.Visible then
        UIS.MouseIconEnabled = true
        UIS.MouseBehavior = Enum.MouseBehavior.Default
    else
        UIS.MouseIconEnabled = false
        UIS.MouseBehavior = Enum.MouseBehavior.LockCenter
    end
end
UpdateCursorForMenu()
RS.RenderStepped:Connect(function()
    if Win.Visible then
        if UIS.MouseBehavior ~= Enum.MouseBehavior.Default then
            UIS.MouseBehavior = Enum.MouseBehavior.Default
        end
        if UIS.MouseIconEnabled ~= true then
            UIS.MouseIconEnabled = true
        end
    else
        if UIS.MouseBehavior ~= Enum.MouseBehavior.LockCenter then
            UIS.MouseBehavior = Enum.MouseBehavior.LockCenter
        end
        if UIS.MouseIconEnabled ~= false then
            UIS.MouseIconEnabled = false
        end
    end
end)

-- Knife UI
local KnifeCard = Card('Knife Skins', PageMain)
local Cat = Instance.new('ScrollingFrame', KnifeCard)
Cat.Size = UDim2.new(0.45, -12, 1, -48)
Cat.Position = UDim2.new(0, 8, 0, 36)
Cat.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
Cat.ScrollBarThickness = 6
Instance.new('UICorner', Cat).CornerRadius = UDim.new(0, 6)
local CL = Instance.new('UIListLayout', Cat)
CL.Padding = UDim.new(0, 6)
local Pane = Instance.new('Frame', KnifeCard)
Pane.Size = UDim2.new(0.55, -12, 1, -48)
Pane.Position = UDim2.new(0.45, 16, 0, 36)
Pane.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
Instance.new('UICorner', Pane).CornerRadius = UDim.new(0, 6)
Instance.new('UIStroke', Pane).Transparency = 0.45
local Sel = Instance.new('TextLabel', Pane)
Sel.BackgroundTransparency = 1
Sel.Text = 'Selected: None'
Sel.Size = UDim2.new(1, -16, 0, 22)
Sel.Position = UDim2.new(0, 8, 0, 8)
Sel.Font = Enum.Font.Gotham
Sel.TextSize = 14
Sel.TextColor3 = Color3.fromRGB(220, 220, 225)
Sel.TextXAlignment = Enum.TextXAlignment.Left
local Apply = Instance.new('TextButton', Pane)
Apply.Text = 'Apply Skin'
Apply.Size = UDim2.new(0, 130, 0, 32)
Apply.Position = UDim2.new(0, 8, 1, -40)
Apply.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
Apply.TextColor3 = Color3.fromRGB(20, 20, 20)
Apply.Font = Enum.Font.GothamSemibold
Apply.TextSize = 14
Instance.new('UICorner', Apply).CornerRadius = UDim.new(0, 6)

local function FindFolder(opts)
    if not Rep:FindFirstChild('Models') then
        return nil
    end
    for _, n in ipairs(opts) do
        local f = Rep.Models:FindFirstChild(n)
        if f then
            return f
        end
    end
end

local BTFK_LIST = {
    'BALISONG_Riby',
    'Bali_rgb',
    'Btfk_Ak',
    'Btfk_Ak6ida',
    'Btfk_Alien',
    'Btfk_Ash',
    'Btfk_Bali',
    'Btfk_Blackout',
    'Btfk_CH',
    'Btfk_Cooled',
    'Btfk_Corrupt',
    'Btfk_Doppler',
    'Btfk_Eden',
    'Btfk_Elegance',
    'Btfk_Emerald',
    'Btfk_Fade',
    'Btfk_Ghost',
    'Btfk_Hellforge',
    'Btfk_Infect',
    'Btfk_Justice',
    'Btfk_Light',
    'Btfk_Saphire',
    'Btfk_Snow',
    'Btfk_Sus',
    'Btfk_Tropical',
    'Btfk_Vanilla',
    'Btfk_Waifu',
    'Butterfly_Bone',
    'Butterfly_Venom',
}
local BAYO_LIST = {
    'Bayonet_Amethyst',
    'Bayonet_Blackout',
    'Bayonet_Case_Hardened',
    'Bayonet_Cooled',
    'Bayonet_Corrupt',
    'Bayonet_Cream',
    'Bayonet_Doppler',
    'Bayonet_Doppler2',
    'Bayonet_Emerald',
    'Bayonet_Fade',
    'Bayonet_Galaxy',
    'Bayonet_Ghost',
    'Bayonet_Kitty',
    'Bayonet_Lore',
    'Bayonet_Pink',
    'Bayonet_Ruby',
    'Bayonet_Saphire',
    'Bayonet_Spider',
    'Bayonet_Sponge',
    'Bayonet_Sunset',
}
local M9_LIST = {
    'M9_Bayonet_Blackout',
    'M9_Bayonet_Case_Hardened',
    'M9_Bayonet_Cooled',
    'M9_Bayonet_Cream',
    'M9_Bayonet_Doppler',
    'M9_Bayonet_Doppler2',
    'M9_Bayonet_Emerald',
    'M9_Bayonet_Fade',
    'M9_Bayonet_Galaxy',
    'M9_Bayonet_Ghost',
    'M9_Bayonet_Gold',
    'M9_Bayonet_Hellforge',
    'M9_Bayonet_Lore',
    'M9_Bayonet_Midnight',
    'M9_Bayonet_Pink',
    'M9_Bayonet_Ruby',
    'M9_Bayonet_Saphire',
    'M9_Bayonet_Slither',
    'M9_Bayonet_Spider',
    'M9_Bayonet_Sunset',
    'M9_Bayonet_Tropical',
    'M9_Bayonet_Universal',
}
local KARAMBIT_LIST = {
    'Karambit_Candy',
    'Karambit_Case_Hardened',
    'Karambit_Cooled',
    'Karambit_Corrupt',
    'Karambit_Cream',
    'Karambit_Diamond',
    'Karambit_Doppler',
    'Karambit_Doppler2',
    'Karambit_Emerald',
    'Karambit_Fade',
    'Karambit_Festive',
    'Karambit_Galaxy',
    'Karambit_Ghost',
    'Karambit_Ghoul',
    'Karambit_Heaven',
    'Karambit_Hellforge',
    'Karambit_Hologram',
    'Karambit_Mist',
    'Karambit_Pink',
    'Karambit_Ruby',
    'Karambit_Sapphire',
}

local KnifeCats = {}
if Rep:FindFirstChild('Models') then
    table.insert(
        KnifeCats,
        {
            name = 'Butterfly Knife',
            modelPath = Rep.Models:FindFirstChild('v_Butterfly'),
            skinFolder = FindFolder({ 'BtfkSkins' }),
            skins = BTFK_LIST,
        }
    )
    table.insert(
        KnifeCats,
        {
            name = 'Bayonet',
            modelPath = Rep.Models:FindFirstChild('v_Bayo'),
            skinFolder = FindFolder({ 'BayoSkins' }),
            skins = BAYO_LIST,
        }
    )
    table.insert(
        KnifeCats,
        {
            name = 'M9 Bayonet',
            modelPath = Rep.Models:FindFirstChild('v_M9Bayo'),
            skinFolder = FindFolder({ 'M9BayoSkins', 'M9_BayoSkins' }),
            skins = M9_LIST,
        }
    )
    table.insert(
        KnifeCats,
        {
            name = 'Karambit',
            modelPath = Rep.Models:FindFirstChild('v_Karambit'),
            skinFolder = FindFolder({ 'KarambitSkins' }),
            skins = KARAMBIT_LIST,
        }
    )
end

local lastSelectedSkinModel = nil
local lastSelectedName = 'None'
local function Accordion(cat)
    local container = Instance.new('Frame', Cat)
    container.BackgroundColor3 = Color3.fromRGB(30, 30, 34)
    container.Size = UDim2.new(1, -10, 0, 38)
    Instance.new('UICorner', container).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', container).Transparency = 0.5
    local head = Instance.new('TextButton', container)
    head.BackgroundTransparency = 1
    head.Text = '  ' .. cat.name
    head.Size = UDim2.new(1, -8, 0, 38)
    head.Position = UDim2.new(0, 4, 0, 0)
    head.TextColor3 = Color3.fromRGB(230, 230, 230)
    head.Font = Enum.Font.GothamSemibold
    head.TextSize = 14
    head.AutoButtonColor = false
    local arrow = Instance.new('TextLabel', container)
    arrow.BackgroundTransparency = 1
    arrow.Text = '▶'
    arrow.Size = UDim2.new(0, 22, 0, 22)
    arrow.Position = UDim2.new(1, -24, 0, 8)
    arrow.TextColor3 = Color3.fromRGB(180, 180, 186)
    arrow.Font = Enum.Font.GothamBold
    arrow.TextSize = 14
    local body = Instance.new('ScrollingFrame', container)
    body.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
    body.Size = UDim2.new(1, -10, 0, 0)
    body.Position = UDim2.new(0, 5, 0, 38)
    body.Visible = false
    body.ScrollBarThickness = 6
    Instance.new('UICorner', body).CornerRadius = UDim.new(0, 6)
    local bl = Instance.new('UIListLayout', body)
    bl.Padding = UDim.new(0, 4)
    for _, skin in ipairs(cat.skins) do
        local b = Instance.new('TextButton', body)
        b.Text = '      ✦ ' .. skin
        b.TextColor3 = Color3.fromRGB(220, 220, 225)
        b.TextSize = 13
        b.Font = Enum.Font.Gotham
        b.AutoButtonColor = false
        b.BackgroundColor3 = Color3.fromRGB(34, 34, 38)
        b.Size = UDim2.new(1, -6, 0, 28)
        Instance.new('UICorner', b).CornerRadius = UDim.new(0, 6)
        b.MouseButton1Click:Connect(function()
            if not cat.skinFolder then
                return
            end
            local path = cat.skinFolder:FindFirstChild(skin)
            if path then
                local key = (cat.name == 'Butterfly Knife') and 'Butterfly'
                    or cat.name
                if key then
                    lastSelectedSkinModel = path
                    lastSelectedName = cat.name .. ' - ' .. skin
                    Sel.Text = 'Selected: ' .. lastSelectedName
                end
                if cat.modelPath then
                    ChangeKnifeModel(cat.modelPath)
                end
            else
                Sel.Text = 'Selected (missing): ' .. cat.name .. ' - ' .. skin
            end
        end)
    end
    head.MouseButton1Click:Connect(function()
        local open = not body.Visible
        arrow.Text = open and '▼' or '▶'
        body.Visible = true
        local tgt = open and math.min(#cat.skins * 30 + 8, 260) or 0
        TS
            :Create(
                body,
                TweenInfo.new(0.16),
                { Size = UDim2.new(1, -10, 0, tgt) }
            )
            :Play()
        container.Size = UDim2.new(1, -10, 0, open and (38 + tgt + 6) or 38)
        if not open then
            task.delay(0.16, function()
                body.Visible = false
            end)
        end
        task.defer(function()
            Cat.CanvasSize = UDim2.new(0, 0, 0, CL.AbsoluteContentSize.Y + 8)
        end)
    end)
end
for _, c in ipairs(KnifeCats) do
    Accordion(c)
end
Apply.MouseButton1Click:Connect(function()
    local vm = Cam:FindFirstChildOfClass('Model')
    if vm and lastSelectedSkinModel then
        ApplySkin(lastSelectedSkinModel, vm)
    end
end)

-- Aim tab
local AimCard = Card('Aim', PageAim)
local AimBody = Instance.new('Frame', AimCard)
AimBody.BackgroundTransparency = 1
AimBody.Size = UDim2.new(1, -16, 1, -40)
AimBody.Position = UDim2.new(0, 8, 0, 32)
local AL = Instance.new('UIListLayout', AimBody)
AL.Padding = UDim.new(0, 10)
local function Row(p, t)
    local r = Instance.new('Frame', p)
    r.Size = UDim2.new(1, 0, 0, 36)
    r.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
    Instance.new('UICorner', r).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', r).Transparency = 0.5
    local l = Instance.new('TextLabel', r)
    l.BackgroundTransparency = 1
    l.Text = t
    l.Size = UDim2.new(0.5, -10, 1, 0)
    l.Position = UDim2.new(0, 10, 0, 0)
    l.Font = Enum.Font.Gotham
    l.TextSize = 14
    l.TextColor3 = Color3.fromRGB(230, 230, 230)
    l.TextXAlignment = Enum.TextXAlignment.Left
    return r
end
local function Toggle(p, i)
    local b = Instance.new('TextButton', p)
    b.Size = UDim2.new(0, 50, 0, 28)
    b.Position = UDim2.new(1, -60, 0.5, -14)
    b.AutoButtonColor = false
    b.Text = i and 'ON' or 'OFF'
    b.Font = Enum.Font.GothamSemibold
    b.TextSize = 13
    b.TextColor3 = Color3.fromRGB(15, 15, 16)
    b.BackgroundColor3 = i and Color3.fromRGB(70, 180, 110)
        or Color3.fromRGB(46, 46, 50)
    Instance.new('UICorner', b).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', b).Transparency = 0.4
    local function set(v)
        b.Text = v and 'ON' or 'OFF'
        b.BackgroundColor3 = v and Color3.fromRGB(70, 180, 110)
            or Color3.fromRGB(46, 46, 50)
    end
    return b, set
end
local function Slider(p, minV, maxV, initV, w)
    local h = Instance.new('Frame', p)
    h.Size = UDim2.new(0, w or 220, 0, 28)
    h.Position = UDim2.new(1, -(w or 220) - 72, 0.5, -14)
    h.BackgroundTransparency = 1
    local bar = Instance.new('Frame', h)
    bar.Size = UDim2.new(1, 0, 0, 6)
    bar.Position = UDim2.new(0, 0, 0.5, -3)
    bar.BackgroundColor3 = Color3.fromRGB(38, 38, 42)
    Instance.new('UICorner', bar).CornerRadius = UDim.new(0, 3)
    Instance.new('UIStroke', bar).Transparency = 0.4
    local fill = Instance.new('Frame', bar)
    fill.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
    fill.Size = UDim2.new(0, 0, 1, 0)
    Instance.new('UICorner', fill).CornerRadius = UDim.new(0, 3)
    local knob = Instance.new('Frame', h)
    knob.Size = UDim2.new(0, 12, 0, 12)
    knob.Position = UDim2.new(0, 0, 0.5, -6)
    knob.BackgroundColor3 = Color3.fromRGB(235, 235, 240)
    Instance.new('UICorner', knob).CornerRadius = UDim.new(1, 0)
    local v = math.clamp(initV, minV, maxV)
    local function vis(x)
        local t = (x - minV) / (maxV - minV)
        fill.Size = UDim2.new(t, 0, 1, 0)
        knob.Position = UDim2.new(t, -6, 0.5, -6)
    end
    vis(v)
    local cb
    local drag = false
    local function upd(px)
        local rel = math.clamp(
            (px - bar.AbsolutePosition.X) / math.max(1, bar.AbsoluteSize.X),
            0,
            1
        )
        v = minV + rel * (maxV - minV)
        vis(v)
        if cb then
            cb(v)
        end
    end
    bar.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            drag = true
            upd(i.Position.X)
        end
    end)
    knob.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            drag = true
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if drag and i.UserInputType == Enum.UserInputType.MouseMovement then
            upd(i.Position.X)
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            drag = false
        end
    end)
    return h,
        function(x)
            v = math.clamp(x, minV, maxV)
            vis(v)
        end,
        function(f)
            cb = f
        end
end

-- Aim Assist
local aimEnabled = false
local aimBind = Enum.KeyCode.Q
local capturingAim = false
local aimHeld = false
local aimFov = 45
local drawFOV = false
local targetHead = nil
local aimWallcheck = true
local rAim = Row(AimBody, 'Aim Assist')
local tAim, setAim = Toggle(rAim, aimEnabled)
local bBind = Instance.new('TextButton', rAim)
bBind.Size = UDim2.new(0, 120, 0, 28)
bBind.Position = UDim2.new(1, -180, 0.5, -14)
bBind.AutoButtonColor = false
bBind.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
bBind.TextColor3 = Color3.fromRGB(20, 20, 20)
bBind.Text = aimBind.Name
bBind.Font = Enum.Font.GothamSemibold
bBind.TextSize = 13
Instance.new('UICorner', bBind).CornerRadius = UDim.new(0, 6)
tAim.MouseButton1Click:Connect(function()
    aimEnabled = not aimEnabled
    setAim(aimEnabled)
end)
bBind.MouseButton1Click:Connect(function()
    if capturingAim then
        return
    end
    capturingAim = true
    bBind.Text = 'Press key… (ESC)'
    bBind.BackgroundColor3 = Color3.fromRGB(235, 235, 240)
end)
local rFOV = Row(AimBody, 'FOV (deg)')
local fLbl = Instance.new('TextLabel', rFOV)
fLbl.BackgroundTransparency = 1
fLbl.Size = UDim2.new(0, 44, 1, 0)
fLbl.Position = UDim2.new(1, -44, 0, 0)
fLbl.Font = Enum.Font.Gotham
fLbl.TextSize = 13
fLbl.TextColor3 = Color3.fromRGB(200, 200, 205)
fLbl.Text = tostring(aimFov)
local _, _, onF = Slider(rFOV, 1, 180, aimFov, 220)
onF(function(v)
    aimFov = math.floor(v + 0.5)
    fLbl.Text = tostring(aimFov)
end)
local rDF = Row(AimBody, 'Draw FOV')
local tDF, setDF = Toggle(rDF, drawFOV)
local rWC = Row(AimBody, 'Wallcheck')
local tWC, setWC = Toggle(rWC, aimWallcheck)
tWC.MouseButton1Click:Connect(function()
    aimWallcheck = not aimWallcheck
    setWC(aimWallcheck)
end)

-- Triggerbot section (separate)
local triggerEnabled = false
local triggerDelay = 0.05
local rTB = Row(AimBody, 'Triggerbot')
local tTB, setTB = Toggle(rTB, triggerEnabled)
tTB.MouseButton1Click:Connect(function()
    triggerEnabled = not triggerEnabled
    setTB(triggerEnabled)
end)
local rTBD = Row(AimBody, 'TB Delay (s)')
local tbLab = Instance.new('TextLabel', rTBD)
tbLab.BackgroundTransparency = 1
tbLab.Size = UDim2.new(0, 60, 1, 0)
tbLab.Position = UDim2.new(1, -60, 0, 0)
tbLab.Font = Enum.Font.Gotham
tbLab.TextSize = 13
tbLab.TextColor3 = Color3.fromRGB(200, 200, 205)
tbLab.Text = string.format('%.2f', triggerDelay)
local _, _, onTBD = Slider(rTBD, 0, 0.5, triggerDelay, 220)
onTBD(function(v)
    triggerDelay = math.max(0, math.min(0.5, v))
    tbLab.Text = string.format('%.2f', triggerDelay)
end)

-- FOV circle helpers
local function FOVCircle()
    if _G.__FOV and _G.__FOV.Parent then
        return _G.__FOV
    end
    local root = Instance.new('Frame', SG)
    root.Name = 'FOV'
    root.AnchorPoint = Vector2.new(0.5, 0.5)
    root.Position = UDim2.new(0.5, 0, 0.5, 0)
    root.BackgroundTransparency = 1
    root.Visible = false
    root.ZIndex = 100000
    local c = Instance.new('Frame', root)
    c.BackgroundTransparency = 1
    c.Size = UDim2.new(1, 0, 1, 0)
    Instance.new('UICorner', c).CornerRadius = UDim.new(1, 0)
    local s = Instance.new('UIStroke', c)
    s.Thickness = 1
    s.Color = Color3.fromRGB(120, 180, 255)
    s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
    _G.__FOV = root
    return root
end
local function GetFovRadiusPx()
    local vp = Cam.ViewportSize
    local r = (
        math.tan(math.rad(aimFov / 2)) / math.tan(math.rad(Cam.FieldOfView / 2))
    ) * (vp.Y * 0.5)
    return math.clamp(r, 2, math.min(vp.X, vp.Y) * 0.5 - 2)
end
local function UpdateFOV()
    if not drawFOV then
        if _G.__FOV then
            _G.__FOV.Visible = false
        end
        return
    end
    local g = FOVCircle()
    local r = GetFovRadiusPx()
    g.Size = UDim2.fromOffset(math.floor(r * 2 + 0.5), math.floor(r * 2 + 0.5))
    g.Visible = true
end
tDF.MouseButton1Click:Connect(function()
    drawFOV = not drawFOV
    setDF(drawFOV)
    UpdateFOV()
end)
SG:GetPropertyChangedSignal('AbsoluteSize'):Connect(UpdateFOV)
Cam:GetPropertyChangedSignal('FieldOfView'):Connect(UpdateFOV)

-- Settings
local SetCard = Card('Settings', PageSet)
local SetBody = Instance.new('Frame', SetCard)
SetBody.BackgroundTransparency = 1
SetBody.Size = UDim2.new(1, -16, 1, -40)
SetBody.Position = UDim2.new(0, 8, 0, 32)
local SL = Instance.new('UIListLayout', SetBody)
SL.Padding = UDim.new(0, 10)
local function SRow(t)
    local r = Instance.new('Frame', SetBody)
    r.Size = UDim2.new(1, 0, 0, 36)
    r.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
    Instance.new('UICorner', r).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', r).Transparency = 0.5
    local l = Instance.new('TextLabel', r)
    l.BackgroundTransparency = 1
    l.Text = t
    l.Size = UDim2.new(0.5, -10, 1, 0)
    l.Position = UDim2.new(0, 10, 0, 0)
    l.Font = Enum.Font.Gotham
    l.TextSize = 14
    l.TextColor3 = Color3.fromRGB(230, 230, 230)
    l.TextXAlignment = Enum.TextXAlignment.Left
    return r
end
local menuKey = Enum.KeyCode.F8
local menuEnabled = true
local capturingMenu = false
local menuDeb = false
local rME = SRow('Enable Menu Key')
local tME, setME = Toggle(rME, menuEnabled)
tME.MouseButton1Click:Connect(function()
    menuEnabled = not menuEnabled
    setME(menuEnabled)
end)
local rMB = SRow('Menu Bind')
local bMB = Instance.new('TextButton', rMB)
bMB.Size = UDim2.new(0, 120, 0, 28)
bMB.Position = UDim2.new(1, -130, 0.5, -14)
bMB.AutoButtonColor = false
bMB.Text = menuKey.Name
bMB.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
bMB.TextColor3 = Color3.fromRGB(20, 20, 20)
bMB.Font = Enum.Font.GothamSemibold
bMB.TextSize = 13
Instance.new('UICorner', bMB).CornerRadius = UDim.new(0, 6)
bMB.MouseButton1Click:Connect(function()
    if capturingMenu then
        return
    end
    capturingMenu = true
    bMB.Text = 'Press key… (ESC)'
    bMB.BackgroundColor3 = Color3.fromRGB(235, 235, 240)
end)

-- Visuals (scroll + color pickers)
local VisCard = Card('Visuals', PageVis)
local VisScroll = Instance.new('ScrollingFrame', VisCard)
VisScroll.BackgroundTransparency = 1
VisScroll.Size = UDim2.new(1, -16, 1, -40)
VisScroll.Position = UDim2.new(0, 8, 0, 32)
VisScroll.ScrollBarThickness = 6
local VL = Instance.new('UIListLayout', VisScroll)
VL.Padding = UDim.new(0, 10)
local function RecalcCanvas()
    VisScroll.CanvasSize = UDim2.new(0, 0, 0, VL.AbsoluteContentSize.Y + 8)
end
VL:GetPropertyChangedSignal('AbsoluteContentSize'):Connect(RecalcCanvas)

local function VRow(t)
    local r = Instance.new('Frame', VisScroll)
    r.Size = UDim2.new(1, 0, 0, 36)
    r.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
    Instance.new('UICorner', r).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', r).Transparency = 0.5
    local l = Instance.new('TextLabel', r)
    l.BackgroundTransparency = 1
    l.Text = t
    l.Size = UDim2.new(0.5, -10, 1, 0)
    l.Position = UDim2.new(0, 10, 0, 0)
    l.Font = Enum.Font.Gotham
    l.TextSize = 14
    l.TextColor3 = Color3.fromRGB(230, 230, 230)
    l.TextXAlignment = Enum.TextXAlignment.Left
    return r
end
local function HSVtoRGB(h, s, v)
    local i = math.floor(h * 6) % 6
    local f = h * 6 - i
    local p = v * (1 - s)
    local q = v * (1 - f * s)
    local t = v * (1 - (1 - f) * s)
    if i == 0 then
        return Color3.new(v, t, p)
    elseif i == 1 then
        return Color3.new(q, v, p)
    elseif i == 2 then
        return Color3.new(p, v, t)
    elseif i == 3 then
        return Color3.new(p, q, v)
    elseif i == 4 then
        return Color3.new(t, p, v)
    else
        return Color3.new(v, p, q)
    end
end
local function RGBtoHSV(c)
    local r, g, b = c.R, c.G, c.B
    local maxv = math.max(r, g, b)
    local minv = math.min(r, g, b)
    local d = maxv - minv
    local h = 0
    local s = (maxv == 0) and 0 or d / maxv
    if d ~= 0 then
        if maxv == r then
            h = (g - b) / d + (g < b and 6 or 0)
        elseif maxv == g then
            h = (b - r) / d + 2
        else
            h = (r - g) / d + 4
        end
        h = h / 6
    end
    return h, s, maxv
end
local function CollapsiblePicker(title, initialColor, initialAlpha, onChanged)
    local header = VRow(title)
    local preview = Instance.new('TextButton', header)
    preview.AutoButtonColor = false
    preview.Text = ''
    preview.Size = UDim2.new(0, 30, 0, 22)
    preview.Position = UDim2.new(1, -40, 0.5, -11)
    preview.BackgroundColor3 = initialColor
    preview.BorderSizePixel = 1
    preview.BorderColor3 = Color3.fromRGB(60, 60, 64)
    Instance.new('UICorner', preview).CornerRadius = UDim.new(0, 4)
    local expand = Instance.new('TextLabel', header)
    expand.BackgroundTransparency = 1
    expand.Text = '▶'
    expand.Size = UDim2.new(0, 18, 0, 18)
    expand.Position = UDim2.new(1, -76, 0.5, -9)
    expand.TextColor3 = Color3.fromRGB(200, 200, 205)
    expand.Font = Enum.Font.GothamBold
    expand.TextSize = 14
    local body = Instance.new('Frame', VisScroll)
    body.Size = UDim2.new(1, 0, 0, 0)
    body.BackgroundColor3 = Color3.fromRGB(26, 26, 28)
    body.ClipsDescendants = true
    Instance.new('UICorner', body).CornerRadius = UDim.new(0, 6)
    Instance.new('UIStroke', body).Transparency = 0.5
    local sv = Instance.new('Frame', body)
    sv.Size = UDim2.new(0, 140, 0, 140)
    sv.Position = UDim2.new(0, 12, 0, 12)
    sv.BorderSizePixel = 1
    sv.BorderColor3 = Color3.fromRGB(40, 40, 44)
    local hueBase = Instance.new('Frame', sv)
    hueBase.Size = UDim2.new(1, 0, 1, 0)
    hueBase.BackgroundColor3 = initialColor
    local gW = Instance.new('UIGradient', hueBase)
    gW.Color = ColorSequence.new(Color3.new(1, 1, 1), Color3.new(1, 1, 1))
    gW.Transparency = NumberSequence.new({
        NumberSequenceKeypoint.new(0, 0),
        NumberSequenceKeypoint.new(1, 1),
    })
    local gB = Instance.new('UIGradient', hueBase)
    gB.Rotation = 90
    gB.Color = ColorSequence.new(Color3.new(0, 0, 0), Color3.new(0, 0, 0))
    gB.Transparency = NumberSequence.new({
        NumberSequenceKeypoint.new(0, 1),
        NumberSequenceKeypoint.new(1, 0),
    })
    local svCur = Instance.new('Frame', sv)
    svCur.Size = UDim2.fromOffset(6, 6)
    svCur.AnchorPoint = Vector2.new(0.5, 0.5)
    svCur.BackgroundColor3 = Color3.new(1, 1, 1)
    svCur.BorderSizePixel = 0
    local hue = Instance.new('Frame', body)
    hue.Size = UDim2.new(0, 18, 0, 140)
    hue.Position = UDim2.new(0, 160, 0, 12)
    hue.BorderSizePixel = 1
    hue.BorderColor3 = Color3.fromRGB(40, 40, 44)
    local hueG = Instance.new('UIGradient', hue)
    hueG.Rotation = 90
    hueG.Color = ColorSequence.new({
        ColorSequenceKeypoint.new(0 / 6, Color3.fromRGB(255, 0, 0)),
        ColorSequenceKeypoint.new(1 / 6, Color3.fromRGB(255, 255, 0)),
        ColorSequenceKeypoint.new(2 / 6, Color3.fromRGB(0, 255, 0)),
        ColorSequenceKeypoint.new(3 / 6, Color3.fromRGB(0, 255, 255)),
        ColorSequenceKeypoint.new(4 / 6, Color3.fromRGB(0, 0, 255)),
        ColorSequenceKeypoint.new(5 / 6, Color3.fromRGB(255, 0, 255)),
        ColorSequenceKeypoint.new(6 / 6, Color3.fromRGB(255, 0, 0)),
    })
    local hueCur = Instance.new('Frame', hue)
    hueCur.Size = UDim2.new(1, 0, 0, 2)
    hueCur.BackgroundColor3 = Color3.new(1, 1, 1)
    hueCur.BorderSizePixel = 0
    local aBar = Instance.new('Frame', body)
    aBar.Size = UDim2.new(0, 206, 0, 14)
    aBar.Position = UDim2.new(0, 12, 0, 160)
    aBar.BorderSizePixel = 1
    aBar.BorderColor3 = Color3.fromRGB(40, 40, 44)
    local aGrad = Instance.new('UIGradient', aBar)
    aGrad.Rotation = 0
    local aCur = Instance.new('Frame', aBar)
    aCur.Size = UDim2.new(0, 2, 1, 0)
    aCur.BackgroundColor3 = Color3.new(1, 1, 1)
    aCur.BorderSizePixel = 0
    local h, s, v = RGBtoHSV(initialColor)
    local a = math.clamp(initialAlpha or 1, 0, 1)
    local function updAG()
        local col = HSVtoRGB(h, s, v)
        aGrad.Color = ColorSequence.new(col, col)
        aGrad.Transparency = NumberSequence.new({
            NumberSequenceKeypoint.new(0, 1),
            NumberSequenceKeypoint.new(1, 0),
        })
    end
    local function apply()
        local col = HSVtoRGB(h, s, v)
        hueBase.BackgroundColor3 = HSVtoRGB(h, 1, 1)
        preview.BackgroundColor3 = col
        if sv.AbsoluteSize.X > 0 then
            svCur.Position = UDim2.new(s, 0, 1 - v, 0)
        end
        if hue.AbsoluteSize.Y > 0 then
            hueCur.Position = UDim2.new(0, 0, 1 - h, 0)
        end
        if aBar.AbsoluteSize.X > 0 then
            aCur.Position = UDim2.new(a, 0, 0, 0)
        end
        updAG()
        if onChanged then
            onChanged(col, a)
        end
    end
    apply()
    local dragSV = false
    sv.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragSV = true
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragSV = false
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if dragSV and i.UserInputType == Enum.UserInputType.MouseMovement then
            local x = math.clamp(
                (i.Position.X - sv.AbsolutePosition.X)
                    / math.max(1, sv.AbsoluteSize.X),
                0,
                1
            )
            local y = math.clamp(
                (i.Position.Y - sv.AbsolutePosition.Y)
                    / math.max(1, sv.AbsoluteSize.Y),
                0,
                1
            )
            s = x
            v = 1 - y
            apply()
        end
    end)
    local dragH = false
    hue.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragH = true
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if dragH and i.UserInputType == Enum.UserInputType.MouseMovement then
            local y = math.clamp(
                (i.Position.Y - hue.AbsolutePosition.Y)
                    / math.max(1, hue.AbsoluteSize.Y),
                0,
                1
            )
            h = 1 - y
            apply()
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragH = false
        end
    end)
    local dragA = false
    aBar.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragA = true
        end
    end)
    UIS.InputChanged:Connect(function(i)
        if dragA and i.UserInputType == Enum.UserInputType.MouseMovement then
            local x = math.clamp(
                (i.Position.X - aBar.AbsolutePosition.X)
                    / math.max(1, aBar.AbsoluteSize.X),
                0,
                1
            )
            a = x
            apply()
        end
    end)
    UIS.InputEnded:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            dragA = false
        end
    end)
    local open = false
    local function ToggleBody()
        open = not open
        expand.Text = open and '▼' or '▶'
        local t = open and 186 or 0
        TS:Create(body, TweenInfo.new(0.16), { Size = UDim2.new(1, 0, 0, t) })
            :Play()
        task.delay(0.17, RecalcCanvas)
    end
    preview.MouseButton1Click:Connect(ToggleBody)
    expand.InputBegan:Connect(function(i)
        if i.UserInputType == Enum.UserInputType.MouseButton1 then
            ToggleBody()
        end
    end)
    return {
        set = function(c, aa)
            local hh, ss, vv = RGBtoHSV(c)
            h, s, v = hh, ss, vv
            a = math.clamp(aa or 1, 0, 1)
            apply()
        end,
    }
end

-- ESP config + controls
local ESP = {
    enabled = true,
    teamCheck = true,
    maxDist = 1500,
    boxes = true,
    boxColor = Color3.fromRGB(0, 255, 120),
    boxAlpha = 1,
    boxThick = 1,
    tracers = true,
    tracerColor = Color3.fromRGB(255, 255, 255),
    tracerAlpha = 1,
    tracerThick = 1,
    names = true,
    nameColor = Color3.fromRGB(255, 255, 255),
    nameAlpha = 1,
    health = true,
}
do
    local r = VRow('Enable ESP')
    local t, set = Toggle(r, ESP.enabled)
    t.MouseButton1Click:Connect(function()
        ESP.enabled = not ESP.enabled
        set(ESP.enabled)
    end)
end
do
    local r = VRow('Team Check')
    local t, set = Toggle(r, ESP.teamCheck)
    t.MouseButton1Click:Connect(function()
        ESP.teamCheck = not ESP.teamCheck
        set(ESP.teamCheck)
    end)
end
do
    local r = VRow('Max Distance')
    local lab = Instance.new('TextLabel', r)
    lab.BackgroundTransparency = 1
    lab.Size = UDim2.new(0, 60, 1, 0)
    lab.Position = UDim2.new(1, -60, 0, 0)
    lab.Font = Enum.Font.Gotham
    lab.TextSize = 13
    lab.TextColor3 = Color3.fromRGB(200, 200, 205)
    lab.Text = tostring(ESP.maxDist)
    local _, _, onS = Slider(r, 100, 5000, ESP.maxDist, 260)
    onS(function(v)
        ESP.maxDist = math.floor(v + 0.5)
        lab.Text = tostring(ESP.maxDist)
    end)
end
do
    local r = VRow('Boxes')
    local t, setT = Toggle(r, ESP.boxes)
    t.Position = UDim2.new(1, -60, 0.5, -14)
    t.MouseButton1Click:Connect(function()
        ESP.boxes = not ESP.boxes
        setT(ESP.boxes)
    end)
    local sl, _, on = Slider(r, 1, 3, ESP.boxThick, 120)
    sl.Position = UDim2.new(1, -60 - 12 - 120, 0.5, -14)
    on(function(v)
        ESP.boxThick = math.floor(v + 0.5)
    end)
    CollapsiblePicker('Box Color', ESP.boxColor, ESP.boxAlpha, function(c, a)
        ESP.boxColor = c
        ESP.boxAlpha = a
    end)
end
do
    local r = VRow('Tracers')
    local t, setT = Toggle(r, ESP.tracers)
    t.Position = UDim2.new(1, -60, 0.5, -14)
    t.MouseButton1Click:Connect(function()
        ESP.tracers = not ESP.tracers
        setT(ESP.tracers)
    end)
    local sl, _, on = Slider(r, 1, 3, ESP.tracerThick, 120)
    sl.Position = UDim2.new(1, -60 - 12 - 120, 0.5, -14)
    on(function(v)
        ESP.tracerThick = math.floor(v + 0.5)
    end)
    CollapsiblePicker(
        'Tracer Color',
        ESP.tracerColor,
        ESP.tracerAlpha,
        function(c, a)
            ESP.tracerColor = c
            ESP.tracerAlpha = a
        end
    )
end
do
    local r = VRow('Names')
    local t, setT = Toggle(r, ESP.names)
    t.Position = UDim2.new(1, -60, 0.5, -14)
    t.MouseButton1Click:Connect(function()
        ESP.names = not ESP.names
        setT(ESP.names)
    end)
    CollapsiblePicker('Name Color', ESP.nameColor, ESP.nameAlpha, function(c, a)
        ESP.nameColor = c
        ESP.nameAlpha = a
    end)
end
do
    local r = VRow('Health Bar')
    local t, setT = Toggle(r, ESP.health)
    t.MouseButton1Click:Connect(function()
        ESP.health = not ESP.health
        setT(ESP.health)
    end)
end
task.defer(RecalcCanvas)

-- Auto-apply on viewmodel
pcall(function()
    if Rep:FindFirstChild('Models') then
        ChangeKnifeModel(Rep.Models:FindFirstChild('v_Butterfly'))
    end
end)
Cam.ChildAdded:Connect(function(m)
    if not m:IsA('Model') then
        return
    end
    local g = IdentifyGun(m.Name)
    if not g then
        return
    end
    local Sk = ({
        ['AWP'] = Inv['AWP'],
        ['Karambit'] = Inv['Karambit'],
        ['Butterfly'] = Inv['Butterfly'],
        ['Bayonet'] = Inv['Bayonet'],
        ['M9 Bayonet'] = Inv['M9 Bayonet'],
        ['Bowie'] = Inv['Bowie'],
        ['Combat Knife'] = Inv['Combat Knife'],
        ['AK-47'] = Inv['AK-47'],
    })[g]
    if not Sk or not Sk.Skins then
        return
    end
    if m:GetAttribute('mapped') then
        return
    end
    m:SetAttribute('mapped', true)
    ApplySkin(Sk.Skins, m)
end)

-- Input handling
UIS.InputBegan:Connect(function(i, gp)
    if capturingMenu then
        if gp then
            return
        end
        if i.KeyCode == Enum.KeyCode.Escape then
            capturingMenu = false
            bMB.Text = menuKey.Name
            bMB.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
            return
        end
        if
            i.UserInputType == Enum.UserInputType.Keyboard
            and i.KeyCode ~= Enum.KeyCode.Unknown
        then
            menuKey = i.KeyCode
            capturingMenu = false
            bMB.Text = menuKey.Name
            bMB.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
        end
        return
    end
    if capturingAim then
        if gp then
            return
        end
        if i.KeyCode == Enum.KeyCode.Escape then
            capturingAim = false
            bBind.Text = aimBind.Name
            bBind.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
            return
        end
        if
            i.UserInputType == Enum.UserInputType.Keyboard
            and i.KeyCode ~= Enum.KeyCode.Unknown
        then
            aimBind = i.KeyCode
            capturingAim = false
            bBind.Text = aimBind.Name
            bBind.BackgroundColor3 = Color3.fromRGB(210, 210, 215)
        end
        return
    end
    if gp or UIS:GetFocusedTextBox() then
        return
    end
    if
        menuEnabled
        and i.UserInputType == Enum.UserInputType.Keyboard
        and i.KeyCode == menuKey
    then
        if menuDeb then
            return
        end
        menuDeb = true
        Win.Visible = not Win.Visible
        UpdateCursorForMenu()
        task.delay(0.15, function()
            menuDeb = false
        end)
        return
    end
    if
        i.UserInputType == Enum.UserInputType.Keyboard
        and i.KeyCode == aimBind
    then
        aimHeld = true
    end
end)
UIS.InputEnded:Connect(function(i)
    if
        i.UserInputType == Enum.UserInputType.Keyboard
        and i.KeyCode == aimBind
    then
        aimHeld = false
        targetHead = nil
    end
end)

-- Aimbot helpers
local function GetFovRadiusPxA()
    local vp = Cam.ViewportSize
    return (
        math.tan(math.rad(aimFov / 2)) / math.tan(math.rad(Cam.FieldOfView / 2))
    ) * (vp.Y * 0.5)
end
local function GetBestTarget2D()
    local vp = Cam.ViewportSize
    local center = Vector2.new(vp.X / 2, vp.Y / 2)
    local radius =
        math.clamp(GetFovRadiusPxA(), 2, math.min(vp.X, vp.Y) * 0.5 - 2)
    local best, bestScore = nil, math.huge
    for _, pl in ipairs(Players:GetPlayers()) do
        if pl ~= LP then
            if
                not (ESP.teamCheck and LP.Team ~= nil and pl.Team == LP.Team)
            then
                local ch = pl.Character
                local head = ch and ch:FindFirstChild('Head')
                local hum = ch and ch:FindFirstChildOfClass('Humanoid')
                if head and hum and hum.Health > 0 then
                    local v3, on = Cam:WorldToViewportPoint(
                        head.Position + Vector3.new(0, 0.1, 0)
                    )
                    if on and v3.Z > 0 then
                        local pos2 = Vector2.new(v3.X, v3.Y)
                        local d = (pos2 - center).Magnitude
                        if d <= radius then
                            local score = d + (v3.Z * 0.01)
                            if score < bestScore then
                                best = head
                                bestScore = score
                            end
                        end
                    end
                end
            end
        end
    end
    return best
end
local function Visible(head)
    local origin = Cam.CFrame.Position
    local dir = (head.Position - origin)
    local params = RaycastParams.new()
    params.FilterType = Enum.RaycastFilterType.Exclude
    params.FilterDescendantsInstances = { LP.Character }
    local r = workspace:Raycast(origin, dir, params)
    if not r then
        return true
    end
    return (
        r.Instance
        and (r.Instance:IsDescendantOf(head.Parent) or r.Instance == head)
    )
end

-- Triggerbot helpers
local mouse = LP:GetMouse()
local tbDebounce = false
local function FireClick()
    local loc = UIS:GetMouseLocation()
    VIM:SendMouseButtonEvent(loc.X, loc.Y, 0, true, game, false)
    task.wait(0.03)
    VIM:SendMouseButtonEvent(loc.X, loc.Y, 0, false, game, false)
end
local function OwningPlayerFromPart(part)
    if not part or not part:IsA('BasePart') then
        return nil
    end
    local model = part:FindFirstAncestorOfClass('Model')
    if not model then
        return nil
    end
    local hum = model:FindFirstChildOfClass('Humanoid')
    if not hum then
        return nil
    end
    local pl = Players:GetPlayerFromCharacter(model)
    if not pl or pl == LP then
        return nil
    end
    if hum.Health <= 0 then
        return nil
    end
    return pl
end

-- ESP drawing nodes
local DrawFolder = Instance.new('Folder', SG)
DrawFolder.Name = 'ESP'
local Nodes = {}
local function NewNodes(pl)
    local g = {}
    local box = Instance.new('Frame', DrawFolder)
    box.BackgroundTransparency = 1
    box.Visible = false
    box.ZIndex = 5000
    local stroke = Instance.new('UIStroke', box)
    stroke.ApplyStrokeMode = Enum.ApplyStrokeMode.Border
    local tracer = Instance.new('Frame', DrawFolder)
    tracer.BorderSizePixel = 0
    tracer.Visible = false
    tracer.ZIndex = 4999
    local name = Instance.new('TextLabel', DrawFolder)
    name.BackgroundTransparency = 1
    name.Visible = false
    name.ZIndex = 5001
    name.Font = Enum.Font.GothamSemibold
    name.TextSize = 13
    local hbg = Instance.new('Frame', DrawFolder)
    hbg.BorderSizePixel = 0
    hbg.Visible = false
    hbg.ZIndex = 5000
    hbg.BackgroundColor3 = Color3.fromRGB(24, 24, 24)
    local hf = Instance.new('Frame', hbg)
    hf.BorderSizePixel = 0
    hf.ZIndex = 5001
    g.Box = box
    g.Stroke = stroke
    g.Tracer = tracer
    g.Name = name
    g.HBG = hbg
    g.HF = hf
    Nodes[pl] = g
end
local function DelNodes(pl)
    local g = Nodes[pl]
    if not g then
        return
    end
    for _, o in pairs(g) do
        if typeof(o) == 'Instance' then
            o:Destroy()
        end
    end
    Nodes[pl] = nil
end
for _, pl in ipairs(Players:GetPlayers()) do
    if pl ~= LP then
        NewNodes(pl)
    end
end
Players.PlayerAdded:Connect(function(pl)
    if pl ~= LP then
        NewNodes(pl)
    end
end)
Players.PlayerRemoving:Connect(DelNodes)
local function Line(f, a, b, th, col, alpha)
    local dx, dy = b.X - a.X, b.Y - a.Y
    local len = math.sqrt(dx * dx + dy * dy)
    f.Size =
        UDim2.fromOffset(math.max(1, th), math.max(1, math.floor(len + 0.5)))
    f.Position = UDim2.fromOffset(math.floor(a.X + 0.5), math.floor(a.Y + 0.5))
    f.Rotation = math.deg(math.atan2(dy, dx)) + 90
    f.BackgroundColor3 = col
    f.BackgroundTransparency = 1 - alpha
end

-- Render loop
RS.RenderStepped:Connect(function()
    -- aimbot
    if aimEnabled and aimHeld then
        local best = GetBestTarget2D()
        if best and (not aimWallcheck or Visible(best)) then
            local pos = Cam.CFrame.Position
            Cam.CFrame = CFrame.new(pos, best.Position)
            targetHead = best
        else
            targetHead = nil
        end
    end

    -- triggerbot (players only, disabled on menu)
    if triggerEnabled and not Win.Visible and not tbDebounce then
        local part = mouse.Target
        local pl = OwningPlayerFromPart(part)
        if pl then
            tbDebounce = true
            task.spawn(function()
                if triggerDelay > 0 then
                    task.wait(triggerDelay)
                end
                if triggerEnabled and not Win.Visible then
                    FireClick()
                end
                task.wait(0.06)
                tbDebounce = false
            end)
        end
    end

    -- FOV circle
    if drawFOV then
        UpdateFOV()
    end

    -- ESP
    if not ESP.enabled then
        for _, g in pairs(Nodes) do
            g.Box.Visible = false
            g.Tracer.Visible = false
            g.Name.Visible = false
            g.HBG.Visible = false
        end
        return
    end
    for _, g in pairs(Nodes) do
        g.Stroke.Thickness = ESP.boxThick
        g.Stroke.Color = ESP.boxColor
        g.Stroke.Transparency = 1 - ESP.boxAlpha
    end
    local vp = Cam.ViewportSize
    local base =
        Vector2.new(math.floor(vp.X / 2 + 0.5), math.floor(vp.Y - 2 + 0.5))
    for pl, g in pairs(Nodes) do
        local ch = pl.Character
        local hum = ch and ch:FindFirstChildOfClass('Humanoid')
        if not ch or not hum or hum.Health <= 0 then
            g.Box.Visible = false
            g.Tracer.Visible = false
            g.Name.Visible = false
            g.HBG.Visible = false
            continue
        end
        if ESP.teamCheck and LP.Team ~= nil and pl.Team == LP.Team then
            g.Box.Visible = false
            g.Tracer.Visible = false
            g.Name.Visible = false
            g.HBG.Visible = false
            continue
        end
        local head = ch:FindFirstChild('Head')
        local hrp = ch:FindFirstChild('HumanoidRootPart')
        if not head or not hrp then
            g.Box.Visible = false
            g.Tracer.Visible = false
            g.Name.Visible = false
            g.HBG.Visible = false
            continue
        end
        local dist = (Cam.CFrame.Position - hrp.Position).Magnitude
        if dist > ESP.maxDist then
            g.Box.Visible = false
            g.Tracer.Visible = false
            g.Name.Visible = false
            g.HBG.Visible = false
            continue
        end
        local sHead, onH = Cam:WorldToViewportPoint(head.Position)
        local sRoot, onR = Cam:WorldToViewportPoint(hrp.Position)
        if not (onH and onR) then
            g.Box.Visible = false
            g.Tracer.Visible = false
            g.Name.Visible = false
            g.HBG.Visible = false
            continue
        end
        local rawH = math.abs(sRoot.Y - sHead.Y)
        local h = math.max(12, rawH * 1.8)
        local w = h / 2.2
        local cx = sRoot.X
        local top = sHead.Y - h * 0.2
        local x = math.floor(cx - w / 2 + 0.5)
        local y = math.floor(top + 0.5)
        w = math.floor(w + 0.5)
        h = math.floor(h + 0.5)
        if ESP.boxes then
            g.Box.Position = UDim2.fromOffset(x, y)
            g.Box.Size = UDim2.fromOffset(w, h)
            g.Box.Visible = true
        else
            g.Box.Visible = false
        end
        if ESP.tracers then
            local feet =
                Vector2.new(math.floor(cx + 0.5), math.floor(y + h + 0.5))
            Line(
                g.Tracer,
                base,
                feet,
                ESP.tracerThick,
                ESP.tracerColor,
                ESP.tracerAlpha
            )
            g.Tracer.Visible = true
        else
            g.Tracer.Visible = false
        end
        if ESP.names then
            g.Name.Text = pl.Name
            g.Name.TextColor3 = ESP.nameColor
            g.Name.TextTransparency = 1 - ESP.nameAlpha
            g.Name.Position = UDim2.fromOffset(x, y - 14)
            g.Name.Size = UDim2.fromOffset(w, 14)
            g.Name.Visible = true
        else
            g.Name.Visible = false
        end
        if ESP.health then
            g.HBG.Position = UDim2.fromOffset(x - 5, y)
            g.HBG.Size = UDim2.fromOffset(3, h)
            g.HBG.Visible = true
            local frac =
                math.clamp(hum.Health / math.max(1, hum.MaxHealth), 0, 1)
            g.HF.Size =
                UDim2.fromOffset(3, math.max(1, math.floor(h * frac + 0.5)))
            g.HF.Position =
                UDim2.fromOffset(0, math.floor(h * (1 - frac) + 0.5))
            g.HF.BackgroundColor3 =
                Color3.fromRGB(255 - 200 * frac, 255 * frac, 60 * frac)
        else
            g.HBG.Visible = false
        end
    end
end)

Ratings & Reviews

No reviews yet. Be the first to review this script!

Comments (0)

Please login to comment

Login with Discord

Loading comments...