Загрузка данных
-- // 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", -- "Closest", "LookAt", "Visible"
UseRightClick = false,
RightClickActive = false,
Name = "Aimbot",
Description = "Автоматически наводится на игрока. Режимы: Ближайший, По взгляду, По видимости."
}
}
-- // Окно выбора игроков для игнорирования
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
-- // Функция проверки видимости игрока (через Raycast)
local function IsPlayerVisible(targetPlayer)
local localCharacter = Player.Character
if not localCharacter then return false end
local localRoot = localCharacter:FindFirstChild("HumanoidRootPart")
if not localRoot then return false end
local targetCharacter = targetPlayer.Character
if not targetCharacter then return false end
local targetHead = targetCharacter:FindFirstChild("Head")
if not targetHead then return false end
-- Создаем луч от головы локального игрока к голове цели
local raycastParams = RaycastParams.new()
raycastParams.FilterDescendantsInstances = {localCharacter, targetCharacter}
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
local rayOrigin = localRoot.Position
local rayDirection = (targetHead.Position - rayOrigin).Unit * 1000 -- Максимальная дистанция 1000 studs
local raycastResult = Workspace:Raycast(rayOrigin, rayDirection, raycastParams)
-- Если луч не попал ни во что или попал в цель - игрок видим
if not raycastResult then
return true
end
-- Проверяем, попал ли луч в цель
local hitPart = raycastResult.Instance
if hitPart and hitPart:IsDescendantOf(targetCharacter) then
return true
end
return false
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
-- // 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
elseif ActiveFunctions.Aimbot.AimMode == "Visible" then
-- Режим: видимый игрок (можно стрелять)
local closestVisiblePlayer = 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
-- Проверяем видимость через Raycast
if IsPlayerVisible(targetPlayer) then
local distance = (localRoot.Position - targetRoot.Position).Magnitude
if distance < shortestDistance then
shortestDistance = distance
closestVisiblePlayer = targetPlayer
end
end
end
end
end
return closestVisiblePlayer
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, 450)
IgnoreListFrame.Position = UDim2.new(0.5, 180, 0.5, -225)
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, 60)
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, 0, 28)
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)
VisibleButton.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, 0, 28)
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)
VisibleButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
print("BoatHelper: Режим Aimbot - По взгляду")
end)
-- Кнопка режима "По видимости"
local VisibleButton = Instance.new("TextButton")
VisibleButton.Name = "VisibleButton"
VisibleButton.Parent = ModeButtonsContainer
VisibleButton.Size = UDim2.new(1, 0, 0, 28)
VisibleButton.Position = UDim2.new(0, 0, 0, 32)
VisibleButton.BackgroundColor3 = ActiveFunctions.Aimbot.AimMode == "Visible"
and Color3.fromRGB(30, 150, 30)
or Color3.fromRGB(60, 60, 60)
VisibleButton.BorderSizePixel = 1
VisibleButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
VisibleButton.Text = "По видимости"
VisibleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
VisibleButton.Font = Enum.Font.GothamBold
VisibleButton.TextSize = 11
VisibleButton.AutoButtonColor = false
VisibleButton.MouseButton1Click:Connect(function()
ActiveFunctions.Aimbot.AimMode = "Visible"
VisibleButton.BackgroundColor3 = Color3.fromRGB(30, 150, 30)
ClosestButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
LookAtButton.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, 128)
DividerMode.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
DividerMode.BorderSizePixel = 0
-- Настройка активации по правой кнопке
local RightClickLabel = Instance.new("TextLabel")
RightClickLabel.Parent = IgnoreListFrame
RightClickLabel.Size = UDim2.new(1, -20, 0, 20)
RightClickLabel.Position = UDim2.new(0, 10, 0, 138)
RightClickLabel.BackgroundTransparency = 1
RightClickLabel.Text = "Активация по ПКМ:"
RightClickLabel.TextColor3 = Color3.fromRGB(200, 200, 200)
RightClickLabel.Font = Enum.Font.Gotham
RightClickLabel.TextSize = 12
RightClickLabel.TextXAlignment = Enum.TextXAlignment.Left
-- Кнопка переключения ПКМ
local RightClickToggle = Instance.new("TextButton")
RightClickToggle.Name = "RightClickToggle"
RightClickToggle.Parent = IgnoreListFrame
RightClickToggle.Size = UDim2.new(1, -20, 0, 25)
RightClickToggle.Position = UDim2.new(0, 10, 0, 160)
RightClickToggle.BackgroundColor3 = ActiveFunctions.Aimbot.UseRightClick
and Color3.fromRGB(30, 150, 30)
or Color3.fromRGB(60, 60, 60)
RightClickToggle.BorderSizePixel = 1
RightClickToggle.BorderColor3 = Color3.fromRGB(100, 100, 100)
RightClickToggle.Text = ActiveFunctions.Aimbot.UseRightClick and "ПКМ: ВКЛ" or "ПКМ: ВЫКЛ"
RightClickToggle.TextColor3 = Color3.fromRGB(255, 255, 255)
RightClickToggle.Font = Enum.Font.GothamBold
RightClickToggle.TextSize = 11
RightClickToggle.AutoButtonColor = false
RightClickToggle.MouseButton1Click:Connect(function()
ActiveFunctions.Aimbot.UseRightClick = not ActiveFunctions.Aimbot.UseRightClick
if ActiveFunctions.Aimbot.UseRightClick then
RightClickToggle.BackgroundColor3 = Color3.fromRGB(30, 150, 30)
RightClickToggle.Text = "ПКМ: ВКЛ"
print("BoatHelper: Активация Aimbot по ПКМ включена")
else
RightClickToggle.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
RightClickToggle.Text = "ПКМ: ВЫКЛ"
ActiveFunctions.Aimbot.RightClickActive = false
print("BoatHelper: Активация Aimbot по ПКМ выключена")
end
end)
-- Разделитель
local DividerRightClick = Instance.new("Frame")
DividerRightClick.Parent = IgnoreListFrame
DividerRightClick.Size = UDim2.new(1, -20, 0, 1)
DividerRightClick.Position = UDim2.new(0, 10, 0, 195)
DividerRightClick.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
DividerRightClick.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, 205)
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, -262)
ScrollingFrame.Position = UDim2.new(0, 10, 0, 227)
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 IconButton = Instance.new("TextButton")
IconButton.Name = "IconButton"
IconButton.Parent = ScreenGui
IconButton.Size = UDim2.new(0, 40, 0, 40)
IconButton.Position = UDim2.new(0, 10, 0.5, -20)
IconButton.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
IconButton.BorderSizePixel = 1
IconButton.BorderColor3 = Color3.fromRGB(60, 60, 60)
IconButton.Text = "BH"
IconButton.TextColor3 = Color3.fromRGB(200, 200, 200)
IconButton.Font = Enum.Font.GothamBold
IconButton.TextSize = 16
IconButton.AutoButtonColor = false
IconButton.Visible = false
IconButton.MouseEnter:Connect(function()
IconButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
end)
IconButton.MouseLeave:Connect(function()
IconButton.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
end)
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Parent = ScreenGui
MainFrame.Size = UDim2.new(0, 320, 0, 200)
MainFrame.Position = UDim2.new(0.5, -160, 0.5, -100)
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, -40, 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 MinimizeButton = Instance.new("TextButton")
MinimizeButton.Name = "MinimizeButton"
MinimizeButton.Parent = TitleBar
MinimizeButton.Size = UDim2.new(0, 20, 0, 20)
MinimizeButton.Position = UDim2.new(1, -25, 0, 5)
MinimizeButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
MinimizeButton.BorderSizePixel = 1
MinimizeButton.BorderColor3 = Color3.fromRGB(100, 100, 100)
MinimizeButton.Text = "-"
MinimizeButton.TextColor3 = Color3.fromRGB(255, 255, 255)
MinimizeButton.Font = Enum.Font.GothamBold
MinimizeButton.TextSize = 14
MinimizeButton.AutoButtonColor = false
MinimizeButton.MouseEnter:Connect(function()
MinimizeButton.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
end)
MinimizeButton.MouseLeave:Connect(function()
MinimizeButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
end)
MinimizeButton.MouseButton1Click:Connect(function()
MainFrame.Visible = false
IconButton.Visible = true
if IgnoreListFrame then
IgnoreListFrame.Visible = false
end
end)
IconButton.MouseButton1Click:Connect(function()
IconButton.Visible = false
MainFrame.Visible = true
end)
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
if ActiveFunctions.Aimbot.UseRightClick then
if ActiveFunctions.Aimbot.RightClickActive then
AimAtTarget()
end
else
AimAtTarget()
end
end
end)
else
print("BoatHelper: Aimbot ВЫКЛЮЧЕН")
if ActiveFunctions.Aimbot.Connection then
ActiveFunctions.Aimbot.Connection:Disconnect()
ActiveFunctions.Aimbot.Connection = nil
end
end
end, true)
if settingsButton then
settingsButton.MouseButton1Click:Connect(function()
CreateIgnoreListWindow(MainFrame)
end)
end
local Divider2 = Instance.new("Frame")
Divider2.Parent = MainFrame
Divider2.Size = UDim2.new(1, 0, 0, 1)
Divider2.Position = UDim2.new(0, 0, 0, 155)
Divider2.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
Divider2.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)
-- Перетаскивание иконки
local draggingIcon = false
local dragStartIcon, startPosIcon
IconButton.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
draggingIcon = true
dragStartIcon = input.Position
startPosIcon = IconButton.Position
input.Changed:Connect(function()
if input.UserInputState == Enum.UserInputState.End then
draggingIcon = false
end
end)
end
end)
IconButton.InputChanged:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseMovement and draggingIcon then
local delta = input.Position - dragStartIcon
IconButton.Position = UDim2.new(startPosIcon.X.Scale, startPosIcon.X.Offset + delta.X, startPosIcon.Y.Scale, startPosIcon.Y.Offset + delta.Y)
end
end)
-- Обработка ПКМ
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
if ActiveFunctions.Aimbot.UseRightClick and ActiveFunctions.Aimbot.Enabled then
ActiveFunctions.Aimbot.RightClickActive = true
end
end
end)
UserInputService.InputEnded:Connect(function(input, gameProcessed)
if input.UserInputType == Enum.UserInputType.MouseButton2 then
if ActiveFunctions.Aimbot.UseRightClick then
ActiveFunctions.Aimbot.RightClickActive = false
end
end
end)
-- Insert
local function ToggleVisibility()
if MainFrame.Visible then
MainFrame.Visible = false
IconButton.Visible = true
if IgnoreListFrame then
IgnoreListFrame.Visible = false
end
else
IconButton.Visible = false
MainFrame.Visible = true
end
end
UserInputService.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.Insert then
ToggleVisibility()
end
end)
-- Destroy
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()
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()
print("BoatHelper: Меню загружено и готово к работе.")
print("BoatHelper: Используйте Insert для открытия/закрытия меню.")
print("BoatHelper: Кнопка '-' сворачивает меню в иконку.")
print("BoatHelper: В настройках Aimbot доступны 3 режима и активация по ПКМ.")
end
CreateBoatHelper()