-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[ ═════════════════════════════════════════════════════════════════ 🚀 ALL-IN-ONE: AUTO-MERGE + AUTO-LOCK DEFENSE SYSTEM Режим: "[UPD] Merge a Nuke!" ═════════════════════════════════════════════════════════════════ ВОЗМОЖНОСТИ: 1. AUTO-MERGE (Умный мердж): - Никогда не трогает одиночные ракеты (только тиры с количеством >= 2) - Точно считывает уровень ракеты в руках через GetMyHeldTier() - Совмещает ракеты СТРОГО одинакового уровня - Если в руках оказалась ракета без пары — автоматически сбрасывает (Drop) - Возвращает персонажа на место после каждого мерджа 2. AUTO-LOCK BASE (Авто-защита базы): - Перехватывает событие запуска ракеты (LaunchStarted) - Проверяет точку падения (impactPos): если летит в периметр твоей базы — МГНОВЕННО прожимает Lock Base ещё ДО прилёта ракеты! - Перехватывает уведомления об атаке (AttackFeed) - Отображает статус щита: АКТИВЕН / ГОТОВ / ПЕРЕЗАРЯДКА --]] local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local CoreGui = game:GetService("CoreGui") local UserInputService = game:GetService("UserInputService") local LocalPlayer = Players.LocalPlayer -- Актуальные ремоты local PkgRemotes = require(ReplicatedStorage:WaitForChild("Packages"):WaitForChild("Remotes")) local PickUp = PkgRemotes.PickUp local Drop = PkgRemotes.Drop local MergeRequest = PkgRemotes.MergeRequest local LockStateUpdate = PkgRemotes.LockStateUpdate local NukeRemotes = ReplicatedStorage:WaitForChild("NukeRemotes") local LaunchStarted = NukeRemotes:WaitForChild("LaunchStarted") local AttackFeed = NukeRemotes:WaitForChild("AttackFeed") local RequestLockBase = NukeRemotes:WaitForChild("RequestLockBase") -- Очистка старых потоков if _G.AutoMergeThread then pcall(task.cancel, _G.AutoMergeThread) _G.AutoMergeThread = nil end if _G.AutoLockConnections then for _, conn in ipairs(_G.AutoLockConnections) do pcall(function() conn:Disconnect() end) end end _G.AutoLockConnections = {} _G.AutoMergeEnabled = true _G.AutoLockEnabled = true local CONFIG = { CyclePause = 0.5, -- Пауза между проверками пар (сек) TpWait = 0.25, -- Ожидание после телепорта к ракете (сек) ActionWait = 0.35, -- Ожидание подтверждения PickUp / Merge (сек) DefenseRadius = 55, -- Радиус защиты вокруг центра базы (studs) } local Stats = { TotalMerged = 0, BaseName = "Поиск базы...", HandsStatus = "Свободны", ShieldStatus = "Проверка...", LastDefenseEvent = "Пока атак не было", } -- ───────────────────────────────────────────────────────────────── -- БАЗА И СОСТОЯНИЕ -- ───────────────────────────────────────────────────────────────── local function getMyBase() local bases = workspace:FindFirstChild("Bases") if not bases then return nil end for _, b in ipairs(bases:GetChildren()) do if b:GetAttribute("OwnerUserId") == LocalPlayer.UserId then Stats.BaseName = b.Name return b end end return nil end -- Определение уровня ракеты в руках local function getMyHeldTier() local char = LocalPlayer.Character if not char then return nil end local charPos = char:GetPivot().Position local cam = workspace.CurrentCamera if not cam then return nil end for _, obj in ipairs(cam:GetChildren()) do if obj.Name == "HeldNukeVisual" and obj:IsA("Model") then if (obj:GetPivot().Position - charPos).Magnitude < 6 then return obj:GetAttribute("Tier") end end end return nil end -- ───────────────────────────────────────────────────────────────── -- СИСТЕМА АВТО-ЗАЩИТЫ (AUTO-LOCK BASE) -- ───────────────────────────────────────────────────────────────── local function triggerBaseLock(reason) if not _G.AutoLockEnabled then return end local myBase = getMyBase() if myBase and myBase:GetAttribute("BaseLocked") == true then print("[AutoLock] База уже закрыта щитом!") return end print("[AutoLock] 🚨 АТАКА! Включаю щит базы! Причина:", reason) RequestLockBase:FireServer() Stats.LastDefenseEvent = os.date("%X") .. " — " .. tostring(reason) end -- 1. Детект запуска ракеты в сторону нашей базы ДО её прилёта local conn1 = LaunchStarted.OnClientEvent:Connect(function(data) if not _G.AutoLockEnabled or type(data) ~= "table" or not data.impactPos then return end local myBase = getMyBase() if not myBase or not myBase:FindFirstChild("Floor") then return end local basePos = myBase.Floor.Position local impact = data.impactPos local dist = (Vector3.new(impact.X, basePos.Y, impact.Z) - basePos).Magnitude if dist <= CONFIG.DefenseRadius then triggerBaseLock(string.format("Ракета летит в базу (дист. %.0f studs)", dist)) end end) table.insert(_G.AutoLockConnections, conn1) -- 2. Детект прямого уведомления об атаке на игрока local conn2 = AttackFeed.OnClientEvent:Connect(function(attackerId, attackerName, targetId) if not _G.AutoLockEnabled then return end if targetId == LocalPlayer.UserId and attackerId ~= LocalPlayer.UserId then triggerBaseLock(string.format("Атака от %s", tostring(attackerName or "врага"))) end end) table.insert(_G.AutoLockConnections, conn2) -- ───────────────────────────────────────────────────────────────── -- СИСТЕМА АВТО-МЕРДЖА (SMART AUTO-MERGE) -- ───────────────────────────────────────────────────────────────── local function stepAutoMerge() if not _G.AutoMergeEnabled then return end local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then return end local myBase = getMyBase() if not myBase or not myBase:FindFirstChild("Nukes") then return end -- Проверка рук local currentlyHeld = getMyHeldTier() if currentlyHeld then Stats.HandsStatus = string.format("В руках: Tier %d", currentlyHeld) local matchNuke = nil for _, n in ipairs(myBase.Nukes:GetChildren()) do if n:GetAttribute("Tier") == currentlyHeld and n:GetAttribute("Locked") ~= true then matchNuke = n break end end if matchNuke then local origCF = hrp.CFrame hrp.CFrame = CFrame.new(matchNuke:GetPivot().Position + Vector3.new(0, 1.5, 0)) task.wait(CONFIG.TpWait) MergeRequest:FireServer(matchNuke) task.wait(CONFIG.ActionWait) Stats.TotalMerged = Stats.TotalMerged + 1 hrp.CFrame = origCF else -- Нет пары для удерживаемой ракеты — сбрасываем на пол Drop:FireServer(hrp.CFrame + hrp.CFrame.LookVector * 4) task.wait(CONFIG.ActionWait) end return else Stats.HandsStatus = "Свободны" end -- Сканируем базу: отбираем только тиры с количеством >= 2 local nukes = myBase.Nukes:GetChildren() if #nukes < 2 then return end local counts = {} local byTier = {} for _, n in ipairs(nukes) do local t = n:GetAttribute("Tier") if t and n:GetAttribute("Locked") ~= true then counts[t] = (counts[t] or 0) + 1 byTier[t] = byTier[t] or {} table.insert(byTier[t], n) end end local validTiers = {} for t, c in pairs(counts) do if c >= 2 then table.insert(validTiers, t) end end -- Одиночные ракеты не трогаем if #validTiers == 0 then Stats.HandsStatus = "Нет пар (одиночные целы)" return end table.sort(validTiers) local targetTier = validTiers[1] local n1 = byTier[targetTier][1] local n2 = byTier[targetTier][2] if not (n1 and n2 and n1.Parent and n2.Parent) then return end local origCF = hrp.CFrame -- Подлетаем к 1-й ракете и берем Stats.HandsStatus = string.format("Беру Tier %d...", targetTier) hrp.CFrame = CFrame.new(n1:GetPivot().Position + Vector3.new(0, 1.5, 0)) task.wait(CONFIG.TpWait) PickUp:FireServer(n1) task.wait(CONFIG.ActionWait) -- Проверяем фактический тир в руках local actualHeld = getMyHeldTier() if actualHeld then Stats.HandsStatus = string.format("В руках Tier %d! Совмещаю...", actualHeld) local targetMatch = nil for _, n in ipairs(myBase.Nukes:GetChildren()) do if n:GetAttribute("Tier") == actualHeld and n.Parent and n:GetAttribute("Locked") ~= true then targetMatch = n break end end if targetMatch then hrp.CFrame = CFrame.new(targetMatch:GetPivot().Position + Vector3.new(0, 1.5, 0)) task.wait(CONFIG.TpWait) MergeRequest:FireServer(targetMatch) task.wait(CONFIG.ActionWait) Stats.TotalMerged = Stats.TotalMerged + 1 Stats.HandsStatus = string.format("Смерджен Tier %d!", actualHeld) else Drop:FireServer(hrp.CFrame + hrp.CFrame.LookVector * 4) task.wait(CONFIG.ActionWait) end end if hrp and hrp.Parent then hrp.CFrame = origCF end end _G.AutoMergeThread = task.spawn(function() while true do if _G.AutoMergeEnabled then pcall(stepAutoMerge) end task.wait(CONFIG.CyclePause) end end) -- ───────────────────────────────────────────────────────────────── -- ГРАФИЧЕСКИЙ ИНТЕРФЕЙС (GUI) -- ───────────────────────────────────────────────────────────────── local GUI_NAME = "NukeManagerGUI" if CoreGui:FindFirstChild(GUI_NAME) then CoreGui[GUI_NAME]:Destroy() end if CoreGui:FindFirstChild("AutoMergeNukesGUI_V4") then CoreGui["AutoMergeNukesGUI_V4"]:Destroy() end if CoreGui:FindFirstChild("AutoMergeNukesGUI_V3") then CoreGui["AutoMergeNukesGUI_V3"]:Destroy() end if CoreGui:FindFirstChild("AutoMergeNukesGUI") then CoreGui["AutoMergeNukesGUI"]:Destroy() end local screenGui = Instance.new("ScreenGui") screenGui.Name = GUI_NAME screenGui.ResetOnSpawn = false pcall(function() screenGui.Parent = CoreGui end) if not screenGui.Parent then screenGui.Parent = LocalPlayer:WaitForChild("PlayerGui") end local mainFrame = Instance.new("Frame") mainFrame.Name = "MainFrame" mainFrame.Size = UDim2.new(0, 260, 0, 260) mainFrame.Position = UDim2.new(0.04, 0, 0.32, 0) mainFrame.BackgroundColor3 = Color3.fromRGB(16, 18, 24) mainFrame.BorderSizePixel = 0 mainFrame.Active = true mainFrame.Parent = screenGui local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = mainFrame local stroke = Instance.new("UIStroke") stroke.Color = Color3.fromRGB(255, 120, 30) stroke.Thickness = 2 stroke.Parent = mainFrame -- Drag local dragging, dragInput, dragStart, startPos mainFrame.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) mainFrame.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput 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 title = Instance.new("TextLabel") title.Size = UDim2.new(1, 0, 0, 34) title.BackgroundTransparency = 1 title.Text = "🚀 NUKE AUTO-PILOT & DEFENSE" title.TextColor3 = Color3.fromRGB(255, 205, 80) title.Font = Enum.Font.GothamBold title.TextSize = 13 title.Parent = mainFrame -- Кнопка 1: AUTO-MERGE local mergeBtn = Instance.new("TextButton") mergeBtn.Size = UDim2.new(0.88, 0, 0, 32) mergeBtn.Position = UDim2.new(0.06, 0, 0, 38) mergeBtn.BackgroundColor3 = Color3.fromRGB(46, 160, 67) mergeBtn.Text = "AUTO-MERGE: ON" mergeBtn.TextColor3 = Color3.fromRGB(255, 255, 255) mergeBtn.Font = Enum.Font.GothamBold mergeBtn.TextSize = 12 mergeBtn.BorderSizePixel = 0 mergeBtn.Parent = mainFrame local c1 = Instance.new("UICorner") c1.CornerRadius = UDim.new(0, 8) c1.Parent = mergeBtn mergeBtn.MouseButton1Click:Connect(function() _G.AutoMergeEnabled = not _G.AutoMergeEnabled if _G.AutoMergeEnabled then mergeBtn.Text = "AUTO-MERGE: ON" mergeBtn.BackgroundColor3 = Color3.fromRGB(46, 160, 67) else mergeBtn.Text = "AUTO-MERGE: OFF" mergeBtn.BackgroundColor3 = Color3.fromRGB(180, 50, 50) end end) -- Кнопка 2: AUTO-LOCK local lockBtn = Instance.new("TextButton") lockBtn.Size = UDim2.new(0.88, 0, 0, 32) lockBtn.Position = UDim2.new(0.06, 0, 0, 76) lockBtn.BackgroundColor3 = Color3.fromRGB(0, 140, 255) lockBtn.Text = "🛡 AUTO-LOCK DEFENSE: ON" lockBtn.TextColor3 = Color3.fromRGB(255, 255, 255) lockBtn.Font = Enum.Font.GothamBold lockBtn.TextSize = 12 lockBtn.BorderSizePixel = 0 lockBtn.Parent = mainFrame local c2 = Instance.new("UICorner") c2.CornerRadius = UDim.new(0, 8) c2.Parent = lockBtn lockBtn.MouseButton1Click:Connect(function() _G.AutoLockEnabled = not _G.AutoLockEnabled if _G.AutoLockEnabled then lockBtn.Text = "🛡 AUTO-LOCK DEFENSE: ON" lockBtn.BackgroundColor3 = Color3.fromRGB(0, 140, 255) else lockBtn.Text = "🛡 AUTO-LOCK DEFENSE: OFF" lockBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 110) end end) -- Инфо-панель local infoLabel = Instance.new("TextLabel") infoLabel.Size = UDim2.new(0.88, 0, 0, 136) infoLabel.Position = UDim2.new(0.06, 0, 0, 114) infoLabel.BackgroundColor3 = Color3.fromRGB(24, 26, 34) infoLabel.BorderSizePixel = 0 infoLabel.Font = Enum.Font.Gotham infoLabel.TextSize = 11 infoLabel.TextColor3 = Color3.fromRGB(220, 225, 240) infoLabel.TextXAlignment = Enum.TextXAlignment.Left infoLabel.TextYAlignment = Enum.TextYAlignment.Top infoLabel.Parent = mainFrame local infoPadding = Instance.new("UIPadding") infoPadding.PaddingTop = UDim.new(0, 6) infoPadding.PaddingLeft = UDim.new(0, 8) infoPadding.PaddingRight = UDim.new(0, 8) infoPadding.Parent = infoLabel local c3 = Instance.new("UICorner") c3.CornerRadius = UDim.new(0, 8) c3.Parent = infoLabel -- Обновление UI task.spawn(function() while screenGui.Parent do task.wait(0.4) local base = getMyBase() local count = base and base:FindFirstChild("Nukes") and #base.Nukes:GetChildren() or 0 local maxTier = 0 if base and base:FindFirstChild("Nukes") then for _, n in ipairs(base.Nukes:GetChildren()) do local t = n:GetAttribute("Tier") or 0 if t > maxTier then maxTier = t end end end local isLocked = base and base:GetAttribute("BaseLocked") == true local lockEnds = base and base:GetAttribute("LockEndsAt") local now = workspace:GetServerTimeNow() local rem = lockEnds and math.max(0, math.floor(lockEnds - now)) or 0 if isLocked then Stats.ShieldStatus = string.format("АКТИВЕН (%02d:%02d)", math.floor(rem / 60), rem % 60) else Stats.ShieldStatus = "ГОТОВ К ЗАЩИТЕ" end infoLabel.Text = string.format( "🏠 База: %s\n📦 Всего ракет: %d | 👑 Макс. Tier: %d\n⚡ Смерджено: %d\n✋ %s\n🛡 Щит базы: %s\n⚠️ Защита: %s", Stats.BaseName, count, maxTier, Stats.TotalMerged, Stats.HandsStatus, Stats.ShieldStatus, Stats.LastDefenseEvent ) end end) print("[NukeManager] Auto-Merge + Auto-Lock Defense запущен!")