Age of Heroes
Key RequiredUniversal

Age of Heroes

Universal ScriptEstik*Estik* 714 views 713 executesUpdated Jun 21, 2026
Unrated
00
Lua Script•878 lines (32249 chars)
-- EstiHUB v5 | Age of Heroes | 

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local VirtualUser = game:GetService("VirtualUser")
local Camera = workspace.CurrentCamera
local LocalPlayer = Players.LocalPlayer

-- ===== НАСТРОЙКИ (можно менять в меню) =====
local KILLAURA_RANGE = 30
local hitboxScale = 1.8          -- текущий множитель хитбоксов
local minHitbox = 1.0
local maxHitbox = 5.0

-- Цвета для ESP (по умолчанию)
local heroColor = Color3.fromRGB(0, 255, 0)    -- зелёный
local villainColor = Color3.fromRGB(255, 0, 0) -- красный

-- Настройки отображения
local showName = true
local showDistance = true
local showSkeleton = false
local useTeamColor = false  -- если true, используем цвет команды (если есть)

-- ===== СОСТОЯНИЯ =====
local killAuraEnabled = false
local espEnabled = false
local autoFarmEnabled = false
local teamCheck = false
local hitboxEnabled = false
local menuOpen = true

-- ===== ХРАНИЛИЩА =====
local originalSizes = {}
local espObjects = {}
local skeletonLines = {}  -- для линий скелета

-- ===== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ =====
local function getValidPlayers()
    local list = {}
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
            if teamCheck and player.Team == LocalPlayer.Team then
                -- пропускаем союзников
            else
                local hum = player.Character:FindFirstChild("Humanoid")
                if hum and hum.Health > 0 then
                    table.insert(list, player)
                end
            end
        end
    end
    return list
end

local function getClosestPlayer()
    local closest = nil
    local shortestDist = math.huge
    local origin = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not origin then return nil end
    for _, player in pairs(getValidPlayers()) do
        local target = player.Character and player.Character:FindFirstChild("HumanoidRootPart")
        if target then
            local dist = (origin.Position - target.Position).Magnitude
            if dist < shortestDist then
                shortestDist = dist
                closest = player
            end
        end
    end
    return closest, shortestDist
end

-- ===== ХИТБОКСЫ (регулируемые) =====
local function expandHitboxes(player)
    if not player or not player.Character then return end
    local character = player.Character
    if not originalSizes[player] then
        originalSizes[player] = {}
    end
    for _, part in pairs(character:GetDescendants()) do
        if part:IsA("BasePart") and part.CanCollide then
            if not originalSizes[player][part] then
                originalSizes[player][part] = part.Size
            end
            if hitboxEnabled then
                part.Size = originalSizes[player][part] * hitboxScale
            else
                part.Size = originalSizes[player][part]
            end
        end
    end
end

local function applyHitboxToAll()
    for _, player in pairs(Players:GetPlayers()) do
        if player ~= LocalPlayer then
            expandHitboxes(player)
        end
    end
end

-- следим за новыми игроками и перерождениями
local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function(character)
        task.wait(0.2)
        expandHitboxes(player)
    end)
    if player.Character then
        task.wait(0.2)
        expandHitboxes(player)
    end
end

-- ===== KILL AURA (реальный клик) =====
local function killAuraLoop()
    if not killAuraEnabled then return end
    local target, dist = getClosestPlayer()
    if target and dist <= KILLAURA_RANGE then
        pcall(function()
            VirtualUser:Click()
        end)
    end
end

-- ===== ESP (с цветами команд и скелетом) =====
local function getPlayerColor(player)
    if useTeamColor and player.Team then
        local teamColor = player.Team.TeamColor
        if teamColor then
            return teamColor.Color
        end
    end
    -- если команда Hero или Villain (по названию)
    if player.Team and player.Team.Name == "Hero" then
        return heroColor
    elseif player.Team and player.Team.Name == "Villain" then
        return villainColor
    else
        return Color3.fromRGB(255, 255, 255) -- белый для нейтральных
    end
end

-- Создание BillboardGui для ESP
local function createESP(player)
    if espObjects[player] then return end
    local billboard = Instance.new("BillboardGui")
    billboard.Name = "EstiESP"
    billboard.Size = UDim2.new(0, 250, 0, 60)
    billboard.StudsOffset = Vector3.new(0, 3, 0)
    billboard.AlwaysOnTop = true
    billboard.Enabled = false

    local nameLabel = Instance.new("TextLabel", billboard)
    nameLabel.Size = UDim2.new(1, 0, 0.4, 0)
    nameLabel.BackgroundTransparency = 1
    nameLabel.TextColor3 = getPlayerColor(player)
    nameLabel.TextStrokeTransparency = 0.3
    nameLabel.Font = Enum.Font.GothamBold
    nameLabel.TextSize = 14
    nameLabel.Text = player.Name

    local distLabel = Instance.new("TextLabel", billboard)
    distLabel.Size = UDim2.new(1, 0, 0.3, 0)
    distLabel.Position = UDim2.new(0, 0, 0.4, 0)
    distLabel.BackgroundTransparency = 1
    distLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
    distLabel.Font = Enum.Font.Gotham
    distLabel.TextSize = 12
    distLabel.Text = "0 studs"

    local healthLabel = Instance.new("TextLabel", billboard)
    healthLabel.Size = UDim2.new(1, 0, 0.3, 0)
    healthLabel.Position = UDim2.new(0, 0, 0.7, 0)
    healthLabel.BackgroundTransparency = 1
    healthLabel.TextColor3 = Color3.fromRGB(0, 255, 0)
    healthLabel.Font = Enum.Font.Gotham
    healthLabel.TextSize = 12
    healthLabel.Text = "100%"

    espObjects[player] = {
        billboard = billboard,
        nameLabel = nameLabel,
        distLabel = distLabel,
        healthLabel = healthLabel
    }
end

-- Обновление ESP
local function updateESP()
    if not espEnabled then
        for _, data in pairs(espObjects) do
            data.billboard.Enabled = false
        end
        -- скрыть скелет
        for _, lines in pairs(skeletonLines) do
            for _, line in pairs(lines) do
                line.Visible = false
            end
        end
        return
    end

    for player, data in pairs(espObjects) do
        local billboard = data.billboard
        local nameLabel = data.nameLabel
        local distLabel = data.distLabel
        local healthLabel = data.healthLabel

        if player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player ~= LocalPlayer then
            if teamCheck and player.Team == LocalPlayer.Team then
                billboard.Enabled = false
            else
                billboard.Enabled = true
                local dist = (LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") and 
                    (LocalPlayer.Character.HumanoidRootPart.Position - player.Character.HumanoidRootPart.Position).Magnitude) or 0
                distLabel.Text = math.floor(dist) .. " studs"
                local hum = player.Character:FindFirstChild("Humanoid")
                if hum then
                    local hpPercent = (hum.Health / hum.MaxHealth) * 100
                    healthLabel.Text = math.floor(hpPercent) .. "%"
                    healthLabel.TextColor3 = Color3.fromRGB(255 * (1 - hpPercent/100), 255 * (hpPercent/100), 0)
                end
                -- обновляем цвет имени в зависимости от команды
                nameLabel.TextColor3 = getPlayerColor(player)
                nameLabel.Text = showName and player.Name or ""
                distLabel.Visible = showDistance
                healthLabel.Visible = true

                local head = player.Character:FindFirstChild("Head") or player.Character:FindFirstChild("HumanoidRootPart")
                if head then
                    billboard.Parent = head
                end
            end
        else
            billboard.Enabled = false
        end
    end

    -- Скелет (кости)
    if showSkeleton and espEnabled then
        for player, data in pairs(espObjects) do
            if player.Character and player ~= LocalPlayer then
                -- рисуем линии между суставами
                local parts = {
                    "Head", "UpperTorso", "LowerTorso", "LeftUpperArm", "LeftLowerArm", 
                    "RightUpperArm", "RightLowerArm", "LeftUpperLeg", "LeftLowerLeg",
                    "RightUpperLeg", "RightLowerLeg"
                }
                local connections = {
                    {"Head", "UpperTorso"},
                    {"UpperTorso", "LowerTorso"},
                    {"UpperTorso", "LeftUpperArm"},
                    {"LeftUpperArm", "LeftLowerArm"},
                    {"UpperTorso", "RightUpperArm"},
                    {"RightUpperArm", "RightLowerArm"},
                    {"LowerTorso", "LeftUpperLeg"},
                    {"LeftUpperLeg", "LeftLowerLeg"},
                    {"LowerTorso", "RightUpperLeg"},
                    {"RightUpperLeg", "RightLowerLeg"},
                }
                if not skeletonLines[player] then
                    skeletonLines[player] = {}
                    for i = 1, #connections do
                        local line = Drawing.new("Line")
                        line.Thickness = 2
                        line.Color = getPlayerColor(player)
                        line.Transparency = 0.5
                        line.Visible = false
                        skeletonLines[player][i] = line
                    end
                end
                local lines = skeletonLines[player]
                local char = player.Character
                for i, conn in pairs(connections) do
                    local p1 = char:FindFirstChild(conn[1])
                    local p2 = char:FindFirstChild(conn[2])
                    if p1 and p2 then
                        local pos1, onScreen1 = Camera:WorldToViewportPoint(p1.Position)
                        local pos2, onScreen2 = Camera:WorldToViewportPoint(p2.Position)
                        if onScreen1 and onScreen2 then
                            lines[i].From = Vector2.new(pos1.X, pos1.Y)
                            lines[i].To = Vector2.new(pos2.X, pos2.Y)
                            lines[i].Visible = true
                            lines[i].Color = getPlayerColor(player)
                        else
                            lines[i].Visible = false
                        end
                    else
                        lines[i].Visible = false
                    end
                end
            else
                if skeletonLines[player] then
                    for _, line in pairs(skeletonLines[player]) do
                        line.Visible = false
                    end
                end
            end
        end
    else
        for _, lines in pairs(skeletonLines) do
            for _, line in pairs(lines) do
                line.Visible = false
            end
        end
    end
end

-- Прикрепление ESP к игроку
local function attachESP(player)
    createESP(player)
    player.CharacterAdded:Connect(function(character)
        task.wait(0.2)
        local data = espObjects[player]
        if data and data.billboard then
            local head = character:FindFirstChild("Head") or character:FindFirstChild("HumanoidRootPart")
            if head then
                data.billboard.Parent = head
            end
        end
    end)
    if player.Character then
        local data = espObjects[player]
        if data and data.billboard then
            local head = player.Character:FindFirstChild("Head") or player.Character:FindFirstChild("HumanoidRootPart")
            if head then
                data.billboard.Parent = head
            end
        end
    end
end

-- ===== AUTO FARM (NPC) =====
local function findNPCs()
    local npcs = {}
    for _, obj in pairs(workspace:GetDescendants()) do
        if obj:IsA("Model") and obj:FindFirstChild("Humanoid") then
            local isPlayer = false
            for _, player in pairs(Players:GetPlayers()) do
                if player.Character == obj then
                    isPlayer = true
                    break
                end
            end
            if not isPlayer then
                table.insert(npcs, obj)
            end
        end
    end
    return npcs
end

local function autoFarmLoop()
    if not autoFarmEnabled then return end
    local npcs = findNPCs()
    local origin = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not origin then return end
    local closestNPC = nil
    local shortestDist = math.huge
    for _, npc in pairs(npcs) do
        local hrp = npc:FindFirstChild("HumanoidRootPart")
        if hrp then
            local dist = (origin.Position - hrp.Position).Magnitude
            if dist < shortestDist then
                shortestDist = dist
                closestNPC = npc
            end
        end
    end
    if closestNPC and shortestDist <= KILLAURA_RANGE then
        pcall(function()
            VirtualUser:Click()
        end)
    elseif closestNPC then
        local hrp = closestNPC:FindFirstChild("HumanoidRootPart")
        if hrp and LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") then
            LocalPlayer.Character.HumanoidRootPart.CFrame = hrp.CFrame + Vector3.new(0, 5, 0)
        end
    end
end

-- ===== РАДУЖНАЯ НАДПИСЬ (уменьшена, в рамке) =====
local function createRainbowText()
    local gui = Instance.new("ScreenGui")
    gui.Name = "EstikBloody"
    gui.Parent = LocalPlayer:WaitForChild("PlayerGui")
    gui.ResetOnSpawn = false

    local frame = Instance.new("Frame")
    frame.Parent = gui
    frame.BackgroundColor3 = Color3.fromRGB(0, 0, 0, 0.5)
    frame.BorderSizePixel = 2
    frame.BorderColor3 = Color3.fromRGB(255, 0, 255)
    frame.Size = UDim2.new(0, 120, 0, 30)
    frame.Position = UDim2.new(0.02, 0, 0.02, 0)

    local label = Instance.new("TextLabel")
    label.Parent = frame
    label.Text = "EstikBloody"
    label.TextColor3 = Color3.fromRGB(255, 0, 0)
    label.BackgroundTransparency = 1
    label.Size = UDim2.new(1, 0, 1, 0)
    label.Font = Enum.Font.GothamBold
    label.TextSize = 14
    label.TextScaled = true
    label.TextStrokeTransparency = 0.2

    local hue = 0
    RunService.RenderStepped:Connect(function()
        hue = (hue + 0.005) % 1
        label.TextColor3 = Color3.fromHSV(hue, 1, 1)
    end)
    return frame
end

-- ===== КРАСИВОЕ МЕНЮ (квадратное, с вкладками, закругления) =====
local function createMainMenu()
    local playerGui = LocalPlayer:WaitForChild("PlayerGui")
    local screenGui = Instance.new("ScreenGui")
    screenGui.Name = "EstiHUB_Menu"
    screenGui.Parent = playerGui
    screenGui.ResetOnSpawn = false

    local mainFrame = Instance.new("Frame")
    mainFrame.Parent = screenGui
    mainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 30)
    mainFrame.BackgroundTransparency = 0.15
    mainFrame.BorderSizePixel = 0
    mainFrame.Position = UDim2.new(0.35, 0, 0.15, 0)
    mainFrame.Size = UDim2.new(0, 320, 0, 340)
    mainFrame.Active = true
    mainFrame.Draggable = true
    mainFrame.ClipsDescendants = true
    -- закругления (с помощью Corner)
    local corner = Instance.new("UICorner")
    corner.Parent = mainFrame
    corner.CornerRadius = UDim.new(0, 10)

    -- тень
    local shadow = Instance.new("Frame")
    shadow.Parent = mainFrame
    shadow.BackgroundColor3 = Color3.fromRGB(0,0,0)
    shadow.BackgroundTransparency = 0.5
    shadow.Size = UDim2.new(1, 0, 1, 0)
    shadow.Position = UDim2.new(0, 5, 0, 5)
    shadow.ZIndex = -1
    shadow.BorderSizePixel = 0
    local shadowCorner = Instance.new("UICorner")
    shadowCorner.Parent = shadow
    shadowCorner.CornerRadius = UDim.new(0, 10)

    local title = Instance.new("TextLabel")
    title.Parent = mainFrame
    title.Text = "EstiHUB"
    title.TextColor3 = Color3.fromRGB(255, 70, 70)
    title.BackgroundTransparency = 1
    title.Size = UDim2.new(1, 0, 0, 40)
    title.Position = UDim2.new(0, 0, 0, 0)
    title.Font = Enum.Font.GothamBold
    title.TextSize = 24
    title.TextXAlignment = Enum.TextXAlignment.Center

    -- Панель вкладок
    local tabPanel = Instance.new("Frame")
    tabPanel.Parent = mainFrame
    tabPanel.BackgroundColor3 = Color3.fromRGB(45, 45, 55)
    tabPanel.BackgroundTransparency = 0.2
    tabPanel.BorderSizePixel = 0
    tabPanel.Size = UDim2.new(1, 0, 0, 35)
    tabPanel.Position = UDim2.new(0, 0, 0, 40)

    local contentPanel = Instance.new("Frame")
    contentPanel.Parent = mainFrame
    contentPanel.BackgroundColor3 = Color3.fromRGB(30, 30, 40)
    contentPanel.BackgroundTransparency = 0.3
    contentPanel.BorderSizePixel = 0
    contentPanel.Size = UDim2.new(1, 0, 1, -75)
    contentPanel.Position = UDim2.new(0, 0, 0, 75)

    local tabs = {
        {name = "Combat", id = "combat"},
        {name = "ESP", id = "esp"},
        {name = "Farm", id = "farm"},
        {name = "Hitbox", id = "hitbox"},
        {name = "Settings", id = "settings"}
    }

    local tabButtons = {}
    local contentFrames = {}

    local function createTabButton(tabName, tabId, xPos)
        local btn = Instance.new("TextButton")
        btn.Parent = tabPanel
        btn.Text = tabName
        btn.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
        btn.Size = UDim2.new(0, 64, 1, -2)
        btn.Position = UDim2.new(0, xPos, 0, 1)
        btn.BorderSizePixel = 0
        btn.Font = Enum.Font.Gotham
        btn.TextSize = 12
        btn.TextColor3 = Color3.fromRGB(220, 220, 220)
        btn.Name = tabId
        tabButtons[tabId] = btn
        return btn
    end

    local function createContentFrame(tabId)
        local frame = Instance.new("Frame")
        frame.Parent = contentPanel
        frame.BackgroundTransparency = 1
        frame.Size = UDim2.new(1, 0, 1, 0)
        frame.Position = UDim2.new(0, 0, 0, 0)
        frame.Visible = false
        frame.Name = tabId
        contentFrames[tabId] = frame
        return frame
    end

    -- ===== ВКЛАДКА COMBAT =====
    local combatFrame = createContentFrame("combat")
    local killBtn = Instance.new("TextButton")
    killBtn.Parent = combatFrame
    killBtn.Text = "Kill Aura: OFF"
    killBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 80)
    killBtn.Size = UDim2.new(0.8, 0, 0, 35)
    killBtn.Position = UDim2.new(0.1, 0, 0.1, 0)
    killBtn.Font = Enum.Font.Gotham
    killBtn.TextSize = 14
    killBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    killBtn.BorderSizePixel = 0
    killBtn.MouseButton1Click:Connect(function()
        killAuraEnabled = not killAuraEnabled
        killBtn.Text = killAuraEnabled and "Kill Aura: ON" or "Kill Aura: OFF"
    end)

    -- ===== ВКЛАДКА ESP =====
    local espFrame = createContentFrame("esp")
    local espBtn = Instance.new("TextButton")
    espBtn.Parent = espFrame
    espBtn.Text = "ESP: OFF"
    espBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 80)
    espBtn.Size = UDim2.new(0.8, 0, 0, 30)
    espBtn.Position = UDim2.new(0.1, 0, 0.05, 0)
    espBtn.Font = Enum.Font.Gotham
    espBtn.TextSize = 14
    espBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    espBtn.BorderSizePixel = 0
    espBtn.MouseButton1Click:Connect(function()
        espEnabled = not espEnabled
        espBtn.Text = espEnabled and "ESP: ON" or "ESP: OFF"
        if espEnabled then
            for _, player in pairs(Players:GetPlayers()) do
                attachESP(player)
            end
        end
    end)

    -- Настройки отображения
    local nameCheck = Instance.new("TextButton")
    nameCheck.Parent = espFrame
    nameCheck.Text = "Show Name: ON"
    nameCheck.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
    nameCheck.Size = UDim2.new(0.35, 0, 0, 25)
    nameCheck.Position = UDim2.new(0.1, 0, 0.2, 0)
    nameCheck.Font = Enum.Font.Gotham
    nameCheck.TextSize = 12
    nameCheck.TextColor3 = Color3.fromRGB(220, 220, 220)
    nameCheck.BorderSizePixel = 0
    nameCheck.MouseButton1Click:Connect(function()
        showName = not showName
        nameCheck.Text = showName and "Show Name: ON" or "Show Name: OFF"
    end)

    local distCheck = Instance.new("TextButton")
    distCheck.Parent = espFrame
    distCheck.Text = "Show Dist: ON"
    distCheck.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
    distCheck.Size = UDim2.new(0.35, 0, 0, 25)
    distCheck.Position = UDim2.new(0.55, 0, 0.2, 0)
    distCheck.Font = Enum.Font.Gotham
    distCheck.TextSize = 12
    distCheck.TextColor3 = Color3.fromRGB(220, 220, 220)
    distCheck.BorderSizePixel = 0
    distCheck.MouseButton1Click:Connect(function()
        showDistance = not showDistance
        distCheck.Text = showDistance and "Show Dist: ON" or "Show Dist: OFF"
    end)

    local skeletonCheck = Instance.new("TextButton")
    skeletonCheck.Parent = espFrame
    skeletonCheck.Text = "Skeleton: OFF"
    skeletonCheck.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
    skeletonCheck.Size = UDim2.new(0.35, 0, 0, 25)
    skeletonCheck.Position = UDim2.new(0.1, 0, 0.35, 0)
    skeletonCheck.Font = Enum.Font.Gotham
    skeletonCheck.TextSize = 12
    skeletonCheck.TextColor3 = Color3.fromRGB(220, 220, 220)
    skeletonCheck.BorderSizePixel = 0
    skeletonCheck.MouseButton1Click:Connect(function()
        showSkeleton = not showSkeleton
        skeletonCheck.Text = showSkeleton and "Skeleton: ON" or "Skeleton: OFF"
        if not showSkeleton then
            for _, lines in pairs(skeletonLines) do
                for _, line in pairs(lines) do
                    line.Visible = false
                end
            end
        end
    end)

    -- Выбор цвета для Hero
    local heroColorLabel = Instance.new("TextLabel")
    heroColorLabel.Parent = espFrame
    heroColorLabel.Text = "Hero Color:"
    heroColorLabel.BackgroundTransparency = 1
    heroColorLabel.Size = UDim2.new(0.3, 0, 0, 25)
    heroColorLabel.Position = UDim2.new(0.05, 0, 0.5, 0)
    heroColorLabel.Font = Enum.Font.Gotham
    heroColorLabel.TextSize = 12
    heroColorLabel.TextColor3 = Color3.fromRGB(200,200,200)
    heroColorLabel.TextXAlignment = Enum.TextXAlignment.Right

    local heroColorBtn = Instance.new("TextButton")
    heroColorBtn.Parent = espFrame
    heroColorBtn.Text = "Green"
    heroColorBtn.BackgroundColor3 = Color3.fromRGB(0, 255, 0)
    heroColorBtn.Size = UDim2.new(0.2, 0, 0, 25)
    heroColorBtn.Position = UDim2.new(0.4, 0, 0.5, 0)
    heroColorBtn.Font = Enum.Font.Gotham
    heroColorBtn.TextSize = 12
    heroColorBtn.TextColor3 = Color3.fromRGB(0,0,0)
    heroColorBtn.BorderSizePixel = 0
    local heroColors = {Color3.fromRGB(0,255,0), Color3.fromRGB(0,0,255), Color3.fromRGB(255,255,0), Color3.fromRGB(255,0,255), Color3.fromRGB(255,165,0), Color3.fromRGB(255,255,255), Color3.fromRGB(255,0,0)}
    local heroColorNames = {"Green","Blue","Yellow","Purple","Orange","White","Red"}
    local heroIdx = 1
    heroColorBtn.MouseButton1Click:Connect(function()
        heroIdx = heroIdx % #heroColors + 1
        heroColor = heroColors[heroIdx]
        heroColorBtn.BackgroundColor3 = heroColor
        heroColorBtn.Text = heroColorNames[heroIdx]
        -- обновить цвет у существующих ESP
        for player, data in pairs(espObjects) do
            if data.nameLabel then
                data.nameLabel.TextColor3 = getPlayerColor(player)
            end
        end
    end)

    -- Выбор цвета для Villain
    local villainColorLabel = Instance.new("TextLabel")
    villainColorLabel.Parent = espFrame
    villainColorLabel.Text = "Villain Color:"
    villainColorLabel.BackgroundTransparency = 1
    villainColorLabel.Size = UDim2.new(0.3, 0, 0, 25)
    villainColorLabel.Position = UDim2.new(0.05, 0, 0.7, 0)
    villainColorLabel.Font = Enum.Font.Gotham
    villainColorLabel.TextSize = 12
    villainColorLabel.TextColor3 = Color3.fromRGB(200,200,200)
    villainColorLabel.TextXAlignment = Enum.TextXAlignment.Right

    local villainColorBtn = Instance.new("TextButton")
    villainColorBtn.Parent = espFrame
    villainColorBtn.Text = "Red"
    villainColorBtn.BackgroundColor3 = Color3.fromRGB(255, 0, 0)
    villainColorBtn.Size = UDim2.new(0.2, 0, 0, 25)
    villainColorBtn.Position = UDim2.new(0.4, 0, 0.7, 0)
    villainColorBtn.Font = Enum.Font.Gotham
    villainColorBtn.TextSize = 12
    villainColorBtn.TextColor3 = Color3.fromRGB(255,255,255)
    villainColorBtn.BorderSizePixel = 0
    local villainColors = {Color3.fromRGB(255,0,0), Color3.fromRGB(0,0,255), Color3.fromRGB(255,255,0), Color3.fromRGB(255,0,255), Color3.fromRGB(255,165,0), Color3.fromRGB(255,255,255), Color3.fromRGB(0,255,0)}
    local villainColorNames = {"Red","Blue","Yellow","Purple","Orange","White","Green"}
    local villainIdx = 1
    villainColorBtn.MouseButton1Click:Connect(function()
        villainIdx = villainIdx % #villainColors + 1
        villainColor = villainColors[villainIdx]
        villainColorBtn.BackgroundColor3 = villainColor
        villainColorBtn.Text = villainColorNames[villainIdx]
        for player, data in pairs(espObjects) do
            if data.nameLabel then
                data.nameLabel.TextColor3 = getPlayerColor(player)
            end
        end
    end)

    -- ===== ВКЛАДКА FARM =====
    local farmFrame = createContentFrame("farm")
    local farmBtn = Instance.new("TextButton")
    farmBtn.Parent = farmFrame
    farmBtn.Text = "Auto Farm: OFF"
    farmBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 80)
    farmBtn.Size = UDim2.new(0.8, 0, 0, 35)
    farmBtn.Position = UDim2.new(0.1, 0, 0.1, 0)
    farmBtn.Font = Enum.Font.Gotham
    farmBtn.TextSize = 14
    farmBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    farmBtn.BorderSizePixel = 0
    farmBtn.MouseButton1Click:Connect(function()
        autoFarmEnabled = not autoFarmEnabled
        farmBtn.Text = autoFarmEnabled and "Auto Farm: ON" or "Auto Farm: OFF"
    end)

    -- ===== ВКЛАДКА HITBOX =====
    local hitboxFrame = createContentFrame("hitbox")
    local hitboxBtn = Instance.new("TextButton")
    hitboxBtn.Parent = hitboxFrame
    hitboxBtn.Text = "Hitbox: OFF"
    hitboxBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 80)
    hitboxBtn.Size = UDim2.new(0.8, 0, 0, 30)
    hitboxBtn.Position = UDim2.new(0.1, 0, 0.05, 0)
    hitboxBtn.Font = Enum.Font.Gotham
    hitboxBtn.TextSize = 14
    hitboxBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    hitboxBtn.BorderSizePixel = 0
    hitboxBtn.MouseButton1Click:Connect(function()
        hitboxEnabled = not hitboxEnabled
        hitboxBtn.Text = hitboxEnabled and "Hitbox: ON" or "Hitbox: OFF"
        applyHitboxToAll()
    end)

    -- Регулировка множителя
    local scaleLabel = Instance.new("TextLabel")
    scaleLabel.Parent = hitboxFrame
    scaleLabel.Text = "Scale: " .. string.format("%.1f", hitboxScale)
    scaleLabel.BackgroundTransparency = 1
    scaleLabel.TextColor3 = Color3.fromRGB(255,255,255)
    scaleLabel.Size = UDim2.new(0.4, 0, 0, 25)
    scaleLabel.Position = UDim2.new(0.3, 0, 0.35, 0)
    scaleLabel.Font = Enum.Font.Gotham
    scaleLabel.TextSize = 14

    local minusBtn = Instance.new("TextButton")
    minusBtn.Parent = hitboxFrame
    minusBtn.Text = "-"
    minusBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
    minusBtn.Size = UDim2.new(0.15, 0, 0, 25)
    minusBtn.Position = UDim2.new(0.1, 0, 0.35, 0)
    minusBtn.Font = Enum.Font.Gotham
    minusBtn.TextSize = 16
    minusBtn.TextColor3 = Color3.fromRGB(255,255,255)
    minusBtn.BorderSizePixel = 0
    minusBtn.MouseButton1Click:Connect(function()
        hitboxScale = math.max(minHitbox, hitboxScale - 0.2)
        scaleLabel.Text = "Scale: " .. string.format("%.1f", hitboxScale)
        if hitboxEnabled then applyHitboxToAll() end
    end)

    local plusBtn = Instance.new("TextButton")
    plusBtn.Parent = hitboxFrame
    plusBtn.Text = "+"
    plusBtn.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
    plusBtn.Size = UDim2.new(0.15, 0, 0, 25)
    plusBtn.Position = UDim2.new(0.75, 0, 0.35, 0)
    plusBtn.Font = Enum.Font.Gotham
    plusBtn.TextSize = 16
    plusBtn.TextColor3 = Color3.fromRGB(255,255,255)
    plusBtn.BorderSizePixel = 0
    plusBtn.MouseButton1Click:Connect(function()
        hitboxScale = math.min(maxHitbox, hitboxScale + 0.2)
        scaleLabel.Text = "Scale: " .. string.format("%.1f", hitboxScale)
        if hitboxEnabled then applyHitboxToAll() end
    end)

    -- ===== ВКЛАДКА SETTINGS =====
    local settingsFrame = createContentFrame("settings")
    local teamBtn = Instance.new("TextButton")
    teamBtn.Parent = settingsFrame
    teamBtn.Text = "Team Check: OFF"
    teamBtn.BackgroundColor3 = Color3.fromRGB(70, 70, 80)
    teamBtn.Size = UDim2.new(0.8, 0, 0, 35)
    teamBtn.Position = UDim2.new(0.1, 0, 0.1, 0)
    teamBtn.Font = Enum.Font.Gotham
    teamBtn.TextSize = 14
    teamBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
    teamBtn.BorderSizePixel = 0
    teamBtn.MouseButton1Click:Connect(function()
        teamCheck = not teamCheck
        teamBtn.Text = teamCheck and "Team Check: ON" or "Team Check: OFF"
    end)

    -- Использовать цвет команды
    local teamColorCheck = Instance.new("TextButton")
    teamColorCheck.Parent = settingsFrame
    teamColorCheck.Text = "Use Team Color: OFF"
    teamColorCheck.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
    teamColorCheck.Size = UDim2.new(0.8, 0, 0, 30)
    teamColorCheck.Position = UDim2.new(0.1, 0, 0.5, 0)
    teamColorCheck.Font = Enum.Font.Gotham
    teamColorCheck.TextSize = 12
    teamColorCheck.TextColor3 = Color3.fromRGB(220, 220, 220)
    teamColorCheck.BorderSizePixel = 0
    teamColorCheck.MouseButton1Click:Connect(function()
        useTeamColor = not useTeamColor
        teamColorCheck.Text = useTeamColor and "Use Team Color: ON" or "Use Team Color: OFF"
        for player, data in pairs(espObjects) do
            if data.nameLabel then
                data.nameLabel.TextColor3 = getPlayerColor(player)
            end
        end
    end)

    -- ===== РАЗМЕЩЕНИЕ КНОПОК ВКЛАДОК =====
    local xPos = 0
    for _, tab in pairs(tabs) do
        local btn = createTabButton(tab.name, tab.id, xPos)
        xPos = xPos + 64
        btn.MouseButton1Click:Connect(function()
            for _, frame in pairs(contentFrames) do
                frame.Visible = false
            end
            if contentFrames[tab.id] then
                contentFrames[tab.id].Visible = true
            end
            for _, b in pairs(tabButtons) do
                b.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
            end
            btn.BackgroundColor3 = Color3.fromRGB(90, 90, 110)
        end)
    end

    -- По умолчанию показываем Combat
    if contentFrames["combat"] then
        contentFrames["combat"].Visible = true
        tabButtons["combat"].BackgroundColor3 = Color3.fromRGB(90, 90, 110)
    end

    -- Открытие/закрытие по Left Shift
    UserInputService.InputBegan:Connect(function(input, gameProcessed)
        if gameProcessed then return end
        if input.KeyCode == Enum.KeyCode.LeftShift then
            menuOpen = not menuOpen
            mainFrame.Visible = menuOpen
        end
    end)

    return mainFrame
end

-- ===== ИНИЦИАЛИЗАЦИЯ =====
createRainbowText()
createMainMenu()

for _, player in pairs(Players:GetPlayers()) do
    attachESP(player)
end
Players.PlayerAdded:Connect(function(player)
    attachESP(player)
    onPlayerAdded(player)
end)

for _, player in pairs(Players:GetPlayers()) do
    if player ~= LocalPlayer then
        onPlayerAdded(player)
    end
end

Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in pairs(Players:GetPlayers()) do
    if player ~= LocalPlayer then
        player.CharacterAdded:Connect(function()
            task.wait(0.2)
            if hitboxEnabled then
                expandHitboxes(player)
            end
        end)
    end
end

-- Запуск лупов
RunService.RenderStepped:Connect(function()
    killAuraLoop()
    updateESP()
    autoFarmLoop()
end)

print("✅ EstiHUB v5 загружен! Left Shift — меню. Наслаждайся!")

Features & Information

хочу предоставить вам рабочий скрипт без краша для Solara-Xeno меню простое функции топовые меню нельзя закрыть это будет в будущем en: I want to provide you with a working script that doesn't crash for Solara-Xeno. The menu is simple, and the features are top-notch.

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts