HvH universal Cheat Bypass By WesterLua
Key RequiredUniversal

HvH universal Cheat Bypass By WesterLua

Universal Scriptw9sterw9ster 194 views 1.2K executesUpdated Aug 7, 2026
Unrated
00
Lua Script•1280 lines (58274 chars)
-- [[ WesterLua — ULTRA UNIFIED SYSTEM VERSION 3.2 (WALLBANG AUTO-TRIGGER UPDATE + FIXED MORPH) ]]
-- Клавиша активации: INSERT или Кнопка сверху экрана

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

local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid", 5)
local RootPart = Character:WaitForChild("HumanoidRootPart", 5)
local Camera = workspace.CurrentCamera

local SpinAngle = 0
local IsSpawning = false 
local OriginalAppearance = {} 
local OriginalAppearancesAll = {} -- Кэш для других игроков
local TabButtons = {}
local PageFrames = {}
local MenuElements = {}
local RegisteredFeatures = {}
local CurrentActivePage = "Combat"

local ChamsStorage = workspace:FindFirstChild("WesterLua_Chams_Storage") or Instance.new("Folder", workspace)
ChamsStorage.Name = "WesterLua_Chams_Storage"

local Palette = {
    ["Red"] = Color3.fromRGB(255, 65, 65),
    ["Green"] = Color3.fromRGB(65, 255, 65),
    ["Blue"] = Color3.fromRGB(65, 65, 255),
    ["Cyan"] = Color3.fromRGB(65, 255, 255),
    ["Magenta"] = Color3.fromRGB(255, 65, 255),
    ["Yellow"] = Color3.fromRGB(255, 255, 65),
    ["Purple"] = Color3.fromRGB(150, 65, 255),
    ["Black"] = Color3.fromRGB(25, 25, 25),
    ["White"] = Color3.fromRGB(255, 255, 255)
}

local SkyboxPresets = {
    ["Purple Nebula"] = {
        SkyboxBk = "rbxassetid://1595494833", SkyboxDn = "rbxassetid://1595494593", SkyboxFt = "rbxassetid://1595494723",
        SkyboxLf = "rbxassetid://1595494665", SkyboxRt = "rbxassetid://1595494488", SkyboxUp = "rbxassetid://1595494791"
    },
    ["Midnight City"] = {
        SkyboxBk = "rbxassetid://386343105", SkyboxDn = "rbxassetid://386342893", SkyboxFt = "rbxassetid://386343046",
        SkyboxLf = "rbxassetid://386344243", SkyboxRt = "rbxassetid://386343947", SkyboxUp = "rbxassetid://386343710"
    },
    ["Red Void"] = {
        SkyboxBk = "rbxassetid://3034934645", SkyboxDn = "rbxassetid://3034935402", SkyboxFt = "rbxassetid://3034934045",
        SkyboxLf = "rbxassetid://3034934351", SkyboxRt = "rbxassetid://3034934914", SkyboxUp = "rbxassetid://3034935174"
    },
    ["Anime Sunset"] = {
        SkyboxBk = "rbxassetid://264923311", SkyboxDn = "rbxassetid://264924294", SkyboxFt = "rbxassetid://264923616",
        SkyboxLf = "rbxassetid://264923838", SkyboxRt = "rbxassetid://264922123", SkyboxUp = "rbxassetid://264924559"
    },
    ["Matrix Grid"] = {
        SkyboxBk = "rbxassetid://10034441", SkyboxDn = "rbxassetid://10034441", SkyboxFt = "rbxassetid://10034441",
        SkyboxLf = "rbxassetid://10034441", SkyboxRt = "rbxassetid://10034441", SkyboxUp = "rbxassetid://10034441"
    }
}

local ArmsColorOptions = {"Link to Map"}
for name, _ in pairs(Palette) do table.insert(ArmsColorOptions, "Custom " .. name) end
local SkyOptions = {}
for name, _ in pairs(SkyboxPresets) do table.insert(SkyOptions, name) end

local Config = {
    AutoTriggerEnabled = false,
    AutoTriggerTarget = "Head & Torso",
    AutoTriggerDistance = 15,

    MorphEnabled = false,
    MorphAllEnabled = false, 
    SelectedMorph = "Tun Tun Sahur",
    Morphs = {
        ["Tun Tun Sahur"] = 112342985897325, 
        ["Житель (Minecraft)"] = 90405905565781
    },
    SahurPulse = false,         
    SpeedEnabled = true,        
    SpeedMultiplier = 3.5,      
    WallHopEnabled = false,
    AntiAimEnabled = false, 
    AntiAimPitch = "Down", 
    AntiAimYaw = "Static", 
    FlyEnabled = false,
    FlySpeed = 75, 
    
    ChamsEsp = false, 
    StealthESP = false,
    HealthBarEsp = false,
    
    AimbotEnabled = false,       
    WallCheck = false,
    AimbotFOV = 180,             
    AimbotSmoothness = 0.15,     
    FOVCircleVisible = false, 
    FOVCircleColor = Color3.fromRGB(255, 255, 255), 
    HeadSize = 2,   
    CameraFOV = 70,              
    ThirdPersonEnabled = false,  
    ThirdPersonDistance = 12,    
    MenuVisible = true,
    CurrentTheme = "Midnight",
    
    ArmsChamsEnabled = false, 
    ArmsColorSource = "Link to Map", 
    MapColorEnabled = false,
    SelectedMapColor = "Red",
    SkyChangerEnabled = false, 
    SelectedSky = "Purple Nebula" 
}

local ThemesList = {
    ["Midnight"] = {
        WindowBg = Color3.fromRGB(11, 12, 18), SidebarBg = Color3.fromRGB(16, 18, 26),
        ElementBg = Color3.fromRGB(22, 25, 35), ElementHover = Color3.fromRGB(28, 32, 45),
        Border = Color3.fromRGB(35, 40, 55), Accent = Color3.fromRGB(90, 120, 240),
        AccentGlow = Color3.fromRGB(40, 60, 160), Text = Color3.fromRGB(240, 240, 245)
    },
    ["Dark Cherry"] = {
        WindowBg = Color3.fromRGB(16, 12, 12), SidebarBg = Color3.fromRGB(22, 16, 16),
        ElementBg = Color3.fromRGB(30, 22, 22), ElementHover = Color3.fromRGB(38, 28, 28),
        Border = Color3.fromRGB(48, 32, 32), Accent = Color3.fromRGB(255, 60, 60),
        AccentGlow = Color3.fromRGB(150, 20, 20), Text = Color3.fromRGB(250, 240, 240)
    },
    ["Emerald"] = {
        WindowBg = Color3.fromRGB(8, 14, 11), SidebarBg = Color3.fromRGB(13, 20, 16),
        ElementBg = Color3.fromRGB(18, 28, 22), ElementHover = Color3.fromRGB(24, 38, 30),
        Border = Color3.fromRGB(28, 44, 35), Accent = Color3.fromRGB(45, 200, 130),
        AccentGlow = Color3.fromRGB(15, 100, 60), Text = Color3.fromRGB(235, 245, 240)
    },
    ["Toxic Vapor"] = {
        WindowBg = Color3.fromRGB(14, 8, 18), SidebarBg = Color3.fromRGB(20, 12, 26),
        ElementBg = Color3.fromRGB(28, 16, 36), ElementHover = Color3.fromRGB(36, 22, 46),
        Border = Color3.fromRGB(44, 24, 55), Accent = Color3.fromRGB(170, 60, 200),
        AccentGlow = Color3.fromRGB(95, 20, 120), Text = Color3.fromRGB(245, 235, 250)
    }
}

local ActiveTheme = ThemesList[Config.CurrentTheme]
local MainNeck = nil
local NeckOriginC0 = nil

local LockedTargetCharacter = nil

local function FindAndCacheNeck()
    if not Character then return end
    local torso = Character:FindFirstChild("Torso") or Character:FindFirstChild("UpperTorso")
    local neck = torso and (torso:FindFirstChild("Neck") or torso:FindFirstChild("NeckJoint"))
    if not neck then
        local head = Character:FindFirstChild("Head")
        neck = head and head:FindFirstChild("Neck")
    end
    if neck and neck:IsA("Motor6D") then
        MainNeck = neck
        if not neck:GetAttribute("OrigC0") then neck:SetAttribute("OrigC0", neck.C0) end
        NeckOriginC0 = neck:GetAttribute("OrigC0")
    end
end

local function ApplyUgcMorph(enable)
    if not Character or not Humanoid or not RootPart then return end
    
    if enable then
        local currentAssetID = Config.Morphs[Config.SelectedMorph]
        if not currentAssetID then return end
        
        for _, obj in ipairs(Character:GetDescendants()) do
            if (obj:IsA("BasePart") or obj:IsA("Decal")) and obj.Name ~= "HumanoidRootPart" then
                if not obj:GetAttribute("WesterLuaMorphPart") then
                    if not obj:GetAttribute("WesterLuaDefTrans") then 
                        obj:SetAttribute("WesterLuaDefTrans", obj.Transparency) 
                    end
                    obj.Transparency = 1
                end
            end
        end
        
        for _, obj in ipairs(Character:GetChildren()) do
            if obj:IsA("Accessory") and not obj:GetAttribute("WesterLuaMorphAccessory") then
                table.insert(OriginalAppearance, obj:Clone())
                obj:Destroy() 
            end
        end

        task.spawn(function()
            local success, objects = pcall(function() 
                return game:GetObjects("rbxassetid://" .. currentAssetID) 
            end)

            if success and objects and #objects > 0 then
                local activeMorph = Character:FindFirstChild("WesterLua_Active_Morph") or Instance.new("Folder", Character)
                activeMorph.Name = "WesterLua_Active_Morph"
                
                local loadedObj = objects[1]:Clone()
                loadedObj.Parent = activeMorph

                for _, subObj in ipairs(loadedObj:GetDescendants()) do
                    if subObj:IsA("Humanoid") or subObj:IsA("Animator") or subObj:IsA("Script") or subObj:IsA("LocalScript") then
                        subObj:Destroy()
                    end
                end

                local targetPart = nil
                if loadedObj:IsA("Model") then
                    targetPart = loadedObj.PrimaryPart or loadedObj:FindFirstChildOfClass("BasePart")
                elseif loadedObj:IsA("BasePart") then
                    targetPart = loadedObj
                elseif loadedObj:IsA("Accessory") then
                    targetPart = loadedObj:FindFirstChild("Handle")
                end

                if targetPart then
                    targetPart.CFrame = RootPart.CFrame
                    local mainWeld = Instance.new("WeldConstraint", targetPart)
                    mainWeld.Part0 = RootPart
                    mainWeld.Part1 = targetPart
                end

                for _, part in ipairs(loadedObj:GetDescendants()) do
                    if part:IsA("BasePart") then
                        part.Anchored = false
                        part.CanCollide = false
                        part.Massless = true 
                        part:SetAttribute("WesterLuaMorphPart", true)
                        if part.Transparency > 0.7 then part.Transparency = 0 end 
                    end
                end
            end
        end)
    else
        for _, obj in ipairs(Character:GetDescendants()) do
            if obj:IsA("BasePart") or obj:IsA("Decal") then
                local defTrans = obj:GetAttribute("WesterLuaDefTrans")
                if defTrans then obj.Transparency = defTrans end
            end
        end
        
        local activeMorph = Character:FindFirstChild("WesterLua_Active_Morph")
        if activeMorph then activeMorph:Destroy() end

        for _, accClone in ipairs(OriginalAppearance) do
            accClone.Parent = Character
        end
        OriginalAppearance = {}
    end
end

-- ФУНКЦИЯ ДЛЯ МОРФИНГА ВСЕХ ИГРОКОВ
local function ApplyUgcMorphToAll(enable)
    local currentAssetID = Config.Morphs[Config.SelectedMorph]
    if enable and not currentAssetID then return end

    for _, player in ipairs(Players:GetPlayers()) do
        if player == LocalPlayer then continue end 
        
        local char = player.Character
        if not char then continue end
        local root = char:FindFirstChild("HumanoidRootPart")
        local hum = char:FindFirstChild("Humanoid")
        if not root or not hum then continue end

        if enable then
            for _, obj in ipairs(char:GetDescendants()) do
                if (obj:IsA("BasePart") or obj:IsA("Decal")) and obj.Name ~= "HumanoidRootPart" then
                    if not obj:GetAttribute("WesterLuaMorphPart") then
                        if not obj:GetAttribute("WesterLuaDefTrans") then 
                            obj:SetAttribute("WesterLuaDefTrans", obj.Transparency) 
                        end
                        obj.Transparency = 1
                    end
                end
            end
            
            if not OriginalAppearancesAll[player.Name] then
                OriginalAppearancesAll[player.Name] = {}
            end
            for _, obj in ipairs(char:GetChildren()) do
                if obj:IsA("Accessory") and not obj:GetAttribute("WesterLuaMorphAccessory") then
                    table.insert(OriginalAppearancesAll[player.Name], obj:Clone())
                    obj:Destroy() 
                end
            end

            task.spawn(function()
                local success, objects = pcall(function() 
                    return game:GetObjects("rbxassetid://" .. currentAssetID) 
                end)

                if success and objects and #objects > 0 then
                    local activeMorph = char:FindFirstChild("WesterLua_Active_Morph") or Instance.new("Folder", char)
                    activeMorph.Name = "WesterLua_Active_Morph"
                    
                    local loadedObj = objects[1]:Clone()
                    loadedObj.Parent = activeMorph

                    for _, subObj in ipairs(loadedObj:GetDescendants()) do
                        if subObj:IsA("Humanoid") or subObj:IsA("Animator") or subObj:IsA("Script") or subObj:IsA("LocalScript") then
                            subObj:Destroy()
                        end
                    end

                    local targetPart = nil
                    if loadedObj:IsA("Model") then
                        targetPart = loadedObj.PrimaryPart or loadedObj:FindFirstChildOfClass("BasePart")
                    elseif loadedObj:IsA("BasePart") then
                        targetPart = loadedObj
                    elseif loadedObj:IsA("Accessory") then
                        targetPart = loadedObj:FindFirstChild("Handle")
                    end

                    if targetPart then
                        targetPart.CFrame = root.CFrame
                        local mainWeld = Instance.new("WeldConstraint", targetPart)
                        mainWeld.Part0 = root
                        mainWeld.Part1 = targetPart
                    end

                    for _, part in ipairs(loadedObj:GetDescendants()) do
                        if part:IsA("BasePart") then
                            part.Anchored = false
                            part.CanCollide = false
                            part.Massless = true 
                            part:SetAttribute("WesterLuaMorphPart", true)
                            if part.Transparency > 0.7 then part.Transparency = 0 end 
                        end
                    end
                end
            end)
        else
            for _, obj in ipairs(char:GetDescendants()) do
                if obj:IsA("BasePart") or obj:IsA("Decal") then
                    local defTrans = obj:GetAttribute("WesterLuaDefTrans")
                    if defTrans then obj.Transparency = defTrans end
                end
            end
            
            local activeMorph = char:FindFirstChild("WesterLua_Active_Morph")
            if activeMorph then activeMorph:Destroy() end

            if OriginalAppearancesAll[player.Name] then
                for _, accClone in ipairs(OriginalAppearancesAll[player.Name]) do
                    accClone.Parent = char
                end
                OriginalAppearancesAll[player.Name] = {}
            end
        end
    end
end

if Humanoid then pcall(function() Humanoid.RequiresNeck = false end) end
FindAndCacheNeck()
LocalPlayer.CharacterAdded:Connect(function(newChar)
    IsSpawning = true; Character = newChar
    Humanoid = newChar:WaitForChild("Humanoid", 10)
    RootPart = newChar:WaitForChild("HumanoidRootPart", 10)
    if Humanoid then pcall(function() Humanoid.RequiresNeck = false end) end
    task.wait(0.5); IsSpawning = false; FindAndCacheNeck()
    if Config.MorphEnabled then ApplyUgcMorph(true) end
end)

-- ИНИЦИАЛИЗАЦИЯ ИНТЕРФЕЙСА
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "WesterLuaGuiCore"
ScreenGui.ResetOnSpawn = false
ScreenGui.IgnoreGuiInset = true
local SafeCoreGui = nil
pcall(function() SafeCoreGui = game:GetService("CoreGui") end)
ScreenGui.Parent = (typeof(gethui) == "function" and gethui()) or SafeCoreGui or LocalPlayer:WaitForChild("PlayerGui")

local BlurEffect = Instance.new("BlurEffect", Lighting)
BlurEffect.Size = 12
BlurEffect.Enabled = true

local BackgroundDim = Instance.new("Frame", ScreenGui)
BackgroundDim.Size = UDim2.new(1, 0, 1, 0)
BackgroundDim.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
BackgroundDim.BackgroundTransparency = 0.4
BackgroundDim.ZIndex = 0

local AimFOVCircle = Instance.new("Frame", ScreenGui)
AimFOVCircle.AnchorPoint = Vector2.new(0.5, 0.5)
AimFOVCircle.Position = UDim2.new(0.5, 0, 0.5, 0)
AimFOVCircle.Size = UDim2.new(0, Config.AimbotFOV * 2, 0, Config.AimbotFOV * 2)
AimFOVCircle.BackgroundTransparency = 1
Instance.new("UICorner", AimFOVCircle).CornerRadius = UDim.new(1, 0)
local FOVStroke = Instance.new("UIStroke", AimFOVCircle)
FOVStroke.Color = Config.FOVCircleColor; FOVStroke.Thickness = 1.5; FOVStroke.Transparency = 0.6

local Watermark = Instance.new("CanvasGroup", ScreenGui)
Watermark.Name = "WesterLuaWatermark"
Watermark.Size = UDim2.new(0, 210, 0, 30)
Watermark.Position = UDim2.new(0, 16, 0, 16)
Watermark.BackgroundColor3 = ActiveTheme.SidebarBg
Instance.new("UICorner", Watermark).CornerRadius = UDim.new(0, 6)
local WStroke = Instance.new("UIStroke", Watermark)
WStroke.Color = ActiveTheme.Border; WStroke.Thickness = 1

local WLabel = Instance.new("TextLabel", Watermark)
WLabel.Size = UDim2.new(1, 0, 1, 0)
WLabel.BackgroundTransparency = 1
WLabel.Text = "  WesterLua | FPS: -- | ping: 14ms"
WLabel.TextColor3 = ActiveTheme.Text
WLabel.Font = Enum.Font.GothamMedium
WLabel.TextSize = 10.5
WLabel.TextXAlignment = Enum.TextXAlignment.Left

local fpsCount = 0
RunService.RenderStepped:Connect(function(dt)
    fpsCount = math.round(1 / dt)
end)
task.spawn(function()
    while true do
        task.wait(1)
        WLabel.Text = string.format("  WesterLua | FPS: %s | Client: v3.2 Wallbang", tostring(fpsCount))
    end
end)

local NotifyContainer = Instance.new("Frame", ScreenGui)
NotifyContainer.Size = UDim2.new(0, 260, 1, -40)
NotifyContainer.Position = UDim2.new(1, -280, 0, 20)
NotifyContainer.BackgroundTransparency = 1
local NotifyLayout = Instance.new("UIListLayout", NotifyContainer)
NotifyLayout.VerticalAlignment = Enum.VerticalAlignment.Bottom
NotifyLayout.Padding = UDim.new(0, 8)

local function ShowNotification(text, duration)
    local Toast = Instance.new("CanvasGroup", NotifyContainer)
    Toast.Size = UDim2.new(1, 0, 0, 42)
    Toast.BackgroundColor3 = ActiveTheme.SidebarBg
    Toast.GroupTransparency = 1
    Instance.new("UICorner", Toast).CornerRadius = UDim.new(0, 8)
    
    local TStroke = Instance.new("UIStroke", Toast)
    TStroke.Color = ActiveTheme.Border; TStroke.Thickness = 1
    
    local AccentBar = Instance.new("Frame", Toast)
    AccentBar.Size = UDim2.new(0, 4, 1, 0)
    AccentBar.BackgroundColor3 = ActiveTheme.Accent
    AccentBar.BorderSizePixel = 0
    
    local Label = Instance.new("TextLabel", Toast)
    Label.Size = UDim2.new(1, -16, 1, 0)
    Label.Position = UDim2.new(0, 12, 0, 0)
    Label.BackgroundTransparency = 1
    Label.Text = text
    Label.TextColor3 = ActiveTheme.Text
    Label.Font = Enum.Font.GothamMedium
    Label.TextSize = 11
    Label.TextXAlignment = Enum.TextXAlignment.Left

    TweenService:Create(Toast, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {GroupTransparency = 0}):Play()
    task.delay(duration or 3, function()
        local tw = TweenService:Create(Toast, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {GroupTransparency = 1})
        tw:Play()
        tw.Completed:Connect(function() Toast:Destroy() end)
    end)
end

local MainDashboard = Instance.new("CanvasGroup", ScreenGui)
MainDashboard.Name = "WesterLuaMainDashboard"
MainDashboard.Size = UDim2.new(0, 560, 0, 400)
MainDashboard.Position = UDim2.new(0.5, -280, 0.5, -200)
MainDashboard.BackgroundColor3 = ActiveTheme.WindowBg
MainDashboard.BorderSizePixel = 0
Instance.new("UICorner", MainDashboard).CornerRadius = UDim.new(0, 14)

local MasterStroke = Instance.new("UIStroke", MainDashboard)
MasterStroke.Color = ActiveTheme.Border; MasterStroke.Thickness = 1.5
local MenuScale = Instance.new("UIScale", MainDashboard)

local Sidebar = Instance.new("Frame", MainDashboard)
Sidebar.Size = UDim2.new(0, 145, 1, 0)
Sidebar.BackgroundColor3 = ActiveTheme.SidebarBg
Sidebar.BorderSizePixel = 0

local SidebarLine = Instance.new("Frame", MainDashboard)
SidebarLine.Size = UDim2.new(0, 1, 1, 0)
SidebarLine.Position = UDim2.new(0, 145, 0, 0)
SidebarLine.BackgroundColor3 = ActiveTheme.Border
SidebarLine.BorderSizePixel = 0

local LogoLabel = Instance.new("TextLabel", Sidebar)
LogoLabel.Size = UDim2.new(1, 0, 0, 50)
LogoLabel.BackgroundTransparency = 1
LogoLabel.Text = "WESTER LUA"
LogoLabel.TextColor3 = ActiveTheme.Accent
LogoLabel.Font = Enum.Font.GothamBold
LogoLabel.TextSize = 15

local TabContainer = Instance.new("Frame", Sidebar)
TabContainer.Size = UDim2.new(1, -16, 1, -95) -- Немного уменьшили для TG-текста
TabContainer.Position = UDim2.new(0, 8, 0, 55)
TabContainer.BackgroundTransparency = 1
local TabLayout = Instance.new("UIListLayout", TabContainer)
TabLayout.Padding = UDim.new(0, 5)

-- ДОБАВЛЕНИЕ TG-КАНАЛА
local TgLabel = Instance.new("TextLabel", Sidebar)
TgLabel.Size = UDim2.new(1, 0, 0, 25)
TgLabel.Position = UDim2.new(0, 0, 1, -30)
TgLabel.BackgroundTransparency = 1
TgLabel.Text = "TG: @prostrike_2"
TgLabel.TextColor3 = ActiveTheme.Accent
TgLabel.Font = Enum.Font.GothamMedium
TgLabel.TextSize = 11

local SearchBarFrame = Instance.new("Frame", MainDashboard)
SearchBarFrame.Size = UDim2.new(1, -165, 0, 32)
SearchBarFrame.Position = UDim2.new(0, 155, 0, 12)
SearchBarFrame.BackgroundColor3 = ActiveTheme.SidebarBg
Instance.new("UICorner", SearchBarFrame).CornerRadius = UDim.new(0, 8)
local SBS = Instance.new("UIStroke", SearchBarFrame)
SBS.Color = ActiveTheme.Border; SBS.Thickness = 1

local SearchIcon = Instance.new("TextLabel", SearchBarFrame)
SearchIcon.Size = UDim2.new(0, 26, 1, 0)
SearchIcon.BackgroundTransparency = 1
SearchIcon.Text = "🔍"
SearchIcon.TextSize = 11
SearchIcon.TextColor3 = Color3.fromRGB(120, 125, 140)

local SearchBox = Instance.new("TextBox", SearchBarFrame)
SearchBox.Size = UDim2.new(1, -32, 1, 0)
SearchBox.Position = UDim2.new(0, 26, 0, 0)
SearchBox.BackgroundTransparency = 1
SearchBox.Text = ""
SearchBox.PlaceholderText = "Search features..."
SearchBox.PlaceholderColor3 = Color3.fromRGB(90, 95, 110)
SearchBox.TextColor3 = ActiveTheme.Text
SearchBox.Font = Enum.Font.Gotham
SearchBox.TextSize = 11.5
SearchBox.TextXAlignment = Enum.TextXAlignment.Left

local ContentArea = Instance.new("Frame", MainDashboard)
ContentArea.Size = UDim2.new(1, -165, 1, -64)
ContentArea.Position = UDim2.new(0, 155, 0, 52)
ContentArea.BackgroundTransparency = 1

local function FilterActivePageFeatures()
    local text = string.lower(SearchBox.Text)
    for _, feature in ipairs(RegisteredFeatures) do
        if feature.Page == CurrentActivePage then
            feature.Frame.Visible = (text == "" or string.find(string.lower(feature.Title), text))
        end
    end
end

SearchBox:GetPropertyChangedSignal("Text"):Connect(FilterActivePageFeatures)

local function UpdateUITheme(themeName)
    local theme = ThemesList[themeName]
    if not theme then return end
    ActiveTheme = theme
    Config.CurrentTheme = themeName

    MainDashboard.BackgroundColor3 = theme.WindowBg
    Sidebar.BackgroundColor3 = theme.SidebarBg
    SidebarLine.BackgroundColor3 = theme.Border
    MasterStroke.Color = theme.Border
    LogoLabel.TextColor3 = theme.Accent
    TgLabel.TextColor3 = theme.Accent -- Обновляем цвет TG-лейбла
    SearchBarFrame.BackgroundColor3 = theme.SidebarBg
    SBS.Color = theme.Border
    SearchBox.TextColor3 = theme.Text
    Watermark.BackgroundColor3 = theme.SidebarBg
    WStroke.Color = theme.Border
    WLabel.TextColor3 = theme.Text

    for _, el in ipairs(MenuElements) do
        if el:IsA("Frame") or el:IsA("TextButton") then
            if el.Name == "SliderFill" or el.Name == "TglIndicator" then
                el.BackgroundColor3 = theme.Accent
            elseif el.Name == "ModuleToggle" or el.Name == "SliderTrack" or el.Name == "CycleBtn" then
                el.BackgroundColor3 = theme.ElementBg
            end
        end
        if el:IsA("TextLabel") or el:IsA("TextButton") then
            if el.Name == "TabButton" then
                el.TextColor3 = el:GetAttribute("Active") and theme.Accent or theme.Text
            else
                el.TextColor3 = theme.Text
            end
        end
        if el:IsA("UIGradient") then
            el.Color = ColorSequence.new({
                ColorSequenceKeypoint.new(0, theme.Accent),
                ColorSequenceKeypoint.new(1, theme.AccentGlow)
            })
        end
    end
end

local function CreateTabPage(name)
    local PageFrame = Instance.new("ScrollingFrame", ContentArea)
    PageFrame.Name = name .. "Page"
    PageFrame.Size = UDim2.new(1, 0, 1, 0)
    PageFrame.BackgroundTransparency = 1
    PageFrame.Visible = false
    PageFrame.BorderSizePixel = 0
    PageFrame.ScrollBarThickness = 0
    PageFrame.CanvasSize = UDim2.new(0, 0, 0, 0)

    local PageLayout = Instance.new("UIListLayout", PageFrame)
    PageLayout.Padding = UDim.new(0, 6)
    PageLayout.SortOrder = Enum.SortOrder.LayoutOrder

    PageLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function()
        PageFrame.CanvasSize = UDim2.new(0, 0, 0, PageLayout.AbsoluteContentSize.Y + 10)
    end)

    local TabBtn = Instance.new("TextButton", TabContainer)
    TabBtn.Name = "TabButton"
    TabBtn.Size = UDim2.new(1, 0, 0, 34)
    TabBtn.BackgroundColor3 = ActiveTheme.ElementBg
    TabBtn.BackgroundTransparency = 1
    TabBtn.Text = "   " .. name
    TabBtn.TextColor3 = ActiveTheme.Text
    TabBtn.Font = Enum.Font.GothamMedium
    TabBtn.TextSize = 12
    TabBtn.TextXAlignment = Enum.TextXAlignment.Left
    Instance.new("UICorner", TabBtn).CornerRadius = UDim.new(0, 8)
    
    table.insert(MenuElements, TabBtn)
    TabButtons[name] = TabBtn
    PageFrames[name] = PageFrame

    TabBtn.MouseEnter:Connect(function()
        if not TabBtn:GetAttribute("Active") then
            TweenService:Create(TabBtn, TweenInfo.new(0.15), {BackgroundTransparency = 0.8}):Play()
        end
    end)
    TabBtn.MouseLeave:Connect(function()
        if not TabBtn:GetAttribute("Active") then
            TweenService:Create(TabBtn, TweenInfo.new(0.15), {BackgroundTransparency = 1}):Play()
        end
    end)

    TabBtn.MouseButton1Click:Connect(function()
        SearchBox.Text = ""
        CurrentActivePage = name
        for tName, btn in pairs(TabButtons) do
            btn:SetAttribute("Active", false)
            TweenService:Create(btn, TweenInfo.new(0.2), {BackgroundTransparency = 1, TextColor3 = ActiveTheme.Text}):Play()
            PageFrames[tName].Visible = false
        end
        TabBtn:SetAttribute("Active", true)
        TweenService:Create(TabBtn, TweenInfo.new(0.2), {BackgroundTransparency = 0.5, TextColor3 = ActiveTheme.Accent}):Play()
        PageFrame.Visible = true
        FilterActivePageFeatures()
    end)

    return PageFrame
end

local function AddModuleToggle(parent, title, configKey, callback)
    local Frame = Instance.new("Frame", parent)
    Frame.Name = "ModuleToggle"
    Frame.Size = UDim2.new(1, -6, 0, 38)
    Frame.BackgroundColor3 = ActiveTheme.ElementBg
    Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 8)
    table.insert(MenuElements, Frame)

    local Label = Instance.new("TextLabel", Frame)
    Label.Size = UDim2.new(1, -60, 1, 0)
    Label.Position = UDim2.new(0, 14, 0, 0)
    Label.BackgroundTransparency = 1
    Label.Text = title
    Label.TextColor3 = ActiveTheme.Text
    Label.Font = Enum.Font.Gotham
    Label.TextSize = 11.5
    Label.TextXAlignment = Enum.TextXAlignment.Left

    local SwitchBox = Instance.new("TextButton", Frame)
    SwitchBox.Size = UDim2.new(0, 36, 0, 20)
    SwitchBox.Position = UDim2.new(1, -48, 0.5, -10)
    SwitchBox.BackgroundColor3 = Config[configKey] and ActiveTheme.Accent or Color3.fromRGB(38, 41, 54)
    SwitchBox.Text = ""
    Instance.new("UICorner", SwitchBox).CornerRadius = UDim.new(1, 0)

    local Grad = Instance.new("UIGradient", SwitchBox)
    Grad.Color = ColorSequence.new(ActiveTheme.Accent, ActiveTheme.AccentGlow)
    Grad.Enabled = Config[configKey]
    table.insert(MenuElements, Grad)

    local Indicator = Instance.new("Frame", SwitchBox)
    Indicator.Name = "TglIndicator"
    Indicator.Size = UDim2.new(0, 14, 0, 14)
    Indicator.Position = Config[configKey] and UDim2.new(1, -17, 0.5, -7) or UDim2.new(0, 3, 0.5, -7)
    Indicator.BackgroundColor3 = Color3.fromRGB(255,255,255)
    Instance.new("UICorner", Indicator).CornerRadius = UDim.new(1, 0)

    Frame.MouseEnter:Connect(function() TweenService:Create(Frame, TweenInfo.new(0.15), {BackgroundColor3 = ActiveTheme.ElementHover}):Play() end)
    Frame.MouseLeave:Connect(function() TweenService:Create(Frame, TweenInfo.new(0.15), {BackgroundColor3 = ActiveTheme.ElementBg}):Play() end)

    SwitchBox.MouseButton1Click:Connect(function()
        Config[configKey] = not Config[configKey]
        Grad.Enabled = Config[configKey]
        local targetPos = Config[configKey] and UDim2.new(1, -17, 0.5, -7) or UDim2.new(0, 3, 0.5, -7)
        if not Config[configKey] then SwitchBox.BackgroundColor3 = Color3.fromRGB(38, 41, 54) end
        TweenService:Create(Indicator, TweenInfo.new(0.2, Enum.EasingStyle.Back), {Position = targetPos}):Play()
        ShowNotification(title .. (Config[configKey] and ": ENABLED" or ": DISABLED"), 2)
        if callback then callback() end
    end)

    table.insert(RegisteredFeatures, {Page = parent.Name:gsub("Page", ""), Title = title, Frame = Frame})
end

local function AddModuleSlider(parent, title, configKey, min, max, isFloat, callback)
    local Frame = Instance.new("Frame", parent)
    Frame.Name = "SliderTrack"
    Frame.Size = UDim2.new(1, -6, 0, 48)
    Frame.BackgroundColor3 = ActiveTheme.ElementBg
    Instance.new("UICorner", Frame).CornerRadius = UDim.new(0, 8)
    table.insert(MenuElements, Frame)

    local Label = Instance.new("TextLabel", Frame)
    Label.Size = UDim2.new(1, -20, 0, 24)
    Label.Position = UDim2.new(0, 14, 0, 4)
    Label.BackgroundTransparency = 1
    Label.Text = string.format("%s: %s", title, tostring(Config[configKey]))
    Label.TextColor3 = ActiveTheme.Text
    Label.Font = Enum.Font.Gotham
    Label.TextSize = 11.5
    Label.TextXAlignment = Enum.TextXAlignment.Left

    local SliderBar = Instance.new("TextButton", Frame)
    SliderBar.Size = UDim2.new(1, -28, 0, 6)
    SliderBar.Position = UDim2.new(0, 14, 0, 32)
    SliderBar.BackgroundColor3 = Color3.fromRGB(38, 41, 54)
    SliderBar.Text = ""
    Instance.new("UICorner", SliderBar).CornerRadius = UDim.new(1, 0)

    local Fill = Instance.new("Frame", SliderBar)
    Fill.Name = "SliderFill"
    Fill.Size = UDim2.new((Config[configKey] - min) / (max - min), 0, 1, 0)
    Fill.BackgroundColor3 = ActiveTheme.Accent
    Instance.new("UICorner", Fill).CornerRadius = UDim.new(1, 0)
    table.insert(MenuElements, Fill)

    local Grad = Instance.new("UIGradient", Fill)
    Grad.Color = ColorSequence.new(ActiveTheme.Accent, ActiveTheme.AccentGlow)
    table.insert(MenuElements, Grad)

    Frame.MouseEnter:Connect(function() TweenService:Create(Frame, TweenInfo.new(0.15), {BackgroundColor3 = ActiveTheme.ElementHover}):Play() end)
    Frame.MouseLeave:Connect(function() TweenService:Create(Frame, TweenInfo.new(0.15), {BackgroundColor3 = ActiveTheme.ElementBg}):Play() end)

    local function update(input)
        local pct = math.clamp((input.Position.X - SliderBar.AbsolutePosition.X) / SliderBar.AbsoluteSize.X, 0, 1)
        TweenService:Create(Fill, TweenInfo.new(0.1, Enum.EasingStyle.Quad), {Size = UDim2.new(pct, 0, 1, 0)}):Play()
        local val = min + (pct * (max - min))
        Config[configKey] = isFloat and math.round(val * 10) / 10 or math.round(val)
        Label.Text = string.format("%s: %s", title, tostring(Config[configKey]))
        if callback then callback() end
    end

    local holding = false
    SliderBar.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then holding = true; update(input) end
    end)
    UserInputService.InputChanged:Connect(function(input)
        if holding and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then update(input) end
    end)
    UserInputService.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then holding = false end
    end)

    table.insert(RegisteredFeatures, {Page = parent.Name:gsub("Page", ""), Title = title, Frame = Frame})
end

local function AddModuleCycle(parent, title, configKey, options, callback)
    local Btn = Instance.new("TextButton", parent)
    Btn.Name = "CycleBtn"
    Btn.Size = UDim2.new(1, -6, 0, 38)
    Btn.BackgroundColor3 = ActiveTheme.ElementBg
    Btn.Text = string.format("   %s: %s", title, tostring(Config[configKey]))
    Btn.TextColor3 = ActiveTheme.Text
    Btn.Font = Enum.Font.Gotham
    Btn.TextSize = 11.5
    Btn.TextXAlignment = Enum.TextXAlignment.Left
    Instance.new("UICorner", Btn).CornerRadius = UDim.new(0, 8)
    table.insert(MenuElements, Btn)

    Btn.MouseEnter:Connect(function() TweenService:Create(Btn, TweenInfo.new(0.15), {BackgroundColor3 = ActiveTheme.ElementHover}):Play() end)
    Btn.MouseLeave:Connect(function() TweenService:Create(Btn, TweenInfo.new(0.15), {BackgroundColor3 = ActiveTheme.ElementBg}):Play() end)

    Btn.MouseButton1Click:Connect(function()
        local currentIndex = table.find(options, Config[configKey]) or 1
        local nextIndex = currentIndex % #options + 1
        Config[configKey] = options[nextIndex]
        Btn.Text = string.format("   %s: %s", title, tostring(Config[configKey]))
        if callback then callback() end
    end)

    table.insert(RegisteredFeatures, {Page = parent.Name:gsub("Page", ""), Title = title, Frame = Btn})
end

local CombatCol = CreateTabPage("Combat")
local MoveCol   = CreateTabPage("Movement")
local RenderCol = CreateTabPage("Render")
local PlayerCol = CreateTabPage("Player")
local MiscCol   = CreateTabPage("Misc")
local ThemesCol = CreateTabPage("UI Themes")

local dragging, dragStart, startPos
Sidebar.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
        dragging = true; dragStart = input.Position; startPos = MainDashboard.Position
    end
end)
UserInputService.InputChanged:Connect(function(input)
    if dragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
        local delta = input.Position - dragStart
        MainDashboard.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
    end
end)
UserInputService.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end
end)

AddModuleToggle(CombatCol, "Auto Trigger Wallbang", "AutoTriggerEnabled", function()
    if not Config.AutoTriggerEnabled and LockedTargetCharacter then
        local root = LockedTargetCharacter:FindFirstChild("HumanoidRootPart")
        if root then root.Anchored = false end
        LockedTargetCharacter = nil
    end
end)
AddModuleCycle(CombatCol, "Trigger Body Part", "AutoTriggerTarget", {"Head", "Torso", "Head & Torso"})
AddModuleSlider(CombatCol, "Teleport Distance", "AutoTriggerDistance", 5, 50, false)

AddModuleToggle(CombatCol, "Aimbot Assist", "AimbotEnabled")
AddModuleToggle(CombatCol, "Raycast WallCheck", "WallCheck")
AddModuleToggle(CombatCol, "Draw FOV Scope", "FOVCircleVisible")
AddModuleSlider(CombatCol, "FOV Range", "AimbotFOV", 40, 350, false)
AddModuleSlider(CombatCol, "Smooth Sync", "AimbotSmoothness", 0.1, 1.0, true)

AddModuleToggle(MoveCol, "Speed Multiplier", "SpeedEnabled")
AddModuleSlider(MoveCol, "Speed Scale", "SpeedMultiplier", 1.5, 8.0, true)
AddModuleToggle(MoveCol, "Parkour WallHop", "WallHopEnabled")
AddModuleToggle(MoveCol, "Noclip Flight", "FlyEnabled")
AddModuleSlider(MoveCol, "Fly Velocity", "FlySpeed", 30, 200, false)

AddModuleToggle(RenderCol, "Purple Glass ESP", "ChamsEsp")
AddModuleToggle(RenderCol, "Stealth ESP (Wallhack)", "StealthESP")
AddModuleToggle(RenderCol, "Enemy HP Bar", "HealthBarEsp")

AddModuleSlider(RenderCol, "Hitbox Head", "HeadSize", 2, 67, false)
AddModuleToggle(RenderCol, "Sahur Beat Pulse", "SahurPulse")
AddModuleSlider(RenderCol, "Camera FOV", "CameraFOV", 60, 120, false)
AddModuleToggle(RenderCol, "Arms Effect", "ArmsChamsEnabled", function() 
    for _, obj in ipairs(workspace:GetDescendants()) do ApplyArmsLogic(obj) end
    for _, obj in ipairs(Camera:GetDescendants()) do ApplyArmsLogic(obj) end
end)
AddModuleCycle(RenderCol, "Arms Color Source", "ArmsColorSource", ArmsColorOptions, function()
    for _, obj in ipairs(workspace:GetDescendants()) do ApplyArmsLogic(obj) end
    for _, obj in ipairs(Camera:GetDescendants()) do ApplyArmsLogic(obj) end
end)
AddModuleToggle(RenderCol, "Map Coloring", "MapColorEnabled", function() UpdateMapColor() end)
AddModuleCycle(RenderCol, "Map Color", "SelectedMapColor", {"Red", "Green", "Blue", "Cyan", "Magenta", "Yellow", "Purple", "Black", "White"}, function() UpdateMapColor() end)

local function UpdateSkybox()
    for _, child in ipairs(Lighting:GetChildren()) do
        if child:IsA("Sky") and child:GetAttribute("WesterLuaCustomSky") then child:Destroy() end
    end
    if Config.SkyChangerEnabled then
        local textures = SkyboxPresets[Config.SelectedSky]
        if textures then
            local customSky = Instance.new("Sky")
            customSky.Name = "WesterLua_Custom_Sky"
            customSky:SetAttribute("WesterLuaCustomSky", true)
            customSky.SkyboxBk = textures.SkyboxBk; customSky.SkyboxDn = textures.SkyboxDn; customSky.SkyboxFt = textures.SkyboxFt
            customSky.SkyboxLf = textures.SkyboxLf; customSky.SkyboxRt = textures.SkyboxRt; customSky.SkyboxUp = textures.SkyboxUp
            customSky.SunVisible = false; customSky.MoonVisible = false
            customSky.Parent = Lighting
        end
    end
end

AddModuleToggle(RenderCol, "Sky Changer", "SkyChangerEnabled", UpdateSkybox)
AddModuleCycle(RenderCol, "Select Sky", "SelectedSky", SkyOptions, UpdateSkybox)

AddModuleToggle(PlayerCol, "Override View", "ThirdPersonEnabled")
AddModuleSlider(PlayerCol, "Cam Dist", "ThirdPersonDistance", 5, 100, false)

AddModuleToggle(PlayerCol, "Activate Morph", "MorphEnabled", function() ApplyUgcMorph(Config.MorphEnabled) end)
AddModuleToggle(PlayerCol, "Morph All Players", "MorphAllEnabled", function() ApplyUgcMorphToAll(Config.MorphAllEnabled) end)
AddModuleCycle(PlayerCol, "Model", "SelectedMorph", {"Tun Tun Sahur", "Житель (Minecraft)"}, function()
    if Config.MorphEnabled then ApplyUgcMorph(false); task.wait(0.05); ApplyUgcMorph(true) end
    if Config.MorphAllEnabled then ApplyUgcMorphToAll(false); task.wait(0.05); ApplyUgcMorphToAll(true) end
end)

AddModuleToggle(MiscCol, "Enable Anti-Aim", "AntiAimEnabled")
AddModuleCycle(MiscCol, "AA Pitch", "AntiAimPitch", {"Off", "Down", "Up", "Fake Down"})
AddModuleCycle(MiscCol, "AA Yaw", "AntiAimYaw", {"Off", "Static", "Spin", "Jitter", "Sway", "Freestanding"})

AddModuleCycle(ThemesCol, "Select Preset", "CurrentTheme", {"Midnight", "Dark Cherry", "Emerald", "Toxic Vapor"}, function()
    UpdateUITheme(Config.CurrentTheme)
end)

local TopControlsFrame = Instance.new("Frame", ScreenGui)
TopControlsFrame.Size = UDim2.new(0, 150, 0, 36)
TopControlsFrame.Position = UDim2.new(0.5, -75, 0, 12)
TopControlsFrame.BackgroundTransparency = 1

local MasterToggleBtn = Instance.new("TextButton", TopControlsFrame)
MasterToggleBtn.Size = UDim2.new(1, 0, 1, 0)
MasterToggleBtn.BackgroundColor3 = ActiveTheme.SidebarBg
MasterToggleBtn.Text = "CLOSE MENU"
MasterToggleBtn.TextColor3 = Color3.fromRGB(255,255,255)
MasterToggleBtn.Font = Enum.Font.GothamMedium
MasterToggleBtn.TextSize = 11
Instance.new("UICorner", MasterToggleBtn).CornerRadius = UDim.new(0, 8)
local BtnStroke = Instance.new("UIStroke", MasterToggleBtn)
BtnStroke.Color = ActiveTheme.Border; BtnStroke.Thickness = 1

local FadeAnimationActive = false
local function ToggleEntireMenu()
    if FadeAnimationActive then return end
    FadeAnimationActive = true
    Config.MenuVisible = not Config.MenuVisible
    MasterToggleBtn.Text = Config.MenuVisible and "CLOSE MENU" or "OPEN MENU"
    
    local targetTransparency = Config.MenuVisible and 0 or 1
    local targetScale = Config.MenuVisible and 1 or 0.88
    local targetDim = Config.MenuVisible and 0.4 or 1
    local targetBlur = Config.MenuVisible and 12 or 0
    
    if Config.MenuVisible then
        BackgroundDim.Visible = true; BlurEffect.Enabled = true; MainDashboard.Visible = true; Watermark.Visible = true
    end
    
    TweenService:Create(BlurEffect, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {Size = targetBlur}):Play()
    TweenService:Create(BackgroundDim, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {BackgroundTransparency = targetDim}):Play()
    
    TweenService:Create(MenuScale, TweenInfo.new(0.25, Enum.EasingStyle.Back), {Scale = targetScale}):Play()
    local mainTween = TweenService:Create(MainDashboard, TweenInfo.new(0.25, Enum.EasingStyle.Quad), {GroupTransparency = targetTransparency})
    mainTween:Play()
    
    mainTween.Completed:Connect(function()
        if not Config.MenuVisible then
            BackgroundDim.Visible = false; BlurEffect.Enabled = false; MainDashboard.Visible = false; Watermark.Visible = false
        end
        FadeAnimationActive = false
    end)
end

MasterToggleBtn.MouseButton1Click:Connect(ToggleEntireMenu)
UserInputService.InputBegan:Connect(function(input, gp)
    if not gp and input.KeyCode == Enum.KeyCode.Insert then ToggleEntireMenu() end
end)

TabButtons["Combat"].BackgroundTransparency = 0.5
TabButtons["Combat"].TextColor3 = ActiveTheme.Accent
PageFrames["Combat"].Visible = true
UpdateUITheme(Config.CurrentTheme)
ShowNotification("WESTER LUA LOADED SUCCESFULLY", 3.5)

function ApplyArmsLogic(obj)
    if not obj or not obj:IsA("BasePart") then return false end
    local nameLower = obj.Name:lower()
    local parentNameLower = obj.Parent and obj.Parent.Name:lower() or ""
    local isArmOrViewModel = obj:IsDescendantOf(Camera) or nameLower:find("arm") or nameLower:find("hand") or nameLower:find("viewmodel") or parentNameLower:find("viewmodel")
    if isArmOrViewModel and obj.Name ~= "HumanoidRootPart" then
        if not obj:GetAttribute("WesterLuaOrigColor") then obj:SetAttribute("WesterLuaOrigColor", obj.Color) end
        if not obj:GetAttribute("WesterLuaOrigTrans") then obj:SetAttribute("WesterLuaOrigTrans", obj.Transparency) end
        if Config.ArmsChamsEnabled then
            obj.Transparency = 0.35
            if Config.ArmsColorSource == "Link to Map" then
                obj.Color = Config.MapColorEnabled and (Palette[Config.SelectedMapColor] or Color3.fromRGB(255,255,255)) or obj:GetAttribute("WesterLuaOrigColor")
            elseif Config.ArmsColorSource:find("Custom") then
                obj.Color = Palette[Config.ArmsColorSource:gsub("Custom ", "")] or Color3.fromRGB(255,255,255)
            end
        else
            obj.Color = obj:GetAttribute("WesterLuaOrigColor") or obj.Color
            obj.Transparency = obj:GetAttribute("WesterLuaOrigTrans") or obj.Transparency
        end
        return true
    end
    return false
end

workspace.DescendantAdded:Connect(function(obj) task.wait(0.02); ApplyArmsLogic(obj) end)
Camera.DescendantAdded:Connect(function(obj) task.wait(0.02); ApplyArmsLogic(obj) end)

local MapColorConnection = nil
function UpdateMapColor()
    if Config.MapColorEnabled then
        local targetColor = Palette[Config.SelectedMapColor] or Color3.fromRGB(255, 255, 255)
        for _, o in ipairs(workspace:GetDescendants()) do ApplyArmsLogic(o) end
        if not MapColorConnection then
            MapColorConnection = workspace.DescendantAdded:Connect(function(obj)
                task.wait(0.05)
                if not obj or not obj.Parent or obj:IsDescendantOf(Camera) or obj.Name:lower():find("arm") or obj:IsDescendantOf(ChamsStorage) then return end
                if obj:IsA("BasePart") and obj.Name ~= "HumanoidRootPart" and obj.Name ~= "Terrain" then
                    obj:SetAttribute("WesterLuaOrigColor", obj.Color)
                    obj.Color = Palette[Config.SelectedMapColor]
                end
            end)
        end
        for _, obj in ipairs(workspace:GetDescendants()) do
            if obj:IsA("BasePart") and obj.Name ~= "HumanoidRootPart" and not obj:IsDescendantOf(ChamsStorage) and obj.Name ~= "Terrain" and not obj:IsDescendantOf(Camera) and not obj:IsDescendantOf(Camera) and not obj.Name:lower():find("arm") then
                if not obj:GetAttribute("WesterLuaOrigColor") then obj:SetAttribute("WesterLuaOrigColor", obj.Color) end
                obj.Color = targetColor
            end
        end
    else
        if MapColorConnection then MapColorConnection:Disconnect(); MapColorConnection = nil end
        for _, obj in ipairs(workspace:GetDescendants()) do
            if obj:IsA("BasePart") then
                local orig = obj:GetAttribute("WesterLuaOrigColor")
                if orig then obj.Color = orig; obj:SetAttribute("WesterLuaOrigColor", nil) end
            end
        end
    end
end

local function isPlayerVisible(targetHead, targetCharacter)
    local raycastParams = RaycastParams.new()
    raycastParams.FilterDescendantsInstances = {Character, Camera}
    raycastParams.FilterType = Enum.RaycastFilterType.Exclude
    local res = workspace:Raycast(Camera.CFrame.Position, targetHead.Position - Camera.CFrame.Position, raycastParams)
    return not res or res.Instance:IsDescendantOf(targetCharacter)
end

local function getClosestPlayerInFOV()
    local closestPlayer = nil; local shortestDistance = Config.AimbotFOV
    local screenCenter = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= LocalPlayer and p.Character and p.Character:FindFirstChild("Head") and p.Character:FindFirstChild("Humanoid") and p.Character.Humanoid.Health > 0 then
            local vector, onScreen = Camera:WorldToViewportPoint(p.Character.Head.Position)
            if onScreen then
                local dist = (Vector2.new(vector.X, vector.Y) - screenCenter).Magnitude
                if dist < shortestDistance and (not Config.WallCheck or isPlayerVisible(p.Character.Head, p.Character)) then
                    closestPlayer = p; shortestDistance = dist
                end
            end
        end
    end
    return closestPlayer
end

local function GetFreestandingYaw(rootPart)
    if not rootPart then return 0 end
    local maxOpenDistance = -1; local openSpaceDirection = Vector3.new(0, 0, 1)
    local raycastParams = RaycastParams.new()
    raycastParams.FilterType = Enum.RaycastFilterType.Exclude
    if rootPart.Parent then raycastParams.FilterDescendantsInstances = {rootPart.Parent, ChamsStorage} end
    for i = 1, 8 do
        local angle = (i - 1) * (math.pi * 2 / 8)
        local sendDirection = Vector3.new(math.sin(angle), 0, math.cos(angle))
        local res = workspace:Raycast(rootPart.Position, sendDirection * 30, raycastParams)
        local dist = res and (res.Position - rootPart.Position).Magnitude or 30
        if dist > maxOpenDistance then maxOpenDistance = dist; openSpaceDirection = sendDirection end
    end
    return math.atan2(openSpaceDirection.X, openSpaceDirection.Z) + math.pi
end

local function GetCharacterUnderCrosshair()
    local centerMouse = Vector2.new(Camera.ViewportSize.X / 2, Camera.ViewportSize.Y / 2)
    local unitRay = Camera:ViewportPointToRay(centerMouse.X, centerMouse.Y)
    
    local enemyCharacters = {}
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= LocalPlayer and p.Character then
            table.insert(enemyCharacters, p.Character)
        end
    end

    if #enemyCharacters == 0 then return nil end

    local params = RaycastParams.new()
    params.FilterDescendantsInstances = enemyCharacters
    params.FilterType = Enum.RaycastFilterType.Include 

    local result = workspace:Raycast(unitRay.Origin, unitRay.Direction * 1000, params)
    if result and result.Instance then
        local hitPart = result.Instance
        local hitParent = hitPart.Parent
        local hum = hitParent and hitParent:FindFirstChildOfClass("Humanoid")
        
        if hum and hum.Health > 0 then
            local pName = hitPart.Name
            local validTarget = false
            
            if Config.AutoTriggerTarget == "Head" and pName == "Head" then
                validTarget = true
            elseif Config.AutoTriggerTarget == "Torso" and (pName == "Torso" or pName == "UpperTorso" or pName == "LowerTorso") then
                validTarget = true
            elseif Config.AutoTriggerTarget == "Head & Torso" and (pName == "Head" or pName == "Torso" or pName == "UpperTorso" or pName == "LowerTorso") then
                validTarget = true
            end
            
            if validTarget then
                return hitParent
            end
        end
    end
    return nil
end

task.spawn(function()
    while true do
        task.wait(0.25)
        for _, player in ipairs(Players:GetPlayers()) do
            if player.Character then
                local humanoid = player.Character:FindFirstChild("Humanoid")
                local head = player.Character:FindFirstChild("Head")
                
                -- ИГНОРИРОВАТЬ СЕБЯ
                if player == LocalPlayer then
                    local localHl = ChamsStorage:FindFirstChild(player.Name .. "_WesterLuaChams")
                    if localHl then localHl:Destroy() end
                    continue 
                end
                
                local isAlive = humanoid and humanoid.Health > 0
                local nameTag = "_WesterLuaChams"
                local hl = ChamsStorage:FindFirstChild(player.Name .. nameTag)
                
                -- ЛОГИКА ESP И STEALTH ESP
                if isAlive and (Config.ChamsEsp or Config.StealthESP) then
                    if not hl then hl = Instance.new("Highlight", ChamsStorage); hl.Name = player.Name .. nameTag end
                    hl.Adornee = player.Character
                    hl.DepthMode = Enum.HighlightDepthMode.AlwaysOnTop
                    
                    if Config.StealthESP then
                        hl.FillTransparency = 1
                        hl.OutlineTransparency = 0.2
                        hl.OutlineColor = Color3.fromRGB(255, 255, 255)
                    else
                        hl.FillColor = Color3.fromRGB(152, 115, 255)
                        hl.OutlineColor = Color3.fromRGB(215, 195, 255)
                        hl.FillTransparency = 0.55
                        hl.OutlineTransparency = 0.2
                    end
                else
                    if hl then hl:Destroy() end
                end
                
                -- ЛОГИКА ПОЛОСКИ ЗДОРОВЬЯ (HP BAR)
                if head and head:IsA("BasePart") then
                    local hpTag = "WesterLua_HPBar"
                    local hpGui = head:FindFirstChild(hpTag)
                    
                    if isAlive and Config.HealthBarEsp then
                        if not hpGui then
                            hpGui = Instance.new("BillboardGui")
                            hpGui.Name = hpTag
                            hpGui.Adornee = head
                            hpGui.Parent = head
                            hpGui.Size = UDim2.new(4, 0, 0.4, 0)
                            hpGui.StudsOffset = Vector3.new(0, 2.5, 0)
                            hpGui.AlwaysOnTop = true

                            local bgFrame = Instance.new("Frame", hpGui)
                            bgFrame.Name = "BG"
                            bgFrame.Size = UDim2.new(1, 0, 1, 0)
                            bgFrame.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
                            bgFrame.BorderSizePixel = 1
                            bgFrame.BorderColor3 = Color3.fromRGB(0, 0, 0)

                            local hpFrame = Instance.new("Frame", bgFrame)
                            hpFrame.Name = "HP"
                            hpFrame.Size = UDim2.new(1, 0, 1, 0)
                            hpFrame.BackgroundColor3 = Color3.fromRGB(0, 255, 0)
                            hpFrame.BorderSizePixel = 0
                        end
                        
                        local maxHp = humanoid.MaxHealth
                        if maxHp > 0 then
                            local fraction = math.clamp(humanoid.Health / maxHp, 0, 1)
                            hpGui.BG.HP.Size = UDim2.new(fraction, 0, 1, 0)
                            hpGui.BG.HP.BackgroundColor3 = fraction < 0.3 and Color3.fromRGB(255, 0, 0) or Color3.fromRGB(0, 255, 0)
                        end
                    else
                        if hpGui then hpGui:Destroy() end
                    end
                    
                    -- ХИТБОКСЫ
                    if not head:GetAttribute("WesterLua_OrigSize") then head:SetAttribute("WesterLua_OrigSize", head.Size) end
                    if Config.HeadSize > 2 and isAlive then
                        head.Size = Vector3.new(Config.HeadSize, Config.HeadSize, Config.HeadSize)
                        head.Transparency = 0.5; head.CanCollide = false; head.Massless = true
                    else
                        local origSize = head:GetAttribute("WesterLua_OrigSize")
                        if origSize then head.Size = origSize end
                        head.Transparency = 0; head.CanCollide = true; head.Massless = false
                    end
                end
            end
        end
    end
end)

RunService.Heartbeat:Connect(function(deltaTime)
    if IsSpawning then return end
    AimFOVCircle.Visible = Config.FOVCircleVisible
    
    if Config.AutoTriggerEnabled then
        if not LockedTargetCharacter then
            local targetChar = GetCharacterUnderCrosshair()
            if targetChar then
                LockedTargetCharacter = targetChar
                ShowNotification("WALLBANG TARGET LOCKED", 2)
            end
        end

        if LockedTargetCharacter then
            local targetRoot = LockedTargetCharacter:FindFirstChild("HumanoidRootPart")
            local targetHum = LockedTargetCharacter:FindFirstChildOfClass("Humanoid")
            
            if targetRoot and targetHum and targetHum.Health > 0 then
                targetRoot.Anchored = true
                local targetPos = Camera.CFrame.Position + (Camera.CFrame.LookVector * Config.AutoTriggerDistance)
                targetRoot.CFrame = targetRoot.CFrame:Lerp(CFrame.new(targetPos, Camera.CFrame.Position), 0.35)
            else
                LockedTargetCharacter = nil
            end
        end
    else
        if LockedTargetCharacter then
            local root = LockedTargetCharacter:FindFirstChild("HumanoidRootPart")
            if root then root.Anchored = false end
            LockedTargetCharacter = nil
        end
    end
    
    if Humanoid and Humanoid.Health > 0 then
        local isAirborne = Humanoid.FloorMaterial == Enum.Material.Air
        if Config.SpeedEnabled and isAirborne and Humanoid.MoveDirection.Magnitude > 0 and RootPart then
            RootPart.CFrame = RootPart.CFrame + (Humanoid.MoveDirection * (Config.SpeedMultiplier * 0.12))
        end
    end

    if Config.SahurPulse then
        Camera.FieldOfView = Config.CameraFOV + (math.abs(math.sin(os.clock() * 9.5)) * 7.5) 
    else
        Camera.FieldOfView = Config.CameraFOV
    end

    if Config.ThirdPersonEnabled then
        LocalPlayer.CameraMode = Enum.CameraMode.Classic
        LocalPlayer.CameraMaxZoomDistance = Config.ThirdPersonDistance; LocalPlayer.CameraMinZoomDistance = Config.ThirdPersonDistance
    else
        LocalPlayer.CameraMaxZoomDistance = 400; LocalPlayer.CameraMinZoomDistance = 0.5
    end

    if Config.AntiAimEnabled and RootPart and Humanoid and Humanoid.Health > 0 then
        Humanoid.AutoRotate = false
        local yawAngle = math.atan2(Camera.CFrame.LookVector.X, Camera.CFrame.LookVector.Z)
        local targetYaw = yawAngle
        if Config.AntiAimYaw == "Static" then targetYaw = yawAngle + math.pi
        elseif Config.AntiAimYaw == "Spin" then SpinAngle = (SpinAngle + deltaTime * 52) % (math.pi * 2); targetYaw = SpinAngle
        elseif Config.AntiAimYaw == "Jitter" then targetYaw = yawAngle + math.pi + ((math.random() > 0.5 and 1 or -1) * math.rad(45))
        elseif Config.AntiAimYaw == "Sway" then targetYaw = yawAngle + math.pi + math.sin(os.clock() * 11) * math.rad(45)
        elseif Config.AntiAimYaw == "Freestanding" then targetYaw = GetFreestandingYaw(RootPart) end
        
        if Config.AntiAimYaw ~= "Off" then RootPart.CFrame = CFrame.new(RootPart.Position) * CFrame.Angles(0, targetYaw, 0) end
        
        if MainNeck and NeckOriginC0 then
            if Config.AntiAimPitch == "Down" then MainNeck.C0 = NeckOriginC0 * CFrame.Angles(math.rad(-85), 0, 0)
            elseif Config.AntiAimPitch == "Up" then MainNeck.C0 = NeckOriginC0 * CFrame.Angles(math.rad(85), 0, 0)
            elseif Config.AntiAimPitch == "Fake Down" then MainNeck.C0 = NeckOriginC0; RootPart.AssemblyLinearVelocity = Vector3.new(RootPart.AssemblyLinearVelocity.X, math.sin(os.clock() * 60) * 12, RootPart.AssemblyLinearVelocity.Z)
            elseif Config.AntiAimPitch == "Off" then MainNeck.C0 = NeckOriginC0 end
        else FindAndCacheNeck() end
    else
        if Humanoid then Humanoid.AutoRotate = true end
        if MainNeck and NeckOriginC0 then MainNeck.C0 = NeckOriginC0 end
    end

    if Config.AimbotEnabled then
        local target = getClosestPlayerInFOV()
        if target and target.Character and target.Character:FindFirstChild("Head") then
            Camera.CFrame = Camera.CFrame:Lerp(CFrame.new(Camera.CFrame.Position, target.Character.Head.Position), Config.AimbotSmoothness)
        end
    end
end)

Features & Information

+20 function Spin bot + 6 function Trigger Aimbot 3rd person Chams Outline Bypass Bunny hop By WesterLua

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts