Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- --- СЕРВИСЫ И ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ---
- local TweenService = game:GetService("TweenService")
- local CoreGui = game:GetService("CoreGui")
- local Workspace = game:GetService("Workspace")
- local Players = game:GetService("Players")
- local LocalPlayer = Players.LocalPlayer
- local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
- local isOpen = false
- local isEspActive = false
- local espFolder = nil
- local espConnections = {} -- Таблица для хранения активных подключений (сигналов)
- -- --- СОЗДАНИЕ GUI ---
- -- 1. Главный ScreenGui
- local MyScreenGui = Instance.new("ScreenGui")
- MyScreenGui.Name = "MyMenu_v2"
- MyScreenGui.Parent = PlayerGui
- MyScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
- -- 2. Кнопка Открытия (Круглая кнопка "M")
- local OpenButton = Instance.new("TextButton")
- OpenButton.Name = "OpenButton"
- OpenButton.Parent = MyScreenGui
- OpenButton.Size = UDim2.new(0, 60, 0, 60)
- OpenButton.Position = UDim2.new(0.02, 0, 0.5, -30)
- OpenButton.AnchorPoint = Vector2.new(0, 0.5)
- OpenButton.Text = "M"
- OpenButton.TextColor3 = Color3.fromRGB(255, 255, 255)
- OpenButton.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
- OpenButton.Font = Enum.Font.GothamSemibold
- OpenButton.TextSize = 24
- OpenButton.ZIndex = 3
- local btnCorner = Instance.new("UICorner")
- btnCorner.CornerRadius = UDim.new(1, 0)
- btnCorner.Parent = OpenButton
- local btnStroke = Instance.new("UIStroke")
- btnStroke.Color = Color3.fromRGB(80, 80, 80)
- btnStroke.Thickness = 2
- btnStroke.Parent = OpenButton
- -- 3. Главное Меню (Frame) - *** УВЕЛИЧЕНО ***
- local MenuFrame = Instance.new("Frame")
- MenuFrame.Name = "MenuFrame"
- MenuFrame.Parent = MyScreenGui
- MenuFrame.Size = UDim2.new(0, 400, 0, 350) -- *** НОВЫЙ РАЗМЕР ***
- MenuFrame.Position = UDim2.new(-0.5, 0, 0.5, 0)
- MenuFrame.AnchorPoint = Vector2.new(0, 0.5)
- MenuFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
- MenuFrame.BorderSizePixel = 0
- MenuFrame.ClipsDescendants = true -- Важно для табов
- MenuFrame.ZIndex = 2
- local frameCorner = Instance.new("UICorner")
- frameCorner.CornerRadius = UDim.new(0, 12)
- frameCorner.Parent = MenuFrame
- local frameStroke = Instance.new("UIStroke")
- frameStroke.Color = Color3.fromRGB(80, 80, 80)
- frameStroke.Thickness = 2
- frameStroke.Parent = MenuFrame
- local frameGradient = Instance.new("UIGradient")
- frameGradient.Color = ColorSequence.new({
- ColorSequenceKeypoint.new(0, Color3.fromRGB(50, 50, 50)),
- ColorSequenceKeypoint.new(1, Color3.fromRGB(30, 30, 30))
- })
- frameGradient.Rotation = 90
- frameGradient.Parent = MenuFrame
- -- 4. Заголовок Меню
- local TitleLabel = Instance.new("TextLabel")
- TitleLabel.Name = "Title"
- TitleLabel.Parent = MenuFrame
- TitleLabel.Size = UDim2.new(1, 0, 0, 40)
- TitleLabel.Position = UDim2.new(0, 0, 0, 0)
- TitleLabel.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
- TitleLabel.Text = "My Cool Menu"
- TitleLabel.Font = Enum.Font.GothamBold
- TitleLabel.TextSize = 18
- TitleLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
- local titleCorner = Instance.new("UICorner")
- titleCorner.CornerRadius = UDim.new(0, 12)
- titleCorner.Parent = TitleLabel
- -- 5. *** НОВОЕ: Кнопка Закрытия (Крестик) ***
- local CloseButton = Instance.new("TextButton")
- CloseButton.Name = "CloseButton"
- CloseButton.Parent = MenuFrame
- CloseButton.Size = UDim2.new(0, 25, 0, 25)
- CloseButton.Position = UDim2.new(1, -10, 0, 7.5) -- Справа вверху
- CloseButton.AnchorPoint = Vector2.new(1, 0)
- CloseButton.Text = "X"
- CloseButton.Font = Enum.Font.GothamBold
- CloseButton.TextSize = 16
- CloseButton.TextColor3 = Color3.fromRGB(200, 200, 200)
- CloseButton.BackgroundColor3 = Color3.fromRGB(25, 25, 25) -- Тот же цвет, что и шапка
- CloseButton.BackgroundTransparency = 0.5
- CloseButton.ZIndex = 3
- local closeCorner = Instance.new("UICorner")
- closeCorner.CornerRadius = UDim.new(0, 6)
- closeCorner.Parent = CloseButton
- -- Анимация наведения на крестик
- local closeHoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad)
- local closeHoverTween = TweenService:Create(CloseButton, closeHoverInfo, {
- BackgroundColor3 = Color3.fromRGB(200, 50, 50),
- BackgroundTransparency = 0,
- TextColor3 = Color3.fromRGB(255, 255, 255)
- })
- local closeUnhoverTween = TweenService:Create(CloseButton, closeHoverInfo, {
- BackgroundColor3 = Color3.fromRGB(25, 25, 25),
- BackgroundTransparency = 0.5,
- TextColor3 = Color3.fromRGB(200, 200, 200)
- })
- CloseButton.MouseEnter:Connect(function() closeHoverTween:Play() end)
- CloseButton.MouseLeave:Connect(function() closeUnhoverTween:Play() end)
- -- 6. *** НОВОЕ: СИСТЕМА ТАБОВ (ВКЛАДОК) ***
- -- Контейнер для кнопок-табов
- local TabContainer = Instance.new("Frame")
- TabContainer.Name = "TabContainer"
- TabContainer.Parent = MenuFrame
- TabContainer.Size = UDim2.new(1, 0, 0, 35)
- TabContainer.Position = UDim2.new(0, 0, 0, 40) -- Под заголовком
- TabContainer.BackgroundTransparency = 1
- -- Контейнер для содержимого табов
- local ContentContainer = Instance.new("Frame")
- ContentContainer.Name = "ContentContainer"
- ContentContainer.Parent = MenuFrame
- ContentContainer.Size = UDim2.new(1, -20, 1, -85) -- Отступы
- ContentContainer.Position = UDim2.new(0, 10, 0, 75) -- Под табами
- ContentContainer.BackgroundTransparency = 1
- -- Создаем табы
- local TabButtonVisuals = Instance.new("TextButton")
- TabButtonVisuals.Name = "TabVisuals"
- TabButtonVisuals.Parent = TabContainer
- TabButtonVisuals.Size = UDim2.new(0, 100, 1, 0)
- TabButtonVisuals.Position = UDim2.new(0, 10, 0, 0)
- TabButtonVisuals.Font = Enum.Font.GothamSemibold
- TabButtonVisuals.Text = "Visuals"
- TabButtonVisuals.TextSize = 16
- TabButtonVisuals.TextColor3 = Color3.fromRGB(255, 255, 255) -- *Активный*
- TabButtonVisuals.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
- local tabVisualsCorner = Instance.new("UICorner", TabButtonVisuals)
- tabVisualsCorner.CornerRadius = UDim.new(0, 6)
- local TabButtonMain = Instance.new("TextButton")
- TabButtonMain.Name = "TabMain"
- TabButtonMain.Parent = TabContainer
- TabButtonMain.Size = UDim2.new(0, 100, 1, 0)
- TabButtonMain.Position = UDim2.new(0, 115, 0, 0)
- TabButtonMain.Font = Enum.Font.Gotham
- TabButtonMain.Text = "Main"
- TabButtonMain.TextSize = 16
- TabButtonMain.TextColor3 = Color3.fromRGB(150, 150, 150) -- *Неактивный*
- TabButtonMain.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
- local tabMainCorner = Instance.new("UICorner", TabButtonMain)
- tabMainCorner.CornerRadius = UDim.new(0, 6)
- -- Создаем страницы (содержимое) для табов
- local VisualsFrame = Instance.new("Frame")
- VisualsFrame.Name = "VisualsFrame"
- VisualsFrame.Parent = ContentContainer
- VisualsFrame.Size = UDim2.new(1, 0, 1, 0)
- VisualsFrame.BackgroundTransparency = 1
- VisualsFrame.Visible = true -- Показываем по умолчанию
- local MainFrame = Instance.new("Frame")
- MainFrame.Name = "MainFrame"
- MainFrame.Parent = ContentContainer
- MainFrame.Size = UDim2.new(1, 0, 1, 0)
- MainFrame.BackgroundTransparency = 1
- MainFrame.Visible = false -- Скрываем
- -- Логика переключения табов
- local tabs = {TabButtonVisuals, TabButtonMain}
- local pages = {VisualsFrame, MainFrame}
- local function switchTab(tabToSelect)
- for i, tab in ipairs(tabs) do
- local page = pages[i]
- if tab == tabToSelect then
- -- Активировать
- page.Visible = true
- tab.Font = Enum.Font.GothamSemibold
- tab.TextColor3 = Color3.fromRGB(255, 255, 255)
- tab.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
- else
- -- Деактивировать
- page.Visible = false
- tab.Font = Enum.Font.Gotham
- tab.TextColor3 = Color3.fromRGB(150, 150, 150)
- tab.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
- end
- end
- end
- TabButtonVisuals.MouseButton1Click:Connect(function() switchTab(TabButtonVisuals) end)
- TabButtonMain.MouseButton1Click:Connect(function() switchTab(TabButtonMain) end)
- -- --- ИНТЕГРАЦИЯ ESP (Твой код) ---
- -- Кнопка-переключатель для ESP
- local espToggle = Instance.new("TextButton")
- espToggle.Name = "ESPToggle"
- espToggle.Parent = VisualsFrame -- *Добавляем во вкладку Visuals*
- espToggle.Size = UDim2.new(1, 0, 0, 30)
- espToggle.Position = UDim2.new(0, 0, 0, 10)
- espToggle.Font = Enum.Font.GothamSemibold
- espToggle.Text = "ESP (RemainingTime) [OFF]"
- espToggle.TextSize = 16
- espToggle.TextColor3 = Color3.fromRGB(255, 255, 255)
- espToggle.BackgroundColor3 = Color3.fromRGB(180, 50, 50) -- [OFF] цвет
- local espToggleCorner = Instance.new("UICorner", espToggle)
- espToggleCorner.CornerRadius = UDim.new(0, 8)
- -- Главная функция для Вкл/Выкл ESP
- -- Мы "оборачиваем" твой код в эту функцию
- local function ToggleESP(state)
- if state == true then
- -- --- ВКЛЮЧАЕМ ESP ---
- if isEspActive then return end
- isEspActive = true
- espToggle.Text = "ESP (RemainingTime) [ON]"
- espToggle.BackgroundColor3 = Color3.fromRGB(50, 180, 50) -- [ON] цвет
- -- Создаем папку, если ее нет
- espFolder = CoreGui:FindFirstChild("ESP_RemainingTimers") or Instance.new("Folder", CoreGui)
- espFolder.Name = "ESP_RemainingTimers"
- -- Настройки из твоего скрипта
- local textColor = Color3.fromRGB(0, 255, 255)
- local textSize = 12
- local maxY = 50
- local function isFirstFloor(part)
- return part and part.Position.Y <= maxY
- end
- -- Функция makeESP (немного изменена для очистки)
- local function makeESP(hitbox, sourceText)
- if not hitbox or not sourceText then return end
- local id = sourceText:GetFullName()
- if espFolder:FindFirstChild(id) or not isFirstFloor(hitbox) then return end
- local gui = Instance.new("BillboardGui")
- gui.Name = id
- gui.Adornee = hitbox
- gui.Size = UDim2.new(0, 100, 0, 20)
- gui.StudsOffset = Vector3.new(0, 3, 0)
- gui.AlwaysOnTop = true
- gui.Parent = espFolder -- Важно: родитель - наша папка
- local label = Instance.new("TextLabel")
- label.Size = UDim2.new(1, 0, 1, 0)
- label.BackgroundTransparency = 1
- label.TextColor3 = textColor
- label.TextStrokeTransparency = 0.5
- label.Font = Enum.Font.Gotham
- label.TextSize = textSize
- label.Text = sourceText.Text
- label.Parent = gui
- local propConn, ancConn
- propConn = sourceText:GetPropertyChangedSignal("Text"):Connect(function()
- if label and label.Parent then
- label.Text = sourceText.Text
- else
- if propConn then propConn:Disconnect() end
- if ancConn then ancConn:Disconnect() end
- end
- end)
- ancConn = sourceText.AncestryChanged:Connect(function(_, parent)
- if not parent then
- if gui then gui:Destroy() end
- if propConn then propConn:Disconnect() end
- if ancConn then ancConn:Disconnect() end
- end
- end)
- -- Сохраняем подключения, чтобы мы могли их "убить" при выключении
- table.insert(espConnections, propConn)
- table.insert(espConnections, ancConn)
- end
- -- Обработка существующих
- for _, obj in ipairs(Workspace:GetDescendants()) do
- if obj:IsA("TextLabel") and obj.Name == "RemainingTime" then
- local model = obj:FindFirstAncestorWhichIsA("Model")
- local hitbox = model and model:FindFirstChild("Hitbox")
- if hitbox then makeESP(hitbox, obj) end
- end
- end
- -- Обработка новых (главный сигнал)
- local descConn = Workspace.DescendantAdded:Connect(function(obj)
- if obj:IsA("TextLabel") and obj.Name == "RemainingTime" then
- local model = obj:FindFirstAncestorWhichIsA("Model")
- local hitbox = model and model:FindFirstChild("Hitbox")
- if hitbox then makeESP(hitbox, obj) end
- end
- end)
- -- Сохраняем главный сигнал
- table.insert(espConnections, descConn)
- elseif state == false then
- -- --- ВЫКЛЮЧАЕМ ESP ---
- if not isEspActive then return end
- isEspActive = false
- espToggle.Text = "ESP (RemainingTime) [OFF]"
- espToggle.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
- -- 1. Отключаем все сигналы (ОЧЕНЬ ВАЖНО)
- for _, conn in ipairs(espConnections) do
- if conn then conn:Disconnect() end
- end
- espConnections = {} -- Очищаем таблицу
- -- 2. Уничтожаем папку со всеми ESP
- if espFolder then
- espFolder:Destroy()
- espFolder = nil
- end
- end
- end
- -- Подключаем функцию к кнопке-переключателю
- espToggle.MouseButton1Click:Connect(function()
- ToggleESP(not isEspActive) -- Инвертируем состояние (вкл -> выкл, выкл -> вкл)
- end)
- -- --- ГЛАВНАЯ ЛОГИКА АНИМАЦИЙ (Open/Close) ---
- local animationInfo = TweenInfo.new(0.4, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)
- local closedPosition = UDim2.new(-0.5, 0, 0.5, 0)
- local openPosition = UDim2.new(0.02, 70, 0.5, 0)
- local openTween = TweenService:Create(MenuFrame, animationInfo, {Position = openPosition})
- local closeTween = TweenService:Create(MenuFrame, animationInfo, {Position = closedPosition})
- -- Анимация наведения на кнопку "M"
- local hoverInfo = TweenInfo.new(0.2, Enum.EasingStyle.Quad)
- local originalBtnColor = OpenButton.BackgroundColor3
- local hoverBtnColor = Color3.fromRGB(60, 60, 60)
- local hoverTween = TweenService:Create(OpenButton, hoverInfo, {BackgroundColor3 = hoverBtnColor})
- local unhoverTween = TweenService:Create(OpenButton, hoverInfo, {BackgroundColor3 = originalBtnColor})
- OpenButton.MouseEnter:Connect(function() hoverTween:Play() end)
- OpenButton.MouseLeave:Connect(function() unhoverTween:Play() end)
- -- Открытие/Закрытие по кнопке "M"
- OpenButton.MouseButton1Click:Connect(function()
- if isOpen then
- closeTween:Play()
- isOpen = false
- else
- openTween:Play()
- isOpen = true
- end
- end)
- -- *** НОВОЕ: ЛОГИКА ЗАКРЫТИЯ (КРЕСТИК) ***
- CloseButton.MouseButton1Click:Connect(function()
- -- Сначала выключаем все функции
- ToggleESP(false)
- -- Затем уничтожаем GUI
- MyScreenGui:Destroy()
- end)
- -- *** НОВОЕ: Безопасная очистка при выгрузке скрипта ***
- -- Если GUI будет уничтожен (например, другим скриптом),
- -- мы гарантируем, что ESP выключится и не вызовет ошибок.
- MyScreenGui.Destroying:Connect(function()
- ToggleESP(false)
- -- (Здесь можно добавить очистку для других функций в будущем)
- end)
Advertisement
Add Comment
Please, Sign In to add comment