Загрузка данных
-- // BoatHelper | Premium Script
-- // Создано для Roblox
local Players = game:GetService("Players")
local Player = Players.LocalPlayer
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
-- // Функции, которые будут отключаться при уничтожении GUI
local ActiveFunctions = {
ESP = {
Enabled = false,
Connection = nil,
PlayersData = {},
Name = "ESP Игроков",
Description = "Подсвечивает игроков через стены. Красный - Knife, Синий - Dodge, Белый - ничего."
},
Aimbot = {
Enabled = false,
Connection = nil,
IgnoredPlayers = {},
AimMode = "Closest",
Name = "Aimbot",
Description = "Автоматически наводится на игрока. Режимы: Ближайший или По взгляду."
},
BallsESP = {
Enabled = false,
Connection = nil,
BallsData = {},
Name = "ESP Шариков",
Description = "Подсвечивает упавшие шарики, которые можно собирать на E."
}
}
-- // Окно выбора игроков для игнорирования и настроек Aimbot
local IgnoreListFrame = nil
-- // Функция проверки инвентаря игрока
local function CheckPlayerInventory(player)
local hasKnife = false
local hasDodge = false
local backpack = player:FindFirstChild("Backpack")
if backpack then
for _, item in pairs(backpack:GetChildren()) do
local itemName = item.Name:lower()
if itemName:find("knife") or itemName:find("нож") then
hasKnife = true
end
if itemName:find("dodge") or itemName:find("уклон") then
hasDodge = true
end
end
end
local character = player.Character
if character then
for _, item in pairs(character:GetChildren()) do
if item:IsA("Tool") then
local itemName = item.Name:lower()
if itemName:find("knife") or itemName:find("нож") then
hasKnife = true
end
if itemName:find("dodge") or itemName:find("уклон") then
hasDodge = true
end
end
end
end
return hasKnife, hasDodge
end
-- // Функция поиска шариков в мире
local function FindBalls()
local balls = {}
-- Поиск по всем объектам в Workspace
for _, object in pairs(Workspace:GetDescendants()) do
local objectName = object.Name:lower()
-- Проверяем различные названия шариков
if object:IsA("BasePart") or object:IsA("Model") then
if objectName:find("ball")
or objectName:find("orb")
or objectName:find("sphere")
or objectName:find("шар")
or objectName:find("мяч") then
-- Проверяем, что шарик можно собрать (не закреплен, находится низко)
if object:IsA("BasePart") then
if not object.Anchored and object.Position.Y < 50 then
table.insert(balls, object)
end
elseif object:IsA("Model") then
local primaryPart = object.PrimaryPart
if primaryPart and not primaryPart.Anchored and primaryPart.Position.Y < 50 then
table.insert(balls, object)
end
end
end
end
end
return balls
end
-- // Очистка ESP для конкретного игрока
local function CleanupPlayerESP(player)
local data = ActiveFunctions.ESP.PlayersData[player]
if not data then return end
if data.Highlight then
data.Highlight:Destroy()
data.Highlight = nil
end
if data.Billboard then
data.Billboard:Destroy()
data.Billboard = nil
end
if data.UpdateConnection then
data.UpdateConnection:Disconnect()
data.UpdateConnection = nil
end
if data.CharacterConnection then
data.CharacterConnection:Disconnect()
data.CharacterConnection = nil
end
ActiveFunctions.ESP.PlayersData[player] = nil
end
-- // Создание ESP для игрока
local function SetupPlayerESP(player)
if player == Player then return end
CleanupPlayerESP(player)
ActiveFunctions.ESP.PlayersData[player] = {
Highlight = nil,
Billboard = nil,
UpdateConnection = nil,
CharacterConnection = nil
}
local function CreateESPVisuals(character)
if not character or not ActiveFunctions.ESP.Enabled then return end
local data = ActiveFunctions.ESP.PlayersData[player]
if not data then return end
if data.Highlight then
data.Highlight:Destroy()
data.Highlight = nil
end
if data.Billboard then
data.Billboard:Destroy()
data.Billboard = nil
end
if data.UpdateConnection then
data.UpdateConnection:Disconnect()
data.UpdateConnection = nil
end
local humanoidRootPart = character:WaitForChild("HumanoidRootPart", 5)
local humanoid = character:WaitForChild("Humanoid", 5)
if not humanoidRootPart or not humanoid then return end
local hasKnife, hasDodge = CheckPlayerInventory(player)
local highlightColor
if hasKnife then
highlightColor = Color3.fromRGB(255, 0, 0)
elseif hasDodge then
highlightColor = Color3.fromRGB(0, 100, 255)
else
highlightColor = Color3.fromRGB(255, 255, 255)
end
local highlight = Instance.new("Highlight")
highlight.Name = "ESP_Highlight"
highlight.FillColor = highlightColor
highlight.FillTransparency = 0.5
highlight.OutlineColor = highlightColor
highlight.OutlineTransparency = 0
highlight.Adornee = character
highlight.Parent = character
data.Highlight = highlight
local billboard = Instance.new("BillboardGui")
billboard.Name = "ESP_Billboard"
billboard.Adornee = humanoidRootPart
billboard.Parent = character
billboard.Size = UDim2.new(0, 300, 0, 45)
billboard.StudsOffset = Vector3.new(0, 3, 0)
billboard.AlwaysOnTop = true
billboard.MaxDistance = 1000
local textLabel = Instance.new("TextLabel")
textLabel.Parent = billboard
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundTransparency = 1
textLabel.TextColor3 = highlightColor
textLabel.Font = Enum.Font.GothamBold
textLabel.TextSize = 14
textLabel.TextStrokeTransparency = 0.3
textLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
textLabel.Text = "Загрузка..."
data.Billboard = billboard
local function UpdateInfo()
if not ActiveFunctions.ESP.Enabled then return end
if not player.Parent then return end
local localPlayer = Player
local localCharacter = localPlayer.Character
if not localCharacter then return end
local localRoot = localCharacter:FindFirstChild("HumanoidRootPart")
if not localRoot then return end
local targetCharacter = player.Character
if not targetCharacter then return end
local targetRoot = targetCharacter:FindFirstChild("HumanoidRootPart")
local targetHumanoid = targetCharacter:FindFirstChild("Humanoid")
if not targetRoot or not targetHumanoid then
textLabel.Text = player.DisplayName or player.Name
return
end
local distance = (targetRoot.Position - localRoot.Position).Magnitude
local health = math.floor(targetHumanoid.Health)
local currentHasKnife, currentHasDodge = CheckPlayerInventory(player)
local itemInfo = ""
if currentHasKnife then
itemInfo = " [KNIFE]"
highlightColor = Color3.fromRGB(255, 0, 0)
elseif currentHasDodge then
itemInfo = " [DODGE]"
highlightColor = Color3.fromRGB(0, 100, 255)
else
highlightColor = Color3.fromRGB(255, 255, 255)
end
if data.Highlight then
data.Highlight.FillColor = highlightColor
data.Highlight.OutlineColor = highlightColor
end
textLabel.TextColor3 = highlightColor
textLabel.Text = string.format("%s | %.0fstuds | %dHP%s",
player.DisplayName or player.Name,
distance,
health,
itemInfo
)
end
data.UpdateConnection = RunService.Heartbeat:Connect(function()
if not ActiveFunctions.ESP.Enabled then
if data.UpdateConnection then
data.UpdateConnection:Disconnect()
data.UpdateConnection = nil
end
return
end
UpdateInfo()
end)
end
local function OnCharacterAdded(character)
if ActiveFunctions.ESP.Enabled then
CreateESPVisuals(character)
end
end
if player.Character then
CreateESPVisuals(player.Character)
end
local data = ActiveFunctions.ESP.PlayersData[player]
if data then
data.CharacterConnection = player.CharacterAdded:Connect(OnCharacterAdded)
end
end
-- // Сканирование всех игроков для ESP
local function ScanAllPlayers()
for _, player in pairs(Players:GetPlayers()) do
if player ~= Player then
SetupPlayerESP(player)
end
end
end
-- // Очистка всего ESP игроков
local function ClearAllESP()
for player, _ in pairs(ActiveFunctions.ESP.PlayersData) do
CleanupPlayerESP(player)
end
ActiveFunctions.ESP.PlayersData = {}
end
-- // Очистка ESP шариков
local function ClearBallsESP()
for _, data in pairs(ActiveFunctions.BallsESP.BallsData) do
if data.Highlight then
data.Highlight:Destroy()
end
if data.Billboard then
data.Billboard:Destroy()
end
end
ActiveFunctions.BallsESP.BallsData = {}
end
-- // Создание ESP для шарика
local function CreateBallESP(ball)
-- Проверяем, что для этого шарика еще нет ESP
if ActiveFunctions.BallsESP.BallsData[ball] then
return
end
local highlight = Instance.new("Highlight")
highlight.Name = "Ball_Highlight"
highlight.FillColor = Color3.fromRGB(255, 255, 0) -- Желтый для шариков
highlight.FillTransparency = 0.3
highlight.OutlineColor = Color3.fromRGB(255, 255, 0)
highlight.OutlineTransparency = 0
local billboard = Instance.new("BillboardGui")
billboard.Size = UDim2.new(0, 100, 0, 20)
billboard.StudsOffset = Vector3.new(0, 2, 0)
billboard.AlwaysOnTop = true
billboard.MaxDistance = 500
local textLabel = Instance.new("TextLabel")
textLabel.Parent = billboard
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundTransparency = 1
textLabel.TextColor3 = Color3.fromRGB(255, 255, 0)
textLabel.Font = Enum.Font.GothamBold
textLabel.TextSize = 14
textLabel.TextStrokeTransparency = 0.3
textLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0)
textLabel.Text = "ШАРИК"
if ball:IsA("BasePart") then
highlight.Adornee = ball
highlight.Parent = ball
billboard.Adornee = ball
billboard.Parent = ball
elseif ball:IsA("Model") then
highlight.Adornee = ball
highlight.Parent = ball
billboard.Adornee = ball.PrimaryPart or ball
billboard.Parent = ball
end
ActiveFunctions.BallsESP.BallsData[ball] = {
Highlight = highlight,
Billboard = billboard,
Ball = ball
}
end
-- // Обновление ESP шариков
local function UpdateBallsESP()
if not ActiveFunctions.BallsESP.Enabled then return end
-- Находим все шарики
local currentBalls = FindBalls()
local currentBallsSet = {}
-- Создаем ESP для новых шариков
for _, ball in pairs(currentBalls) do
currentBallsSet[ball] = true
if not ActiveFunctions.BallsESP.BallsData[ball] then
CreateBallESP(ball)
end
end
-- Удаляем ESP для исчезнувших шариков
for ball, data in pairs(ActiveFunctions.BallsESP.BallsData) do
if not currentBallsSet[ball] or not ball.Parent then
if data.Highlight then
data.Highlight:Destroy()
end
if data.Billboard then
data.Billboard:Destroy()
end
ActiveFunctions.BallsESP.BallsData[ball] = nil
end
end
end
-- // Aimbot - получение цели в зависимости от режима
local function GetTarget()
local localCharacter = Player.Character
if not localCharacter then return nil end
local localRoot = localCharacter:FindFirstChild("HumanoidRootPart")
if not localRoot then return nil end
if ActiveFunctions.Aimbot.AimMode == "Closest" then
local closestPlayer = nil
local shortestDistance = math.huge
for _, targetPlayer in pairs(Players:GetPlayers()) do
if targetPlayer ~= Player
and targetPlayer.Character
and not ActiveFunctions.Aimbot.IgnoredPlayers[targetPlayer.UserId] then
local targetHumanoid = targetPlayer.Character:FindFirstChild("Humanoid")
local targetRoot = targetPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetHumanoid and targetRoot and targetHumanoid.Health > 0 then
local distance = (localRoot.Position - targetRoot.Position).Magnitude
if distance < shortestDistance then
shortestDistance = distance
closestPlayer = targetPlayer
end
end
end
end
return closestPlayer
elseif ActiveFunctions.Aimbot.AimMode == "LookAt" then
local camera = Workspace.CurrentCamera
if not camera then return nil end
local bestTarget = nil
local bestDot = -2
local cameraCFrame = camera.CFrame
local cameraForward = cameraCFrame.LookVector
for _, targetPlayer in pairs(Players:GetPlayers()) do
if targetPlayer ~= Player
and targetPlayer.Character
and not ActiveFunctions.Aimbot.IgnoredPlayers[targetPlayer.UserId] then
local targetHumanoid = targetPlayer.Character:FindFirstChild("Humanoid")
local targetRoot = targetPlayer.Character:FindFirstChild("HumanoidRootPart")
if targetHumanoid and targetRoot and targetHumanoid.Health > 0 then
local directionToTarget = (targetRoot.Position - cameraCFrame.Position).Unit
local dotProduct = cameraForward:Dot(directionToTarget)
if dotProduct > 0.5 then
if dotProduct > bestDot then
bestDot = dotProduct
bestTarget = targetPlayer
end
end
end
end
end
return bestTarget
end
return nil
end
-- // Aimbot - наведение на цель
local function AimAtTarget()
local target = GetTarget()
if not target then return end
local targetCharacter = target.Character
if not targetCharacter then return end
local targetHead = targetCharacter:FindFirstChild("Head")
if not targetHead then return end
local targetPosition = targetHead.Position
local camera = Workspace.CurrentCamera
if not camera then return end
local cameraPosition = camera.CFrame.Position
local lookAt = CFrame.new(cameraPosition, targetPosition)
camera.CFrame = camera.CFrame:Lerp(lookAt, 0.3)
end
-- // Создание окна выбора игроков и настроек Aimbot
local function CreateIgnoreListWindow(mainFrame)
if IgnoreListFrame then
IgnoreListFrame:Destroy()
end
IgnoreListFrame = Instance.new("Frame")
IgnoreListFrame.Name = "IgnoreListFrame"
IgnoreListFrame.Parent = mainFrame.Parent
IgnoreListFrame.Size = UDim2.new(0, 250, 0, 350)
IgnoreListFrame.Position = UDim2.new(0.5, 180, 0.5, -175)
IgnoreListFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
IgnoreListFrame.BorderSizePixel = 1
IgnoreListFrame.BorderColor3 = Color3.fromRGB(60, 60, 60)
IgnoreListFrame.Active = true
IgnoreListFrame.Visible = true
-- Заголовок
local TitleBar2 = Instance.new("Frame")
TitleBar2.Name = "TitleBar"
TitleBar2.Parent = IgnoreListFrame
TitleBar2.Size = UDim2.new(1, 0, 0, 25)
TitleBar2.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
TitleBar2.BorderSizePixel = 1
TitleBar2.BorderColor3 = Color3.fromRGB(60, 60, 60)
local TitleText2 = Instance.new("TextLabel")
TitleText2.Parent = TitleBar2
TitleText2.Size = UDim2.new(1, -30, 1, 0)
TitleText2.Position = UDim2.new(0, 10, 0, 0)
TitleText2.BackgroundTransparency = 1
TitleText2.Text = "Настройки Aimbot"
TitleText2.TextColor3 = Color3.fromRGB(200, 200, 200)
TitleText2.Font = Enum.Font.GothamBold
TitleText2.TextSize = 13
TitleText2.TextXAlignment = Enum.TextXAlignment.Left
-- Кнопка закрыть
local CloseButton = Instance.new("TextButton")
CloseButton.Parent = TitleBar2
CloseButton.Size = UDim2.new(0, 20, 0, 20)
CloseButton.Position = UDim2.new(1, -25, 0, 2)
CloseButton.BackgroundColor3 = Color3.fromRGB(150, 30, 30)
CloseButton.BorderSizePixel = 1
CloseButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
CloseButton.Text = "X"
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.Font = Enum.Font.GothamBold
CloseButton.TextSize = 14
CloseButton.AutoButtonColor = false
CloseButton.MouseButton1Click:Connect(function()
IgnoreListFrame:Destroy()
IgnoreListFrame = nil
end)
-- Секция выбора режима
local ModeLabel = Instance.new("TextLabel")
ModeLabel.Parent = IgnoreListFrame
ModeLabel.Size = UDim2.new(1, -20, 0, 20)
ModeLabel.Position = UDim2.new(0, 10, 0, 35)
ModeLabel.BackgroundTransparency = 1
ModeLabel.Text = "Режим Aimbot:"
ModeLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
ModeLabel.Font = Enum.Font.Gotham
ModeLabel.TextSize = 12
ModeLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Контейнер для кнопок режимов
local ModeButtonsContainer = Instance.new("Frame")
ModeButtonsContainer.Parent = IgnoreListFrame
ModeButtonsContainer.Size = UDim2.new(1, -20, 0, 30)
ModeButtonsContainer.Position = UDim2.new(0, 10, 0, 58)
ModeButtonsContainer.BackgroundTransparency = 1
-- Кнопка режима "Ближайший"
local ClosestButton = Instance.new("TextButton")
ClosestButton.Name = "ClosestButton"
ClosestButton.Parent = ModeButtonsContainer
ClosestButton.Size = UDim2.new(0.5, -3, 1, 0)
ClosestButton.Position = UDim2.new(0, 0, 0, 0)
ClosestButton.BackgroundColor3 = ActiveFunctions.Aimbot.AimMode == "Closest"
and Color3.fromRGB(30, 150, 30)
or Color3.fromRGB(60, 60, 60)
ClosestButton.BorderSizePixel = 1
ClosestButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
ClosestButton.Text = "Ближайший"
ClosestButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ClosestButton.Font = Enum.Font.GothamBold
ClosestButton.TextSize = 11
ClosestButton.AutoButtonColor = false
ClosestButton.MouseButton1Click:Connect(function()
ActiveFunctions.Aimbot.AimMode = "Closest"
ClosestButton.BackgroundColor3 = Color3.fromRGB(30, 150, 30)
LookAtButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
print("BoatHelper: Режим Aimbot - Ближайший")
end)
-- Кнопка режима "По взгляду"
local LookAtButton = Instance.new("TextButton")
LookAtButton.Name = "LookAtButton"
LookAtButton.Parent = ModeButtonsContainer
LookAtButton.Size = UDim2.new(0.5, -3, 1, 0)
LookAtButton.Position = UDim2.new(0.5, 3, 0, 0)
LookAtButton.BackgroundColor3 = ActiveFunctions.Aimbot.AimMode == "LookAt"
and Color3.fromRGB(30, 150, 30)
or Color3.fromRGB(60, 60, 60)
LookAtButton.BorderSizePixel = 1
LookAtButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
LookAtButton.Text = "По взгляду"
LookAtButton.TextColor3 = Color3.fromRGB(255, 255, 255)
LookAtButton.Font = Enum.Font.GothamBold
LookAtButton.TextSize = 11
LookAtButton.AutoButtonColor = false
LookAtButton.MouseButton1Click:Connect(function()
ActiveFunctions.Aimbot.AimMode = "LookAt"
LookAtButton.BackgroundColor3 = Color3.fromRGB(30, 150, 30)
ClosestButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
print("BoatHelper: Режим Aimbot - По взгляду")
end)
-- Разделитель
local DividerMode = Instance.new("Frame")
DividerMode.Parent = IgnoreListFrame
DividerMode.Size = UDim2.new(1, -20, 0, 1)
DividerMode.Position = UDim2.new(0, 10, 0, 98)
DividerMode.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
DividerMode.BorderSizePixel = 0
-- Заголовок списка игнорирования
local IgnoreLabel = Instance.new("TextLabel")
IgnoreLabel.Parent = IgnoreListFrame
IgnoreLabel.Size = UDim2.new(1, -20, 0, 20)
IgnoreLabel.Position = UDim2.new(0, 10, 0, 108)
IgnoreLabel.BackgroundTransparency = 1
IgnoreLabel.Text = "Игнорируемые игроки:"
IgnoreLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
IgnoreLabel.Font = Enum.Font.Gotham
IgnoreLabel.TextSize = 12
IgnoreLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Контейнер со списком игроков
local ScrollingFrame = Instance.new("ScrollingFrame")
ScrollingFrame.Parent = IgnoreListFrame
ScrollingFrame.Size = UDim2.new(1, -20, 1, -165)
ScrollingFrame.Position = UDim2.new(0, 10, 0, 130)
ScrollingFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
ScrollingFrame.BorderSizePixel = 1
ScrollingFrame.BorderColor3 = Color3.fromRGB(60, 60, 60)
ScrollingFrame.ScrollBarThickness = 5
ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0, 0)
local UIListLayout = Instance.new("UIListLayout")
UIListLayout.Parent = ScrollingFrame
UIListLayout.SortOrder = Enum.SortOrder.Name
UIListLayout.Padding = UDim.new(0, 2)
-- Кнопка обновления списка
local RefreshButton = Instance.new("TextButton")
RefreshButton.Parent = IgnoreListFrame
RefreshButton.Size = UDim2.new(1, -20, 0, 25)
RefreshButton.Position = UDim2.new(0, 10, 1, -35)
RefreshButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
RefreshButton.BorderSizePixel = 1
RefreshButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
RefreshButton.Text = "Обновить список"
RefreshButton.TextColor3 = Color3.fromRGB(255, 255, 255)
RefreshButton.Font = Enum.Font.Gotham
RefreshButton.TextSize = 12
RefreshButton.AutoButtonColor = false
RefreshButton.MouseEnter:Connect(function()
RefreshButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
end)
RefreshButton.MouseLeave:Connect(function()
RefreshButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
end)
-- Функция обновления списка игроков
local function UpdatePlayerList()
for _, child in pairs(ScrollingFrame:GetChildren()) do
if child:IsA("Frame") then
child:Destroy()
end
end
local yOffset = 0
for _, targetPlayer in pairs(Players:GetPlayers()) do
if targetPlayer ~= Player then
local isIgnored = ActiveFunctions.Aimbot.IgnoredPlayers[targetPlayer.UserId] or false
local PlayerRow = Instance.new("Frame")
PlayerRow.Parent = ScrollingFrame
PlayerRow.Size = UDim2.new(1, 0, 0, 25)
PlayerRow.BackgroundColor3 = isIgnored and Color3.fromRGB(120, 40, 40) or Color3.fromRGB(50, 50, 50)
PlayerRow.BorderSizePixel = 1
PlayerRow.BorderColor3 = Color3.fromRGB(80, 80, 80)
local PlayerName = Instance.new("TextLabel")
PlayerName.Parent = PlayerRow
PlayerName.Size = UDim2.new(1, -80, 1, 0)
PlayerName.Position = UDim2.new(0, 5, 0, 0)
PlayerName.BackgroundTransparency = 1
PlayerName.Text = targetPlayer.DisplayName or targetPlayer.Name
PlayerName.TextColor3 = Color3.fromRGB(255, 255, 255)
PlayerName.Font = Enum.Font.Gotham
PlayerName.TextSize = 12
PlayerName.TextXAlignment = Enum.TextXAlignment.Left
local ToggleIgnore = Instance.new("TextButton")
ToggleIgnore.Parent = PlayerRow
ToggleIgnore.Size = UDim2.new(0, 70, 0, 20)
ToggleIgnore.Position = UDim2.new(1, -75, 0, 2)
ToggleIgnore.BackgroundColor3 = isIgnored and Color3.fromRGB(30, 150, 30) or Color3.fromRGB(150, 30, 30)
ToggleIgnore.BorderSizePixel = 1
ToggleIgnore.BorderColor3 = Color3.fromRGB(100, 100, 100)
ToggleIgnore.Text = isIgnored and "Убрать" or "Игнорить"
ToggleIgnore.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleIgnore.Font = Enum.Font.GothamBold
ToggleIgnore.TextSize = 10
ToggleIgnore.AutoButtonColor = false
ToggleIgnore.MouseButton1Click:Connect(function()
if ActiveFunctions.Aimbot.IgnoredPlayers[targetPlayer.UserId] then
ActiveFunctions.Aimbot.IgnoredPlayers[targetPlayer.UserId] = nil
ToggleIgnore.BackgroundColor3 = Color3.fromRGB(150, 30, 30)
ToggleIgnore.Text = "Игнорить"
PlayerRow.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
print("BoatHelper: " .. targetPlayer.Name .. " убран из игнорирования")
else
ActiveFunctions.Aimbot.IgnoredPlayers[targetPlayer.UserId] = true
ToggleIgnore.BackgroundColor3 = Color3.fromRGB(30, 150, 30)
ToggleIgnore.Text = "Убрать"
PlayerRow.BackgroundColor3 = Color3.fromRGB(120, 40, 40)
print("BoatHelper: " .. targetPlayer.Name .. " добавлен в игнорирование")
end
end)
yOffset = yOffset + 27
end
end
ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0, yOffset)
end
RefreshButton.MouseButton1Click:Connect(function()
UpdatePlayerList()
end)
-- Перетаскивание окна настроек
local draggingIgnore = false
local dragStartIgnore, startPosIgnore
TitleBar2.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
draggingIgnore = true
dragStartIgnore = input.Position
startPosIgnore = IgnoreListFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
draggingIgnore = false
end
end)
end
end)
TitleBar2.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and draggingIgnore then
local delta = input.Position - dragStartIgnore
IgnoreListFrame.Position = UDim2.new(startPosIgnore.X.Scale, startPosIgnore.X.Offset + delta.X, startPosIgnore.Y.Scale, startPosIgnore.Y.Offset + delta.Y)
end
end)
UpdatePlayerList()
end
-- // Создание GUI
local function CreateBoatHelper()
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "BoatHelper"
ScreenGui.Parent = Player:WaitForChild("PlayerGui")
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Parent = ScreenGui
MainFrame.Size = UDim2.new(0, 320, 0, 250)
MainFrame.Position = UDim2.new(0.5, -160, 0.5, -125)
MainFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
MainFrame.BorderSizePixel = 1
MainFrame.BorderColor3 = Color3.fromRGB(60, 60, 60)
MainFrame.Active = true
local TitleBar = Instance.new("Frame")
TitleBar.Name = "TitleBar"
TitleBar.Parent = MainFrame
TitleBar.Size = UDim2.new(1, 0, 0, 30)
TitleBar.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
TitleBar.BorderSizePixel = 1
TitleBar.BorderColor3 = Color3.fromRGB(60, 60, 60)
local TitleText = Instance.new("TextLabel")
TitleText.Parent = TitleBar
TitleText.Size = UDim2.new(1, -10, 1, 0)
TitleText.Position = UDim2.new(0, 10, 0, 0)
TitleText.BackgroundTransparency = 1
TitleText.Text = "BoatHelper"
TitleText.TextColor3 = Color3.fromRGB(200, 200, 200)
TitleText.Font = Enum.Font.GothamBold
TitleText.TextSize = 14
TitleText.TextXAlignment = Enum.TextXAlignment.Left
local Divider1 = Instance.new("Frame")
Divider1.Parent = MainFrame
Divider1.Size = UDim2.new(1, 0, 0, 1)
Divider1.Position = UDim2.new(0, 0, 0, 30)
Divider1.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
Divider1.BorderSizePixel = 0
-- // Функция создания строки с функцией
local function CreateFunctionRow(yPos, funcData, toggleCallback, hasSettings)
local Container = Instance.new("Frame")
Container.Parent = MainFrame
Container.Size = UDim2.new(1, -20, 0, 40)
Container.Position = UDim2.new(0, 10, 0, yPos)
Container.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
Container.BorderSizePixel = 1
Container.BorderColor3 = Color3.fromRGB(60, 60, 60)
local FuncInfo = Instance.new("TextLabel")
FuncInfo.Parent = Container
FuncInfo.Size = UDim2.new(1, hasSettings and -110 or -60, 1, 0)
FuncInfo.Position = UDim2.new(0, 10, 0, 0)
FuncInfo.BackgroundTransparency = 1
FuncInfo.Text = funcData.Name .. "\n" .. funcData.Description
FuncInfo.TextColor3 = Color3.fromRGB(180, 180, 180)
FuncInfo.Font = Enum.Font.Gotham
FuncInfo.TextSize = 11
FuncInfo.TextXAlignment = Enum.TextXAlignment.Left
FuncInfo.TextYAlignment = Enum.TextYAlignment.Center
FuncInfo.TextWrapped = true
-- Кнопка настроек (если есть)
local SettingsButton
if hasSettings then
SettingsButton = Instance.new("TextButton")
SettingsButton.Parent = Container
SettingsButton.Size = UDim2.new(0, 40, 0, 20)
SettingsButton.Position = UDim2.new(1, -100, 0.5, -10)
SettingsButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
SettingsButton.BorderSizePixel = 1
SettingsButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
SettingsButton.Text = "Настр"
SettingsButton.TextColor3 = Color3.fromRGB(255, 255, 255)
SettingsButton.Font = Enum.Font.Gotham
SettingsButton.TextSize = 10
SettingsButton.AutoButtonColor = false
SettingsButton.MouseEnter:Connect(function()
SettingsButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
end)
SettingsButton.MouseLeave:Connect(function()
SettingsButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
end)
end
local ToggleButton = Instance.new("TextButton")
ToggleButton.Name = "ToggleButton"
ToggleButton.Parent = Container
ToggleButton.Size = UDim2.new(0, 40, 0, 20)
ToggleButton.Position = UDim2.new(1, -50, 0.5, -10)
ToggleButton.BackgroundColor3 = Color3.fromRGB(150, 30, 30)
ToggleButton.BorderSizePixel = 1
ToggleButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
ToggleButton.Text = "OFF"
ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleButton.Font = Enum.Font.GothamBold
ToggleButton.TextSize = 11
ToggleButton.AutoButtonColor = false
local function UpdateButtonState()
if funcData.Enabled then
ToggleButton.BackgroundColor3 = Color3.fromRGB(30, 150, 30)
ToggleButton.Text = "ON"
else
ToggleButton.BackgroundColor3 = Color3.fromRGB(150, 30, 30)
ToggleButton.Text = "OFF"
end
end
ToggleButton.MouseButton1Click:Connect(function()
funcData.Enabled = not funcData.Enabled
UpdateButtonState()
if toggleCallback then
toggleCallback(funcData.Enabled)
end
end)
return Container, ToggleButton, UpdateButtonState, SettingsButton
end
-- // Создаем строку для ESP
local espContainer, espToggle, espUpdate = CreateFunctionRow(45, ActiveFunctions.ESP, function(enabled)
if enabled then
print("BoatHelper: ESP ВКЛЮЧЕН")
ScanAllPlayers()
ActiveFunctions.ESP.Connection = Players.PlayerAdded:Connect(function(newPlayer)
if ActiveFunctions.ESP.Enabled and newPlayer ~= Player then
SetupPlayerESP(newPlayer)
end
end)
Players.PlayerRemoving:Connect(function(leavingPlayer)
if ActiveFunctions.ESP.PlayersData[leavingPlayer] then
CleanupPlayerESP(leavingPlayer)
end
end)
else
print("BoatHelper: ESP ВЫКЛЮЧЕН")
if ActiveFunctions.ESP.Connection then
ActiveFunctions.ESP.Connection:Disconnect()
ActiveFunctions.ESP.Connection = nil
end
ClearAllESP()
end
end, false)
-- // Разделитель между функциями
local DividerBetween = Instance.new("Frame")
DividerBetween.Parent = MainFrame
DividerBetween.Size = UDim2.new(1, 0, 0, 1)
DividerBetween.Position = UDim2.new(0, 0, 0, 95)
DividerBetween.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
DividerBetween.BorderSizePixel = 0
-- // Создаем строку для Aimbot с кнопкой настроек
local aimbotContainer, aimbotToggle, aimbotUpdate, settingsButton = CreateFunctionRow(105, ActiveFunctions.Aimbot, function(enabled)
if enabled then
print("BoatHelper: Aimbot ВКЛЮЧЕН (Режим: " .. ActiveFunctions.Aimbot.AimMode .. ")")
ActiveFunctions.Aimbot.Connection = RunService.RenderStepped:Connect(function()
if ActiveFunctions.Aimbot.Enabled then
AimAtTarget()
end
end)
else
print("BoatHelper: Aimbot ВЫКЛЮЧЕН")
if ActiveFunctions.Aimbot.Connection then
ActiveFunctions.Aimbot.Connection:Disconnect()
ActiveFunctions.Aimbot.Connection = nil
end
end
end, true)
-- Обработчик кнопки настроек Aimbot
if settingsButton then
settingsButton.MouseButton1Click:Connect(function()
CreateIgnoreListWindow(MainFrame)
end)
end
-- // Разделитель между Aimbot и BallsESP
local DividerBetween2 = Instance.new("Frame")
DividerBetween2.Parent = MainFrame
DividerBetween2.Size = UDim2.new(1, 0, 0, 1)
DividerBetween2.Position = UDim2.new(0, 0, 0, 155)
DividerBetween2.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
DividerBetween2.BorderSizePixel = 0
-- // Создаем строку для BallsESP
local ballsESPContainer, ballsESPToggle, ballsESPUpdate = CreateFunctionRow(165, ActiveFunctions.BallsESP, function(enabled)
if enabled then
print("BoatHelper: ESP Шариков ВКЛЮЧЕН")
UpdateBallsESP()
ActiveFunctions.BallsESP.Connection = RunService.Heartbeat:Connect(function()
if ActiveFunctions.BallsESP.Enabled then
UpdateBallsESP()
task.wait(2) -- Обновляем каждые 2 секунды
end
end)
else
print("BoatHelper: ESP Шариков ВЫКЛЮЧЕН")
if ActiveFunctions.BallsESP.Connection then
ActiveFunctions.BallsESP.Connection:Disconnect()
ActiveFunctions.BallsESP.Connection = nil
end
ClearBallsESP()
end
end, false)
-- // Разделитель перед кнопкой Destroy
local Divider3 = Instance.new("Frame")
Divider3.Parent = MainFrame
Divider3.Size = UDim2.new(1, 0, 0, 1)
Divider3.Position = UDim2.new(0, 0, 0, 215)
Divider3.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
Divider3.BorderSizePixel = 0
-- // Кнопка DestroyGUI
local DestroyButton = Instance.new("TextButton")
DestroyButton.Name = "DestroyButton"
DestroyButton.Parent = MainFrame
DestroyButton.Size = UDim2.new(1, -20, 0, 30)
DestroyButton.Position = UDim2.new(0, 10, 1, -40)
DestroyButton.BackgroundColor3 = Color3.fromRGB(120, 20, 20)
DestroyButton.BorderSizePixel = 1
DestroyButton.BorderColor3 = Color3.fromRGB(60, 60, 60)
DestroyButton.Text = "DestroyGUI"
DestroyButton.TextColor3 = Color3.fromRGB(255, 255, 255)
DestroyButton.Font = Enum.Font.GothamBold
DestroyButton.TextSize = 13
DestroyButton.AutoButtonColor = false
DestroyButton.MouseEnter:Connect(function()
DestroyButton.BackgroundColor3 = Color3.fromRGB(160, 30, 30)
end)
DestroyButton.MouseLeave:Connect(function()
DestroyButton.BackgroundColor3 = Color3.fromRGB(120, 20, 20)
end)
-- // Логика перетаскивания
local dragging = false
local dragInput, dragStart, startPos
TitleBar.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
dragging = true
dragStart = input.Position
startPos = MainFrame.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
dragging = false
end
end)
end
end)
TitleBar.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and dragging then
local delta = input.Position - dragStart
MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end
end)
-- // Открытие/закрытие по Insert
local function ToggleVisibility()
MainFrame.Visible = not MainFrame.Visible
if IgnoreListFrame then
IgnoreListFrame.Visible = MainFrame.Visible
end
end
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.Insert then
ToggleVisibility()
end
end)
-- // Логика уничтожения GUI и всех функций
DestroyButton.MouseButton1Click:Connect(function()
for funcName, funcData in pairs(ActiveFunctions) do
if funcData.Connection then
funcData.Connection:Disconnect()
funcData.Connection = nil
end
if funcName == "ESP" then
ClearAllESP()
elseif funcName == "BallsESP" then
ClearBallsESP()
end
funcData.Enabled = false
print("BoatHelper: Функция '" .. funcName .. "' отключена при уничтожении GUI.")
end
if IgnoreListFrame then
IgnoreListFrame:Destroy()
IgnoreListFrame = nil
end
ScreenGui:Destroy()
print("BoatHelper: GUI успешно уничтожен.")
end)
espUpdate()
aimbotUpdate()
ballsESPUpdate()
print("BoatHelper: Меню загружено и готово к работе.")
print("BoatHelper: Используйте Insert для открытия/закрытия меню.")
print("BoatHelper: Кнопка 'Настр' в Aimbot открывает настройки.")
end
CreateBoatHelper()