-- Prevent double execution if _G.BotScriptLoaded then warn("Player already executed the script") return end _G.BotScriptLoaded = true local Players = game:GetService("Players") local TextChatService = game:GetService("TextChatService") local ReplicatedStorage = game:GetService("ReplicatedStorage") local HttpService = game:GetService("HttpService") local UserInputService = game:GetService("UserInputService") local TeleportService = game:GetService("TeleportService") local StarterGui = game:GetService("StarterGui") local RunService = game:GetService("RunService") local LocalPlayer = Players.LocalPlayer local spinning = false local scriptConnection = nil local following = false local followTarget = nil local autoR6 = false local antiafk = false local blacklistEnabled = false local blacklistedPlayers = {} local chatChannel = nil local ownersURL = "https://raw.githubusercontent.com/Ali-droidlol/BlacklistTCO/main/Users.json" local blacklistURL = "https://raw.githubusercontent.com/Ali-droidlol/BlacklistTCO/refs/heads/main/blacklist.json" local WEBHOOK_URL = "https://discord.com/api/webhooks/1522386948784914432/pZvX1VBo1DQ-z4fpkh4cOI3VecKbqx4Mc7HZTATkLklIklXbaZctX4VBaUhTMUvwLBdb" local WHITELIST_ACCOUNT = "blacklistv2tco" local BLACKLIST_ACCOUNT = "blacklistv2tco" local GameId = tostring(game.GameId) local JobId = tostring(game.JobId) local GITHUB_COMMAND_URL = "http://localhost:3000/command" local lastCommandId = nil local lastCommandTimestamp = 0 local pollerRunning = true local scriptRunning = true local autoDallEnabled = false local autoDallTarget = "hotdogn.back" local MANIFEST_FILE = "save_all.json" -- Hoisted build globals — crash system and build system both read these local isog = workspace:FindFirstChild("Cubes") ~= nil local cfolder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") local built = false local childcube = nil local tempAdmins = {} local commandPrefix = "!" -- ========================================== -- BOT ROSTER -- ========================================== local BOT_NAMES = { "blacklistv2tco", "BLACKLIST_14180", "Blacklistv4tco", "Blacklistv3tco", "blacklistv5tco", 'blacklistv6tco', 'blacklistv7tco', 'blacklistv8tco', 'blacklistv09tco', 'blacklistvtentco', 'Blacklistv11tco', } local isBot = false for _, name in ipairs(BOT_NAMES) do if LocalPlayer.Name == name then isBot = true break end end local _connections = {} local _threads = {} local function getBotRoster() local roster = {} for _, player in ipairs(Players:GetPlayers()) do for _, name in ipairs(BOT_NAMES) do if player.Name == name then table.insert(roster, player) break end end end table.sort(roster, function(a, b) return a.UserId < b.UserId end) return roster end local function getLocalBotIndex(roster) for i, player in ipairs(roster) do if player == LocalPlayer then return i end end return nil end local function displayLocalMessage(text, color) pcall(function() StarterGui:SetCore("SendNotification", { Title = "Build Bot", Text = tostring(text), Duration = 4, }) end) end local function track(conn) if conn then table.insert(_connections, conn) end return conn end local function trackThread(t) if t then table.insert(_threads, t) end return t end -- ========================================== -- CRASH STATE (bkitcrash) -- ========================================== local crashState = { mode = "idle" } local crashBti = 0 local crashPti = 0 local ALL_FACES = { Enum.NormalId.Front, Enum.NormalId.Back, Enum.NormalId.Left, Enum.NormalId.Right, Enum.NormalId.Top, Enum.NormalId.Bottom, } local function randjunk(n) local t = table.create(n) for i = 1, n do t[i] = string.char(math.random(97, 122)) end return table.concat(t) end local function claimMap() pcall(function() LocalPlayer.ReplicationFocus = workspace sethiddenproperty(LocalPlayer, "SimulationRadius", math.huge) end) end local function findbtools(name) local btools = {} if not isog then for _, v in ipairs(LocalPlayer.Backpack:GetChildren()) do if v:IsA("Tool") and v.Name == name and v:FindFirstChild("Script") and v.Script:FindFirstChild("Event") then table.insert(btools, { bt = v, e = v.Script.Event }) end end end if LocalPlayer.Character then for _, v in ipairs(LocalPlayer.Character:GetChildren()) do if v:IsA("Tool") and v.Name == name then if isog then table.insert(btools, { bt = v, e = LocalPlayer.Backpack.Events }) elseif v:FindFirstChild("Script") and v.Script:FindFirstChild("Event") then local found = false for _, b in ipairs(btools) do if b.bt == v then found = true end end if not found then table.insert(btools, { bt = v, e = v.Script.Event }) end end end end end return btools end local function runBkitCrash() print("[BkitCrash] function entered") if crashState.mode == "funnycrash" then print("[BkitCrash] already running, bailing") return end local char = LocalPlayer.Character if not char then print("[BkitCrash] no character") return end local hrp = char:FindFirstChild("HumanoidRootPart") if not hrp then print("[BkitCrash] no HRP") return end local pos = hrp.Position print("[BkitCrash] pos:", pos) local btools = findbtools("Build") local paints = findbtools("Paint") print("[BkitCrash] btools:", #btools, "paints:", #paints) if #btools == 0 or #paints == 0 then warn("[BkitCrash] missing tools") chat("Crash error: missing Build or Paint tool") return end -- Find the correct watch folder — personal subfolder takes priority local watchFolder = cfolder:FindFirstChild(LocalPlayer.Name) or cfolder print("[BkitCrash] watching folder:", watchFolder:GetFullName()) claimMap() crashState.mode = "funnycrash" task.spawn(function() -- Local built/childcube trackers so crash doesn't fight the build system local crashBuilt = false local crashChild = nil local placementConn = watchFolder.ChildAdded:Connect(function(child) crashChild = child crashBuilt = true end) -- Equip the Build tool first so the server accepts the event local hum = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") local bt = btools[1] if bt.bt.Parent ~= LocalPlayer.Character then pcall(function() hum:EquipTool(bt.bt) end) task.wait(0.3) end -- Teleport slightly above pos so server proximity check passes if hrp then hrp.CFrame = CFrame.new(pos + Vector3.new(0, 8, 0)) end task.wait(0.1) crashBuilt = false; crashChild = nil print("[BkitCrash] firing initial placement") pcall(function() bt.e:FireServer(workspace.Terrain, Enum.NormalId.Top, pos, "detailed") end) local t0 = tick() repeat RunService.Heartbeat:Wait() until (crashBuilt and crashChild) or tick() - t0 > 10 print("[BkitCrash] block wait done — crashBuilt:", crashBuilt, "crashChild:", crashChild) if not crashChild then -- Try one more time with "normal" size crashBuilt = false; crashChild = nil print("[BkitCrash] retrying with normal size") pcall(function() bt.e:FireServer(workspace.Terrain, Enum.NormalId.Top, pos, "normal") end) local t1 = tick() repeat RunService.Heartbeat:Wait() until (crashBuilt and crashChild) or tick() - t1 > 10 print("[BkitCrash] retry result — crashBuilt:", crashBuilt, "crashChild:", crashChild) end placementConn:Disconnect() if not crashChild then warn("[BkitCrash] block placement failed after both attempts") crashState.mode = "idle" return end local crashBlock = crashChild crashBuilt = false; crashChild = nil local pt = paints[1] if pt.bt.Parent ~= LocalPlayer.Character then pcall(function() hum:EquipTool(pt.bt) end) task.wait(0.3) end -- Paint neon black pcall(function() pt.e:FireServer( crashBlock, Enum.NormalId.Top, pos, "both \u{1F91D}", Color3.new(0, 0, 0), "neon", "" ) end) task.wait(0.5) -- Spray all 6 faces with junk for _, face in ipairs(ALL_FACES) do if crashState.mode ~= "funnycrash" or not crashBlock or not crashBlock.Parent then break end crashPti = crashPti + 1 local p = paints[(crashPti % #paints) + 1] pcall(function() p.e:FireServer( crashBlock, face, pos, "both \u{1F91D}", Color3.new(0, 0, 0), "spray", randjunk(math.random(100, 200)) ) end) task.wait(0.5) end if crashState.mode ~= "funnycrash" or not crashBlock or not crashBlock.Parent then crashState.mode = "idle" return end -- Toggle collide off pcall(function() pt.e:FireServer( crashBlock, Enum.NormalId.Top, pos, "material", nil, "collide", "" ) end) task.wait(0.5) -- Redirect any new blocks this bot places into the void local crashDeleteConn = watchFolder.ChildAdded:Connect(function(newBlock) if crashState.mode ~= "funnycrash" or newBlock == crashBlock then return end task.defer(function() if not newBlock or not newBlock.Parent then return end newBlock.CFrame = CFrame.new(0, -999999999, 0) newBlock.Parent = game:GetService("Lighting") end) end) local bottomFace = Enum.NormalId.Bottom local bottomCenter = crashBlock.Position - Vector3.new(0, crashBlock.Size.Y / 2, 0) local fireCount = 0 print("[BkitCrash] entering spam loop") while crashState.mode == "funnycrash" and crashBlock and crashBlock.Parent do fireCount = fireCount + 1 if fireCount >= 50 then fireCount = 0 local hum2 = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") local bt2 = LocalPlayer.Backpack:FindFirstChild("Build") or (LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Build")) if hum2 and bt2 then if bt2.Parent == LocalPlayer.Character then bt2.Parent = LocalPlayer.Backpack end RunService.Heartbeat:Wait() pcall(function() hum2:EquipTool(bt2) end) RunService.RenderStepped:Wait() pcall(function() hum2:UnequipTools() end) task.wait(0.05) end btools = findbtools("Build") end if #btools == 0 then task.wait(0.1); continue end local c = 0 repeat c = c + 1 crashBti = crashBti + 1 local b = btools[(crashBti % #btools) + 1] pcall(function() if isog then b.e:FireServer(bottomCenter, bottomFace, crashBlock, Color3.new(0, 0, 0), "Smooth") else b.e:FireServer(crashBlock, bottomFace, bottomCenter, "normal") end end) RunService.Heartbeat:Wait() until crashState.mode ~= "funnycrash" or not crashBlock or not crashBlock.Parent or c > 200 end crashDeleteConn:Disconnect() crashBlock = nil if crashState.mode == "funnycrash" then crashState.mode = "idle" end print("[BkitCrash] loop exited") end) end local function stopBkitCrash() crashState.mode = "idle" print("[BkitCrash] stopped") end do gridSize = 4 stopped = false skipblock = false colorbool = false buildingtoxify = false oldprt = nil cubehistory = {} historynum = 0 historymax = 400 toxifybrick = nil resizewait = 0.15 defaultcolor = Color3.fromRGB(192, 192, 192) local BLOCK_TIMEOUT = 10 local VERIFY_PASSES = 5 local VERIFY_WAIT = 0.04 local GRID_TOLERANCE = 0.65 local DETAIL_TOLERANCE = 0.45 materials = {} materials[Enum.Material.SmoothPlastic] = "smooth" materials[Enum.Material.Plastic] = "plastic" materials[Enum.Material.CeramicTiles] = "tiles" materials[Enum.Material.Brick] = "bricks" materials[Enum.Material.WoodPlanks] = "planks" materials[Enum.Material.Ice] = "ice" materials[Enum.Material.Grass] = "grass" materials[Enum.Material.Sand] = "sand" materials[Enum.Material.Snow] = "snow" materials[Enum.Material.Glass] = "glass" materials[Enum.Material.Wood] = "wood" materials[Enum.Material.Slate] = "stone" materials[Enum.Material.Pebble] = "pebble" materials[Enum.Material.Marble] = "marble" materials[Enum.Material.Granite] = "granite" materials[Enum.Material.DiamondPlate] = "steel" materials[Enum.Material.Metal] = "metal" materials[Enum.Material.Asphalt] = "asphalt" materials[Enum.Material.Concrete] = "concrete" materials[Enum.Material.Pavement] = "pavement" materials[Enum.Material.Neon] = "neon" swappedmaterials = {} for k, v in pairs(materials) do swappedmaterials[v] = k end normalids = {} normalids[Enum.NormalId.Right] = {Vector3.new(1,0,0), "X"} normalids[Enum.NormalId.Top] = {Vector3.new(0,1,0), "Y"} normalids[Enum.NormalId.Back] = {Vector3.new(0,0,1), "Z"} normalids[Enum.NormalId.Left] = {Vector3.new(-1,0,0), "X"} normalids[Enum.NormalId.Bottom] = {Vector3.new(0,-1,0), "Y"} normalids[Enum.NormalId.Front] = {Vector3.new(0,0,-1), "Z"} -- ── Teleport ───────────────────────────────────────────────────────────── local function safeTeleport(cf) local char = LocalPlayer.Character local root = char and char:FindFirstChild("HumanoidRootPart") local hum = char and char:FindFirstChildOfClass("Humanoid") if not root or not hum or hum.Health <= 0 then return end root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero root.CFrame = cf root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero end local function teleportToBuildPos(pos) safeTeleport(CFrame.new(pos + Vector3.new(0, 6, 0))) end -- ── Helpers ─────────────────────────────────────────────────────────────── function roundnum(num, m) return math.round((num - 2) / m) * m + 2 end function roundBuildPos(pos, m) return Vector3.new( roundnum(pos.X, m or gridSize), roundnum(pos.Y, m or gridSize), roundnum(pos.Z, m or gridSize) ) end function snap(pos) return roundBuildPos(pos, gridSize) end -- ── Server-echo confirmation ────────────────────────────────────────────── local function blockConfirmedOnServer(pos, bsz, isDetail) local folder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") if not folder then return false end local tolerance = isDetail and DETAIL_TOLERANCE or GRID_TOLERANCE local expectedCenter = Vector3.new( pos.X + bsz.X / 2 - 0.5, pos.Y + bsz.Y / 2 - 0.5, pos.Z + bsz.Z / 2 - 0.5 ) local function scanContainer(container) for _, child in ipairs(container:GetChildren()) do if child:IsA("BasePart") then if (child.Position - expectedCenter).Magnitude <= tolerance then if isDetail then if (child.Size - bsz).Magnitude <= 0.1 then return true end else return true end end elseif child:IsA("Model") or child:IsA("Folder") then if scanContainer(child) then return true end end end return false end return scanContainer(folder) end function createpartrepl(pos, bsize, col, mat, transp, anch, collide, sprays) if typeof(pos) == "CFrame" then pos = pos.Position end local p = Instance.new("Part") oldprt = p p.Anchored = anch or true p.CanCollide = collide or false p.CastShadow = false p.CanQuery = false p.Color = col p.Transparency = transp or 0.5 p.Material = mat if bsize ~= nil then pos = Vector3.new( (pos.X + (bsize.X / 2)) - 0.5, (pos.Y + (bsize.Y / 2)) - 0.5, (pos.Z + (bsize.Z / 2)) - 0.5 ) end p.Size = bsize or Vector3.new(gridSize, gridSize, gridSize) p.CFrame = CFrame.new(pos) if sprays then for _, v in pairs(sprays) do local face = Enum.NormalId[v[1]] local image = v[2] local txt = v[3] local sui = Instance.new("SurfaceGui") sui.Face = face sui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStud sui.PixelsPerStud = 50 local _, count = string.gsub(txt, "#", "l") if count == string.len(txt) then local img = Instance.new("ImageLabel") img.Image = image img.BackgroundTransparency = 1 img.Size = UDim2.new(1, 0, 1, 0) img.Parent = sui else local tl = Instance.new("TextLabel") tl.Text = txt tl.BackgroundTransparency = 1 tl.TextScaled = true tl.TextColor3 = Color3.fromRGB(255, 255, 255) tl.Font = Enum.Font.FredokaOne tl.Size = UDim2.new(1, 0, 1, 0) tl.Parent = sui end sui.Parent = p end end p.Parent = workspace return p end function getSpawnPosition() local sp = workspace:FindFirstChild("SpawnLocation") or workspace:FindFirstChild("Spawn") if sp then if sp:IsA("Model") then local hrp = sp:FindFirstChild("HumanoidRootPart") if hrp then return hrp.Position end elseif sp:IsA("BasePart") then return sp.Position end end for _, player in ipairs(Players:GetPlayers()) do if player.Character then local hrp = player.Character:FindFirstChild("HumanoidRootPart") if hrp then return hrp.Position end end end return Vector3.new(0, 100, 0) end function sortBlocksByDistanceFromSpawn(buildData) local spawnPos = getSpawnPosition() for _, block in ipairs(buildData) do local bp = Vector3.new(block.p[1], block.p[2], block.p[3]) if block.s then bp = Vector3.new( bp.X + (block.s[1] / 2) - 0.5, bp.Y + (block.s[2] / 2) - 0.5, bp.Z + (block.s[3] / 2) - 0.5 ) end block._d = (bp - spawnPos).Magnitude end table.sort(buildData, function(a, b) return a._d < b._d end) for _, b in ipairs(buildData) do b._d = nil end return buildData end function computeBuildCenter(blocks) local minV, maxV for _, block in ipairs(blocks) do local p = block.p if p then local s = block.s local cx = p[1] + (s and (s[1] / 2 - 0.5) or 0) local cy = p[2] + (s and (s[2] / 2 - 0.5) or 0) local cz = p[3] + (s and (s[3] / 2 - 0.5) or 0) if not minV then minV = {cx, cy, cz}; maxV = {cx, cy, cz} else minV[1] = math.min(minV[1], cx); maxV[1] = math.max(maxV[1], cx) minV[2] = math.min(minV[2], cy); maxV[2] = math.max(maxV[2], cy) minV[3] = math.min(minV[3], cz); maxV[3] = math.max(maxV[3], cz) end end end if not minV then return Vector3.zero end return Vector3.new( (minV[1] + maxV[1]) / 2, (minV[2] + maxV[2]) / 2, (minV[3] + maxV[3]) / 2 ) end function transformBlockPos(rawPos, bsize, buildCenter, rotCF, offset) if not rotCF and not offset then return rawPos end local halfOff = Vector3.new(bsize.X/2 - 0.5, bsize.Y/2 - 0.5, bsize.Z/2 - 0.5) local origCenter = rawPos + halfOff local newCenter = origCenter if rotCF and buildCenter then newCenter = buildCenter + (rotCF * (origCenter - buildCenter)) end if offset then newCenter = newCenter + offset end return newCenter - halfOff end -- ── Pre-parse ───────────────────────────────────────────────────────────── local function parseManifest(filename) local raw local ok = pcall(function() raw = readfile(filename) end) if not ok or not raw or raw == "" then return nil, "File missing: " .. filename end local decodeOk, parsed = pcall(function() return HttpService:JSONDecode(raw) end) if not decodeOk or type(parsed) ~= "table" then return nil, "JSON decode failed" end local rawBlocks if type(parsed.blocks) == "table" then rawBlocks = parsed.blocks elseif parsed[1] ~= nil then rawBlocks = parsed else return nil, "No blocks found in manifest" end local resolved = {} for _, v in ipairs(rawBlocks) do local posses = v.p or v.pos if not posses then continue end if type(posses[1]) ~= "number" or type(posses[2]) ~= "number" or type(posses[3]) ~= "number" then continue end local sizeArr = v.s or v.size if sizeArr and ( type(sizeArr[1]) ~= "number" or type(sizeArr[2]) ~= "number" or type(sizeArr[3]) ~= "number" or sizeArr[1] <= 0 or sizeArr[2] <= 0 or sizeArr[3] <= 0 ) then continue end local bsz = sizeArr and Vector3.new(sizeArr[1], sizeArr[2], sizeArr[3]) or Vector3.new(gridSize, gridSize, gridSize) local colArr = v.c or v.color local col = (colArr and type(colArr[1]) == "number") and Color3.fromRGB(colArr[1], colArr[2], colArr[3]) or defaultcolor local mat = tostring(v.m or v.mat or "smooth"):lower() local anch = v.a ~= nil and v.a or true local coll = v.cc ~= nil and v.cc or true local sprays = nil local rawSp = v.sp or v.sprayed if rawSp then sprays = {} for _, sp in ipairs(rawSp) do if type(sp[1]) == "string" and Enum.NormalId[sp[1]] then table.insert(sprays, sp) end end if #sprays == 0 then sprays = nil end end local isDetail = ( bsz.X ~= gridSize or bsz.Y ~= gridSize or bsz.Z ~= gridSize ) table.insert(resolved, { p = { posses[1], posses[2], posses[3] }, s = sizeArr, bsz = bsz, col = col, mat = mat, anch = anch, coll = coll, sprays = sprays, isDetail = isDetail, placed = false, }) end if #resolved == 0 then return nil, "Manifest resolved zero valid blocks" end local rot = type(parsed) == "table" and parsed.rot or nil local off = type(parsed) == "table" and parsed.off or nil local rotCF = (type(rot) == "table" and (rot[1] ~= 0 or rot[2] ~= 0 or rot[3] ~= 0)) and CFrame.Angles(math.rad(rot[1] or 0), math.rad(rot[2] or 0), math.rad(rot[3] or 0)) or nil local offset = (type(off) == "table") and Vector3.new(off[1] or 0, off[2] or 0, off[3] or 0) or nil return { blocks = resolved, rotCF = rotCF, offset = offset, blockCount = #resolved, } end -- ── Save system ─────────────────────────────────────────────────────────── function saveBuild(filename) local folder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") if not folder then chat("❌ No build folder found (Cubes/Bricks)") return end local blocks = {} local function collectFrom(container) for _, child in ipairs(container:GetChildren()) do if child:IsA("BasePart") then local pos = child.Position local sz = child.Size local isDetail = ( sz.X ~= gridSize or sz.Y ~= gridSize or sz.Z ~= gridSize ) local block = {} block.a = child.Anchored block.cc = child.CanCollide if isDetail then block.p = { pos.X - (sz.X / 2) + 0.5, pos.Y - (sz.Y / 2) + 0.5, pos.Z - (sz.Z / 2) + 0.5, } block.s = { sz.X, sz.Y, sz.Z } else block.p = { pos.X - (gridSize / 2) + 0.5, pos.Y - (gridSize / 2) + 0.5, pos.Z - (gridSize / 2) + 0.5, } end block.m = materials[child.Material] or "smooth" block.o = child.Material.Name block.c = { math.round(child.Color.R * 255), math.round(child.Color.G * 255), math.round(child.Color.B * 255), } local sprayData = {} for _, gui in ipairs(child:GetChildren()) do if gui:IsA("SurfaceGui") then local faceName = gui.Face.Name local imageId = "" local txt = "" local imgLabel = gui:FindFirstChildWhichIsA("ImageLabel", true) local txtLabel = gui:FindFirstChildWhichIsA("TextLabel", true) if imgLabel then imageId = imgLabel.Image or "" end if txtLabel then txt = txtLabel.Text or "" end if txt ~= "" or imageId ~= "" then table.insert(sprayData, { faceName, imageId, txt }) end end end if #sprayData > 0 then block.sp = sprayData end table.insert(blocks, block) elseif child:IsA("Model") or child:IsA("Folder") then collectFrom(child) end end end collectFrom(folder) if #blocks == 0 then chat("❌ No blocks found to save") return end local ok, encoded = pcall(function() return HttpService:JSONEncode(blocks) end) if not ok then chat("❌ JSON encode failed: " .. tostring(encoded)) return end local writeOk, writeErr = pcall(function() writefile(filename, encoded) end) if not writeOk then chat("❌ Write failed: " .. tostring(writeErr)) return end chat(string.format("✅ Saved %d blocks to %s", #blocks, filename)) end -- ── Core block placer — fully scoped, zero globals ──────────────────────── buildblock = function(pos, texture, color, bsize, bsizev3, premadebuild, origmaterial, sprays, anchored, collide, isDetail) if anchored == nil then anchored = true end if collide == nil then collide = true end if isDetail == nil then isDetail = bsizev3 ~= nil and ( bsizev3.X ~= gridSize or bsizev3.Y ~= gridSize or bsizev3.Z ~= gridSize ) end local needsresize = false -- Per-call locals — no globals touched local localBuilt = false local localChildcube = nil pcall(function() LocalPlayer.Backpack.Build.Parent = LocalPlayer.Character end) local finalPos = isDetail and pos or snap(pos) if bsize == nil then if isDetail then bsize = "detailed" else bsize = "normal" if LocalPlayer.PlayerGui:FindFirstChild("Build") and LocalPlayer.PlayerGui.Build:FindFirstChild("Button") then bsize = LocalPlayer.PlayerGui.Build.Button.Text end end if bsizev3 == nil and not isDetail and oldprt and oldprt.Position ~= roundBuildPos(pos) then bsize = "detailed" needsresize = true bsizev3 = Vector3.new(4, 4, 4) pos = Vector3.new( (pos.X - (bsizev3.X / 2)) + 0.5, (pos.Y - (bsizev3.Y / 2)) + 0.5, (pos.Z - (bsizev3.Z / 2)) + 0.5 ) finalPos = pos end end -- ── Scoped watcher — this call only ─────────────────────────────────── local watchFolder = cfolder:FindFirstChild(LocalPlayer.Name) or cfolder local placementConn = watchFolder.ChildAdded:Connect(function(child) if localBuilt then return end localBuilt = true localChildcube = child -- Keep cubehistory working historynum = (historynum % historymax) + 1 cubehistory[historynum] = child if buildingtoxify then toxifybrick = child end end) -- ── Place loop ──────────────────────────────────────────────────────── local deadline = tick() + BLOCK_TIMEOUT repeat if LocalPlayer.Character and not LocalPlayer.Character:FindFirstChild("Build") and LocalPlayer.Backpack:FindFirstChild("Build") then LocalPlayer.Backpack.Build.Parent = LocalPlayer.Character end if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Build") then local bt = LocalPlayer.Character.Build local ev = (bt:FindFirstChild("origevent") and bt.origevent) or (bt:FindFirstChild("Script") and bt.Script:FindFirstChild("Event")) if ev then pcall(function() ev:FireServer(workspace.Terrain, Enum.NormalId.Top, finalPos, bsize) end) end end teleportToBuildPos(finalPos) task.wait(VERIFY_WAIT) if localBuilt and localChildcube then break end if blockConfirmedOnServer(pos, bsizev3 or Vector3.new(gridSize, gridSize, gridSize), isDetail) then break end until stopped or tick() > deadline placementConn:Disconnect() localBuilt = false -- ── Paint / material ────────────────────────────────────────────────── if localChildcube and ( (typeof(color) == "Color3" and color ~= defaultcolor) or texture ) and ( LocalPlayer.Backpack:FindFirstChild("Paint") or LocalPlayer.Character:FindFirstChild("Paint") ) and ( (colorbool and premadebuild ~= nil) or not colorbool ) then local pp = localChildcube.Position + localChildcube.Size / 2 local mode = "color" if texture and color then mode = "both \u{1F91D}" elseif texture then mode = "material" end local args = { localChildcube, Enum.NormalId.Top, pp, mode, color or nil, texture or "tiles", "" } pcall(function() LocalPlayer.Backpack.Paint.Parent = LocalPlayer.Character end) local paintDeadline = tick() + BLOCK_TIMEOUT repeat if LocalPlayer.Character and not LocalPlayer.Character:FindFirstChild("Paint") and LocalPlayer.Backpack:FindFirstChild("Paint") then LocalPlayer.Backpack.Paint.Parent = LocalPlayer.Character end if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Paint") then local pt = LocalPlayer.Character.Paint local ev = (pt:FindFirstChild("origevent") and pt.origevent) or (pt:FindFirstChild("Script") and pt.Script:FindFirstChild("Event")) if ev then pcall(function() ev:FireServer(table.unpack(args)) end) end end teleportToBuildPos(pp) task.wait(VERIFY_WAIT) until not localChildcube or not localChildcube.Parent or localChildcube.Color == color or (texture and localChildcube.Material == Enum.Material[origmaterial or "SmoothPlastic"]) or stopped or skipblock or tick() > paintDeadline end -- ── Anchor toggle ───────────────────────────────────────────────────── if localChildcube and LocalPlayer.Character:FindFirstChild("Paint") and localChildcube.Anchored ~= anchored then local pp = localChildcube.Position + localChildcube.Size / 2 local args = { localChildcube, Enum.NormalId.Top, pp, "material", nil, "anchor", "" } local anchorDeadline = tick() + BLOCK_TIMEOUT repeat if LocalPlayer.Character and not LocalPlayer.Character:FindFirstChild("Paint") and LocalPlayer.Backpack:FindFirstChild("Paint") then LocalPlayer.Backpack.Paint.Parent = LocalPlayer.Character end if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Paint") then local pt = LocalPlayer.Character.Paint local ev = (pt:FindFirstChild("origevent") and pt.origevent) or (pt:FindFirstChild("Script") and pt.Script:FindFirstChild("Event")) if ev then pcall(function() ev:FireServer(table.unpack(args)) end) end end teleportToBuildPos(pp) task.wait(1) until not localChildcube or not localChildcube.Parent or localChildcube.Anchored == anchored or stopped or skipblock or tick() > anchorDeadline end -- ── Collide toggle ──────────────────────────────────────────────────── if localChildcube and LocalPlayer.Character:FindFirstChild("Paint") and localChildcube.CanCollide ~= collide then local pp = localChildcube.Position + localChildcube.Size / 2 local args = { localChildcube, Enum.NormalId.Top, pp, "material", nil, "collide", "" } local collideDeadline = tick() + BLOCK_TIMEOUT repeat if LocalPlayer.Character and not LocalPlayer.Character:FindFirstChild("Paint") and LocalPlayer.Backpack:FindFirstChild("Paint") then LocalPlayer.Backpack.Paint.Parent = LocalPlayer.Character end if LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("Paint") then local pt = LocalPlayer.Character.Paint local ev = (pt:FindFirstChild("origevent") and pt.origevent) or (pt:FindFirstChild("Script") and pt.Script:FindFirstChild("Event")) if ev then pcall(function() ev:FireServer(table.unpack(args)) end) end end teleportToBuildPos(pp) task.wait(1) until not localChildcube or not localChildcube.Parent or localChildcube.CanCollide == collide or stopped or skipblock or tick() > collideDeadline end -- ── Sprays ──────────────────────────────────────────────────────────── if localChildcube and sprays ~= nil and ( LocalPlayer.Backpack:FindFirstChild("Paint") or LocalPlayer.Character:FindFirstChild("Paint") ) then local pp = localChildcube.Position + localChildcube.Size / 2 for _, v in pairs(sprays) do if stopped or skipblock then break end local payload = v[3] if (not payload or payload == "") and type(v[2]) == "string" and v[2] ~= "" then payload = v[2] end local args = { localChildcube, Enum.NormalId[v[1]], pp, "material", nil, "spray", payload or "" } pcall(function() LocalPlayer.Backpack.Paint.Parent = LocalPlayer.Character end) if LocalPlayer.Character:FindFirstChild("Paint") then local pt = LocalPlayer.Character.Paint local ev = (pt:FindFirstChild("origevent") and pt.origevent) or (pt:FindFirstChild("Script") and pt.Script:FindFirstChild("Event")) if ev then pcall(function() ev:FireServer(table.unpack(args)) end) end end teleportToBuildPos(pp) task.wait(0.25) end end -- ── Resize ──────────────────────────────────────────────────────────── if localChildcube and bsizev3 ~= nil and ( bsizev3.X ~= gridSize or bsizev3.Y ~= gridSize or bsizev3.Z ~= gridSize or needsresize ) and ( LocalPlayer.Character:FindFirstChild("Shape") or LocalPlayer.Backpack:FindFirstChild("Shape") ) then if not LocalPlayer.Character:FindFirstChild("Shape") then LocalPlayer.Backpack.Shape.Parent = LocalPlayer.Character end local axes = { { Enum.NormalId.Right, "X" }, { Enum.NormalId.Top, "Y" }, { Enum.NormalId.Back, "Z" }, } for _, axis in ipairs(axes) do local face, dim = axis[1], axis[2] if not localChildcube or not localChildcube.Parent then break end if localChildcube.Size[dim] == bsizev3[dim] then continue end local resizeDeadline = tick() + BLOCK_TIMEOUT repeat if not localChildcube or not localChildcube.Parent then break end local pp = localChildcube.Position + localChildcube.Size / 2 local dir = nil if localChildcube.Size[dim] > bsizev3[dim] then dir = "decrease" elseif localChildcube.Size[dim] < bsizev3[dim] then dir = "increase" end if not dir then break end if not LocalPlayer.Character:FindFirstChild("Shape") and LocalPlayer.Backpack:FindFirstChild("Shape") then LocalPlayer.Backpack.Shape.Parent = LocalPlayer.Character end if LocalPlayer.Character:FindFirstChild("Shape") then local sh = LocalPlayer.Character.Shape local ev = (sh:FindFirstChild("origevent") and sh.origevent) or (sh:FindFirstChild("Script") and sh.Script:FindFirstChild("Event")) if ev then pcall(function() ev:FireServer(localChildcube, face, pp, dir) end) end end teleportToBuildPos(pp) task.wait(resizewait) until not localChildcube or not localChildcube.Parent or localChildcube.Size[dim] == bsizev3[dim] or (dir == "decrease" and localChildcube and localChildcube.Size[dim] <= 1) or stopped or skipblock or tick() > resizeDeadline end end skipblock = false if oldprt then oldprt:Destroy() end localChildcube = nil end -- ── RunBuildSlice — slice first, sort slice, zero global crossfire ──────── function RunBuildSlice(manifestId, filename) filename = filename or MANIFEST_FILE if not isBot then displayLocalMessage("Build only runs on bot accounts.") return end local manifest, err = parseManifest(filename) if not manifest then displayLocalMessage(err or "Manifest load failed.") return end local roster = getBotRoster() local myIndex = getLocalBotIndex(roster) or 1 local botCount = math.max(#roster, 1) local rotCF = manifest.rotCF local offset = manifest.offset local allBlocks = manifest.blocks local buildCenter = (rotCF or offset) and computeBuildCenter(allBlocks) or nil -- Slice first — each bot sorts only its own assigned blocks local myBlocks = {} for i, v in ipairs(allBlocks) do if ((i - 1) % botCount) + 1 == myIndex then table.insert(myBlocks, v) end end myBlocks = sortBlocksByDistanceFromSpawn(myBlocks) if #myBlocks == 0 then displayLocalMessage("No blocks assigned to " .. LocalPlayer.Name) return end stopped = false skipblock = false local total = #myBlocks local placed = 0 local hardFailed = {} displayLocalMessage(string.format( "Build started: %d blocks assigned to %s", total, LocalPlayer.Name )) -- ── Pass 1 ──────────────────────────────────────────────────────────── for i, v in ipairs(myBlocks) do if stopped then break end local bsz = v.bsz local rawPos = Vector3.new(v.p[1], v.p[2], v.p[3]) local pos = transformBlockPos(rawPos, bsz, buildCenter, rotCF, offset) if pos.X ~= pos.X or pos.Y ~= pos.Y or pos.Z ~= pos.Z then continue end if pos.Magnitude > 100000 then continue end if blockConfirmedOnServer(pos, bsz, v.isDetail) then placed = placed + 1 continue end createpartrepl(pos, bsz, v.col, swappedmaterials[v.mat] or Enum.Material.SmoothPlastic) buildblock(pos, v.mat, v.col, nil, bsz, true, nil, v.sprays, v.anch, v.coll, v.isDetail) if blockConfirmedOnServer(pos, bsz, v.isDetail) then placed = placed + 1 v.placed = true else table.insert(hardFailed, v) end if i % 20 == 0 then displayLocalMessage(string.format( "Progress: %d/%d (%d pending)", placed, total, #hardFailed )) end task.wait(0) end if stopped then displayLocalMessage("Build stopped.") return end -- ── Verification sweeps ─────────────────────────────────────────────── if #hardFailed > 0 then displayLocalMessage(string.format( "Verification: %d blocks need retry sweeps", #hardFailed )) local retryQueue = hardFailed local pass = 0 while #retryQueue > 0 and pass < VERIFY_PASSES and not stopped do pass = pass + 1 local stillFailed = {} for _, v in ipairs(retryQueue) do if stopped then break end local bsz = v.bsz local rawPos = Vector3.new(v.p[1], v.p[2], v.p[3]) local pos = transformBlockPos(rawPos, bsz, buildCenter, rotCF, offset) if blockConfirmedOnServer(pos, bsz, v.isDetail) then placed = placed + 1 continue end createpartrepl(pos, bsz, v.col, swappedmaterials[v.mat] or Enum.Material.SmoothPlastic) buildblock(pos, v.mat, v.col, nil, bsz, true, nil, v.sprays, v.anch, v.coll, v.isDetail) if blockConfirmedOnServer(pos, bsz, v.isDetail) then placed = placed + 1 else table.insert(stillFailed, v) end task.wait(0) end retryQueue = stillFailed if #retryQueue > 0 then displayLocalMessage(string.format( "Sweep %d/%d done — %d still unplaced", pass, VERIFY_PASSES, #retryQueue )) task.wait(0.5) end end if #retryQueue > 0 then displayLocalMessage(string.format( "⚠️ %d blocks permanently unplaceable after %d sweeps", #retryQueue, VERIFY_PASSES )) else displayLocalMessage("✅ All blocks verified on server.") end end displayLocalMessage(string.format( "Build complete: %d/%d placed by %s", placed, total, LocalPlayer.Name )) end function StopBuild() stopped = true skipblock = true end end -- ========================================== -- OWNER AUTH -- ========================================== local COMMAND_LIST = [[ !antiafk [t/f] !autor6 [t/f] !blacklist [t/f] !bkitcrash [stop] !build [start/stop] !cmds !credits !dall !dance !disablebkit !donate [amount] !fling [player] !follow [player] !fpsmode [t/f] !freeze !glaze [player] !join !jump !quickvamp [player] !rejoin !reset !say [message] !servershutdown !spin [speed] !stop !stopdance !teleport !tp2 [player] !unfollow !unfreeze !unspin !autodall [t/f] ]] local ownerUsernames = {} UserInputService.WindowFocusReleased:Connect(function() task.wait(0.1) ReplicatedStorage:WaitForChild("System"):FireServer("Focused") end) local success, response = pcall(function() return game:HttpGet(ownersURL) end) if success then ownerUsernames = HttpService:JSONDecode(response) else warn("Failed to load owners!") _G.BotScriptLoaded = nil return end local function loadBlacklist() local ok, res = pcall(function() return game:HttpGet(blacklistURL) end) if ok and res then blacklistedPlayers = HttpService:JSONDecode(res) local count = 0 for _, val in pairs(blacklistedPlayers) do if val == true then count = count + 1 end end print("Blacklist loaded: " .. count .. " active entries") else warn("Failed to load blacklist!") end end local function isBlacklisted(player) return blacklistedPlayers[player.Name] == true end local function chat(msg) if chatChannel then pcall(function() chatChannel:SendAsync(msg) end) else pcall(function() ReplicatedStorage.DefaultChatSystemChatEvents.SayMessageRequest:FireServer(msg, "All") end) end end local function punishPlayer(player) if LocalPlayer.Name ~= BLACKLIST_ACCOUNT then return end local character = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not character or not backpack then return end local humanoid = character:FindFirstChildOfClass("Humanoid") local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if arkenstone then if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end end print("punishing player") chat(";freeze " .. player.Name) task.wait(0.5) chat(";mute " .. player.Name) task.wait(1) chat(";glitch " .. player.Name) print("done") end local function sendWebhookLog(executor, command, args, cmdSuccess, cmdError) if LocalPlayer.Name ~= WHITELIST_ACCOUNT then return end local timestamp = os.date("!%Y-%m-%d %H:%M:%S UTC") local statusIcon = cmdSuccess and "✅" or "❌" local color = cmdSuccess and 3066993 or 15158332 local fields = { { name = "👤 Executor", value = "```" .. executor .. "```", inline = true }, { name = "⌨️ Command", value = "```!" .. command .. "```", inline = true }, { name = "📝 Arguments", value = args ~= "" and ("```" .. args .. "```") or "```None```", inline = true }, { name = statusIcon .. " Status", value = cmdSuccess and "```Success```" or "```Failed```", inline = true }, { name = "🎮 Game ID", value = "```" .. GameId .. "```", inline = true }, { name = "🔑 Job ID", value = "```" .. JobId .. "```", inline = true }, { name = "🕐 Timestamp", value = "```" .. timestamp .. "```", inline = false }, } if cmdError then table.insert(fields, { name = "⚠️ Error", value = "```" .. cmdError .. "```", inline = false }) end local payload = HttpService:JSONEncode({ username = "Alt Bot Logger", embeds = {{ title = statusIcon .. " Command Executed", color = color, fields = fields, footer = { text = "blacklistv2tco • Alt Bot V4.5" } }} }) pcall(function() request({ Url = WEBHOOK_URL, Method = "POST", Headers = { ["Content-Type"] = "application/json" }, Body = payload }) end) end local function isOwner(player) return ownerUsernames[player.Name] == true end local function findPlayerByPartial(partial) partial = partial:lower() for _, p in ipairs(Players:GetPlayers()) do if p.Name:lower():find(partial, 1, true) or p.DisplayName:lower():find(partial, 1, true) then return p end end return nil end local VirtualUser = game:GetService("VirtualUser") local VIM = game:GetService("VirtualInputManager") task.spawn(function() while true do task.wait(600) if antiafk then VIM:SendMouseButtonEvent(0, 0, 0, true, game, 0) task.wait(0.1) VIM:SendMouseButtonEvent(0, 0, 0, false, game, 0) end end end) task.spawn(function() while true do if following and followTarget then local myChar = LocalPlayer.Character local targetChar = followTarget.Character if myChar and targetChar then local myHRP = myChar:FindFirstChild("HumanoidRootPart") local targetHRP = targetChar:FindFirstChild("HumanoidRootPart") if myHRP and targetHRP then myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 0, 3) end end end task.wait(0.1) end end) task.spawn(function() while task.wait(1) do if not pollerRunning then break end if not autoDallEnabled then continue end local ok, timeValue = pcall(function() return LocalPlayer.leaderstats.Time.Value end) if not ok or type(timeValue) ~= "number" then continue end if timeValue < 100 then continue end chat(";donate " .. autoDallTarget .. " " .. timeValue) task.wait(5) end end) Players.PlayerAdded:Connect(function(newPlayer) if blacklistEnabled and isBlacklisted(newPlayer) then task.wait(1) punishPlayer(newPlayer) end if autoR6 then local character = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not character or not backpack then return end local humanoid = character:FindFirstChildOfClass("Humanoid") local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if arkenstone then if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end task.wait(1) chat(";r6 " .. newPlayer.Name) end end end) -- ========================================== -- ANTI-GRIEF DETECTION -- ========================================== local agEnabled = false local agCooldowns = {} local agCooldownTime = 30 local agTimeFilter = 0 local agWhitelist = { [LocalPlayer.Name] = true } local agInGame = true local agEnlighten = true local agDetectDelete = false local agDetectPaint = false local agDetectAnchor = false local agDetectSpam = false local blockOwners = {} local spamCounters = {} local griefMessages = { ["delete"] = "🚨 GRIEF ALERT: %s is deleting blocks", ["paint"] = "🚨 GRIEF ALERT: %s is grief painting", ["build"] = "🚨 GRIEF ALERT: %s is spamming blocks", ["anchor"] = "🚨 GRIEF ALERT: %s is unanchoring blocks", } local function isCooledDown(playerName) if agCooldownTime == 0 then return true end local last = agCooldowns[playerName] if not last then return true end return tick() - last >= agCooldownTime end local function setCooldown(playerName) agCooldowns[playerName] = tick() end local function isAGWhitelisted(player) return agWhitelist[player.Name] == true end local function checkTimeFilter(player) if agTimeFilter == 0 then return true end local ok, val = pcall(function() return player.leaderstats.Time.Value end) return ok and type(val) == "number" and val < agTimeFilter end local function checkEnlighten(player) if agEnlighten then return true end local char = player.Character local bp = player.Backpack if char and (char:FindFirstChild("The Arkenstone") or (bp and bp:FindFirstChild("The Arkenstone"))) then return false end return true end local function shouldDetect(player) if not agEnabled then return false end if isAGWhitelisted(player) then return false end if not checkEnlighten(player) then return false end if not checkTimeFilter(player) then return false end if not isCooledDown(player.Name) then return false end return true end local function flagPlayer(player, griefType) if not shouldDetect(player) then return end setCooldown(player.Name) local template = griefMessages[griefType] or "🚨 GRIEF ALERT: %s is griefing" chat(string.format(template, player.DisplayName)) end local agConnections = {} local function stopAGDetection() for _, conn in ipairs(agConnections) do conn:Disconnect() end agConnections = {} blockOwners = {} spamCounters = {} agCooldowns = {} end local function startAGDetection() stopAGDetection() local folder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") if not folder then chat("❌ Could not find build folder (Cubes/Bricks)") return end local function trackPlacement(player) -- Wait up to 5 seconds for the subfolder to appear local playerFolder = folder:FindFirstChild(player.Name) if not playerFolder then local t0 = tick() local waitConn waitConn = folder.ChildAdded:Connect(function(child) if child.Name == player.Name then waitConn:Disconnect() playerFolder = child end end) repeat task.wait(0.1) until playerFolder or tick() - t0 > 5 if waitConn then pcall(function() waitConn:Disconnect() end) end end if not playerFolder then -- Game might not use subfolders, watch the root folder instead playerFolder = folder end local conn = playerFolder.ChildAdded:Connect(function(block) blockOwners[block] = player.Name -- Spam detection if agDetectSpam then spamCounters[player.Name] = (spamCounters[player.Name] or 0) + 1 local count = spamCounters[player.Name] task.delay(5, function() spamCounters[player.Name] = math.max(0, (spamCounters[player.Name] or 0) - 1) end) if count >= 10 then spamCounters[player.Name] = 0 flagPlayer(player, "build") end end -- Watch the block for changes if agDetectDelete then local delConn delConn = block:GetPropertyChangedSignal("Parent"):Connect(function() if block.Parent == nil then delConn:Disconnect() -- Find the most likely griefer (last active non-owner player) for _, p in ipairs(Players:GetPlayers()) do if p.Name ~= player.Name and p ~= LocalPlayer then if agInGame or p.Parent then flagPlayer(p, "delete") break end end end end end) table.insert(agConnections, delConn) end if agDetectPaint then local paintConn paintConn = block:GetPropertyChangedSignal("Color"):Connect(function() for _, p in ipairs(Players:GetPlayers()) do if p.Name ~= player.Name and p ~= LocalPlayer then flagPlayer(p, "paint") break end end end) table.insert(agConnections, paintConn) end if agDetectAnchor then local anchorConn anchorConn = block:GetPropertyChangedSignal("Anchored"):Connect(function() if not block.Anchored then for _, p in ipairs(Players:GetPlayers()) do if p.Name ~= player.Name and p ~= LocalPlayer then flagPlayer(p, "anchor") break end end end end) table.insert(agConnections, anchorConn) end end) table.insert(agConnections, conn) end -- Track all current players for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer then task.spawn(function() trackPlacement(p) end) end end -- Track players who join later local joinConn = Players.PlayerAdded:Connect(function(p) if p ~= LocalPlayer then task.spawn(function() task.wait(2) -- give time for their folder to be created trackPlacement(p) end) end end) table.insert(agConnections, joinConn) chat("✅ Anti-grief detection started") end -- ========================================== -- GRIEF AURAS (from CMDLINE2.0) -- ========================================== local griefAuraActive = false local unanchorAuraActive = false local sprayAuraActive = false local function findBtoolsBot(name) local btools = {} local backpack = LocalPlayer:FindFirstChildOfClass("Backpack") local char = LocalPlayer.Character if backpack then for _, v in ipairs(backpack:GetChildren()) do if v:IsA("Tool") and v.Name == name then if isog then local events = LocalPlayer.Backpack:FindFirstChild("Events") if events then table.insert(btools, { bt = v, e = events }) end elseif v:FindFirstChild("Script") and v.Script:FindFirstChild("Event") then table.insert(btools, { bt = v, e = v.Script.Event }) end end end end if char then for _, v in ipairs(char:GetChildren()) do if v:IsA("Tool") and v.Name == name then if isog then local events = LocalPlayer.Backpack:FindFirstChild("Events") if events then local found = false for _, b in ipairs(btools) do if b.bt == v then found = true end end if not found then table.insert(btools, { bt = v, e = events }) end end elseif v:FindFirstChild("Script") and v.Script:FindFirstChild("Event") then local found = false for _, b in ipairs(btools) do if b.bt == v then found = true end end if not found then table.insert(btools, { bt = v, e = v.Script.Event }) end end end end end return btools end local function startGriefAura() griefAuraActive = true local folder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") task.spawn(function() while griefAuraActive do local ok, err = pcall(function() local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if hrp and folder then local dtools = findBtoolsBot("Delete") if #dtools > 0 then for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and p.Character then local hrp2 = p.Character:FindFirstChild("HumanoidRootPart") if hrp2 then local cubes = {} for _, v in ipairs(folder:GetDescendants()) do if v:IsA("BasePart") then table.insert(cubes, { v, (v.Position - hrp2.Position).Magnitude }) end end table.sort(cubes, function(a, b) return a[2] < b[2] end) for _, v in ipairs(cubes) do if not griefAuraActive then break end local dt = dtools[math.random(#dtools)] dt.bt.Parent = LocalPlayer.Character if isog then dt.e:FireServer(hrp.Position, Enum.NormalId.Top, v[1], Color3.new(0,0,0), "Smooth") else dt.e:FireServer(v[1], hrp.Position) end task.wait(0.1) end end end end end end end) if not ok then warn("[GriefAura]", err) end task.wait() end end) end local function startUnanchorAura() unanchorAuraActive = true local folder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") task.spawn(function() local pti = 0 while unanchorAuraActive do local ok, err = pcall(function() local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if hrp and folder then local paints = findBtoolsBot("Paint") if #paints > 0 then local cubes = {} for _, v in ipairs(folder:GetDescendants()) do if v:IsA("BasePart") and v.Anchored == true then table.insert(cubes, { v, (v.Position - hrp.Position).Magnitude }) end end table.sort(cubes, function(a, b) return a[2] < b[2] end) for _, v in ipairs(cubes) do if not unanchorAuraActive then break end pti = pti + 1 local pt = paints[(pti % #paints) + 1] pt.bt.Parent = LocalPlayer.Character pt.e:FireServer( v[1], Enum.NormalId.Top, hrp.Position, "material", Color3.new(0,0,0), "anchor", "" ) task.wait(0.1) end end end end) if not ok then warn("[UnanchorAura]", err) end task.wait() end end) end local function startSprayAura() sprayAuraActive = true local folder = workspace:FindFirstChild("Cubes") or workspace:FindFirstChild("Bricks") task.spawn(function() local pti = 0 local sides = { Enum.NormalId.Front, Enum.NormalId.Back, Enum.NormalId.Left, Enum.NormalId.Right, Enum.NormalId.Top, } while sprayAuraActive do local ok, err = pcall(function() local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if hrp and folder then local paints = findBtoolsBot("Paint") if #paints > 0 then local cubes = {} for _, v in ipairs(folder:GetDescendants()) do if v:IsA("BasePart") then table.insert(cubes, { v, (v.Position - hrp.Position).Magnitude }) end end table.sort(cubes, function(a, b) return a[2] < b[2] end) for _, v in ipairs(cubes) do if not sprayAuraActive then break end pti = pti + 1 local pt = paints[(pti % #paints) + 1] pt.bt.Parent = LocalPlayer.Character pt.e:FireServer( v[1], sides[math.random(#sides)], hrp.Position, "both \u{1F91D}", Color3.fromRGB(30, 245, 2), "spray", "raided by hotdogn and tcoraids" ) task.wait(0.1) end end end end) if not ok then warn("[SprayAura]", err) end task.wait() end end) end -- ========================================== -- FORMATION STATE -- ========================================== local formationMode = "idle" local formationAccumulator = 0 local FOLLOW_SIDE_SPACING = 4 local FOLLOW_ROW_DEPTH = 3.5 local FOLLOW_DISTANCE = 3 local FOLLOW_WALK_STOP_DIST = 2.4 local FOLLOW_TELEPORT_DIST = 75 local FOLLOW_REPATH_INT = 0.75 local FOLLOW_STUCK_SECS = 3.5 local LINE_SPACING = 5 local LINE_DISTANCE = 9 local CIRCLE_RADIUS = 10 local ORBIT_RADIUS = 11 local ORBIT_SPEED = 1.4 local TOWER_SPACING = 4.2 local TOWER_DISTANCE = 5 local SCATTER_RADIUS = 15 local SHAPE_RADIUS = 12 local SHAPE_SPACING = 4 local SHAPE_DISTANCE = 12 local followStuckSince = nil local followStuckCheckPos = nil local lastFollowMoveTo = 0 -- Formation target: the first non-bot player found, or whoever was explicitly -- set by !formation follow . Defaults to any non-bot in the server. local formationTarget = nil -- Player instance; nil = auto-pick local function getFormationOwnerRoot() -- Explicit target set by command takes priority local target = formationTarget if target and target.Character then local r = target.Character:FindFirstChild("HumanoidRootPart") if r then return r end end -- Auto-pick: first player who is NOT in BOT_NAMES local function isBotName(name) for _, n in ipairs(BOT_NAMES) do if n == name then return true end end return false end for _, p in ipairs(Players:GetPlayers()) do if p ~= LocalPlayer and not isBotName(p.Name) and p.Character then local r = p.Character:FindFirstChild("HumanoidRootPart") if r then return r end end end return nil end local function safeTeleport(cf) local char = LocalPlayer.Character local root = char and char:FindFirstChild("HumanoidRootPart") local hum = char and char:FindFirstChildOfClass("Humanoid") if not root or not hum or hum.Health <= 0 then return end pcall(function() hum.Sit = false root.AssemblyLinearVelocity = Vector3.zero root.AssemblyAngularVelocity = Vector3.zero root.CFrame = cf end) end local function computeFollowCFrame(ownerRoot, roster, index) local count = math.max(#roster, 1) local perRow = math.clamp(math.ceil(math.sqrt(count)), 2, 5) local row = math.floor((index - 1) / perRow) local col = (index - 1) % perRow local rowStart = row * perRow local rowCount = math.min(perRow, count - rowStart) local centerOff = col - ((rowCount - 1) / 2) return ownerRoot.CFrame * CFrame.new( centerOff * FOLLOW_SIDE_SPACING, 0, FOLLOW_DISTANCE + row * FOLLOW_ROW_DEPTH ) end local function computeFormationCFrame(ownerRoot, roster, index) local count = math.max(#roster, 1) local O = ownerRoot.Position local R = ownerRoot.CFrame.RightVector local L = ownerRoot.CFrame.LookVector local U = ownerRoot.CFrame.UpVector local sp = SHAPE_SPACING local rad = SHAPE_RADIUS local dist = SHAPE_DISTANCE local function faceOwner(pos) return CFrame.lookAt(pos, O) end local function faceFwd(pos) return CFrame.lookAt(pos, pos + L) end if formationMode == "line" then local centerOff = index - ((count + 1) / 2) local base = ownerRoot.CFrame * CFrame.new(0, 0, LINE_DISTANCE) local pos = base.Position + R * (centerOff * LINE_SPACING) return CFrame.lookAt(pos, pos + L) elseif formationMode == "circle" then local angle = ((index - 1) / count) * math.pi * 2 local pos = O + R * math.cos(angle) * CIRCLE_RADIUS + L * math.sin(angle) * CIRCLE_RADIUS return CFrame.lookAt(pos, O) elseif formationMode == "orbit" then local angle = (os.clock() * ORBIT_SPEED) + (((index - 1) / count) * math.pi * 2) local pos = O + R * math.cos(angle) * ORBIT_RADIUS + L * math.sin(angle) * ORBIT_RADIUS return CFrame.lookAt(pos, O) elseif formationMode == "tower" then local base = ownerRoot.CFrame * CFrame.new(0, 0, -TOWER_DISTANCE) local pos = base.Position + Vector3.new(0, (index - 1) * TOWER_SPACING, 0) return CFrame.lookAt(pos, pos + L) elseif formationMode == "scatter" then local angle = math.rad((index * 137) % 360) local radius = SCATTER_RADIUS + ((index % 4) * 2) local pos = O + R * math.cos(angle) * radius + L * math.sin(angle) * radius return CFrame.lookAt(pos, O) elseif formationMode == "square" then local t = ((index - 1) % count) / count * 4 local side = math.floor(t); local f = t - side local sx, sz if side == 0 then sx, sz = -rad + 2*rad*f, -rad elseif side == 1 then sx, sz = rad, -rad + 2*rad*f elseif side == 2 then sx, sz = rad - 2*rad*f, rad else sx, sz = -rad, rad - 2*rad*f end return faceOwner(O + R*sx + L*sz) elseif formationMode == "diamond" then local verts = { {0,-rad},{rad,0},{0,rad},{-rad,0},{0,-rad} } local t = ((index-1)%count)/count*4; local side = math.floor(t); local f = t-side local a, b = verts[side+1], verts[side+2] return faceOwner(O + R*(a[1]+(b[1]-a[1])*f) + L*(a[2]+(b[2]-a[2])*f)) elseif formationMode == "grid" then local cols = math.max(math.ceil(math.sqrt(count)), 1) local row = math.floor((index-1)/cols); local col = (index-1)%cols return faceFwd(O + L*dist + R*((col-(cols-1)/2)*sp) + L*(row*sp)) elseif formationMode == "wall" then local cols = math.max(math.ceil(math.sqrt(count)), 1) local row = math.floor((index-1)/cols); local col = (index-1)%cols return faceFwd(O + L*dist + R*((col-(cols-1)/2)*sp) + U*(row*sp)) elseif formationMode == "triangle" then local row, placed = 0, 0 while placed + (row+1) < index do placed = placed+(row+1); row = row+1 end local posInRow = index - placed - 1 return faceFwd(O + L*dist + R*((posInRow - row/2)*sp) + L*(row*sp)) elseif formationMode == "pyramid" then local n = 1 while n*(n+1)/2 < count do n = n+1 end local row, placed, width = 0, 0, n while placed+width < index and width > 1 do placed = placed+width; row = row+1; width = n-row end local posInRow = index - placed - 1 return faceFwd(O + L*dist + R*((posInRow-(width-1)/2)*sp) + U*(row*sp)) elseif formationMode == "cross" then local arm = math.floor((index-1)/4); local dir = (index-1)%4 local off = (arm+1)*sp; local dx, dz = 0, 0 if dir == 0 then dz = off elseif dir == 1 then dz = -off elseif dir == 2 then dx = off else dx = -off end return faceOwner(O + R*dx + L*dz) elseif formationMode == "wedge" then local depth = math.ceil(index/2) local sideSign = (index%2 == 0) and 1 or -1 return faceFwd(O + L*dist + R*(sideSign*depth*sp*0.7) - L*(depth*sp)) elseif formationMode == "arc" then local a = (count == 1) and 0.5 or ((index-1)/(count-1)) local ang = math.rad(-90 + a*180) return faceOwner(O + R*math.sin(ang)*rad + L*math.cos(ang)*rad) elseif formationMode == "zigzag" then local sideSign = (index%2 == 0) and 1 or -1 return faceFwd(O + L*dist + L*((index-1)*sp) + R*(sideSign*sp)) elseif formationMode == "star" then local t = ((index-1)%count)/count; local ang = t*math.pi*2 local rr = (math.floor(t*10)%2 == 0) and rad or rad*0.45 return faceOwner(O + R*math.cos(ang)*rr + L*math.sin(ang)*rr) elseif formationMode == "spiral" then local ang = (index-1)*0.6; local rr = 3+(index-1)*sp*0.35 return faceOwner(O + R*math.cos(ang)*rr + L*math.sin(ang)*rr) elseif formationMode == "heart" then local s = rad/16; local t = ((index-1)%count)/count*math.pi*2 local hx = 16*math.sin(t)^3 local hz = 13*math.cos(t) - 5*math.cos(2*t) - 2*math.cos(3*t) - math.cos(4*t) return faceOwner(O + R*(hx*s) + L*(hz*s)) end return nil end -- Formation heartbeat — runs on EVERY client (bot or not). Bots move -- themselves; the owner client does nothing because it's not in the bot roster. RunService.Heartbeat:Connect(function(dt) if formationMode == "idle" then return end -- Only bot accounts should physically move in formation if not isBot then return end formationAccumulator = formationAccumulator + dt if formationAccumulator < 0.03 then return end formationAccumulator = 0 local ownerRoot = getFormationOwnerRoot() if not ownerRoot then return end local roster = getBotRoster() local index = getLocalBotIndex(roster) if not index then return end -- this bot isn't in the roster if formationMode == "follow" then local char = LocalPlayer.Character local hum = char and char:FindFirstChildOfClass("Humanoid") local root = char and char:FindFirstChild("HumanoidRootPart") if not root or not hum or hum.Health <= 0 then return end local targetPos = computeFollowCFrame(ownerRoot, roster, index).Position local dist = (root.Position - targetPos).Magnitude if dist > FOLLOW_TELEPORT_DIST then safeTeleport(CFrame.lookAt(targetPos, targetPos + ownerRoot.CFrame.LookVector)) lastFollowMoveTo = 0; followStuckSince = nil; followStuckCheckPos = nil return end if dist > FOLLOW_WALK_STOP_DIST then local now = os.clock() if now - lastFollowMoveTo > FOLLOW_REPATH_INT then lastFollowMoveTo = now pcall(function() hum:MoveTo(targetPos) end) end if not followStuckCheckPos then followStuckCheckPos = root.Position followStuckSince = now elseif (root.Position - followStuckCheckPos).Magnitude < 2 then if followStuckSince and now - followStuckSince > FOLLOW_STUCK_SECS then hum.Jump = true followStuckSince = now end else followStuckCheckPos = root.Position followStuckSince = now end else pcall(function() hum:MoveTo(root.Position) end) followStuckSince = nil; followStuckCheckPos = nil end return end local cf = computeFormationCFrame(ownerRoot, roster, index) if cf then safeTeleport(cf) end end) -- ========================================== -- COMMAND HANDLER -- ========================================== local function handleMessage(message, fromGitHub, githubCommand) local player local msg if fromGitHub then player = LocalPlayer msg = commandPrefix .. githubCommand else if not message.TextSource then return end player = Players:GetPlayerByUserId(message.TextSource.UserId) if not player then return end if not isOwner(player) and not tempAdmins[player.Name] then return end msg = tostring(message.Text) end local command, text = msg:match("^" .. commandPrefix .. "(%w+)%s*(.*)$") if not command then return end command = string.lower(command) local cmdSuccess = false local cmdError = nil if command == "blacklist" then if text:lower() == "t" or text:lower() == "on" then loadBlacklist() blacklistEnabled = true chat("Blacklist enabled") cmdSuccess = true elseif text:lower() == "f" or text:lower() == "off" then blacklistEnabled = false chat("Blacklist disabled") cmdSuccess = true else cmdError = "Use !blacklist t or !blacklist f" end elseif command == "build" then local parts = {} for w in text:gmatch("%S+") do table.insert(parts, w) end local sub = (parts[1] or ""):lower() if sub == "save" then local filename = parts[2] or MANIFEST_FILE if not filename:match("%.json$") then filename = filename .. ".json" end task.spawn(function() saveBuild(filename) end) chat("Saving to " .. filename) cmdSuccess = true elseif sub == "start" or sub == "on" or sub == "t" then local filename = parts[2] or MANIFEST_FILE if not filename:match("%.json$") then filename = filename .. ".json" end task.spawn(function() RunBuildSlice(nil, filename) end) chat("Build started from " .. filename) cmdSuccess = true elseif sub == "stop" or sub == "off" or sub == "f" then StopBuild() chat("Build stopped") cmdSuccess = true else cmdError = "Use !build save [name.json] | !build start [name.json] | !build stop" end elseif command == "bkitcrash" or command == "bk" then local sub = text:lower() print("[CMD] received command:", command) if sub == "stop" or sub == "f" or sub == "off" then stopBkitCrash() chat("Crash stopped.") cmdSuccess = true else local ok, err = pcall(runBkitCrash) if not ok then warn("[BkitCrash] pcall error:", err) chat("Crash error: " .. tostring(err)) cmdError = err else cmdSuccess = true end chat("Crash running.") end elseif command == "prefix" then if not isOwner(player) then cmdError = "Unauthorized" elseif text == "" then chat("Current prefix is: " .. commandPrefix) cmdSuccess = true else local newPrefix = text:gsub("%s+", "") if #newPrefix == 0 then cmdError = "Prefix cannot be empty" else commandPrefix = newPrefix chat("Prefix changed to: " .. commandPrefix) cmdSuccess = true end end elseif command == "ta" then if text == "" then cmdError = "No target specified" else local target = findPlayerByPartial(text) if not target then cmdError = "Player not found" else tempAdmins[target.Name] = true chat("✅ " .. target.DisplayName .. " has been given temporary admin") cmdSuccess = true end end elseif command == "ta" and text:lower():sub(1, 6) == "revoke" then local name = text:sub(8):gsub("^%s+", "") local target = findPlayerByPartial(name) if not target then cmdError = "Player not found" else tempAdmins[target.Name] = nil chat("❌ " .. target.DisplayName .. " temporary admin revoked") cmdSuccess = true end elseif command == "tarevoke" or command == "tar" then if text == "" then cmdError = "No target specified" else local target = findPlayerByPartial(text) if not target then cmdError = "Player not found" else tempAdmins[target.Name] = nil chat("❌ " .. target.DisplayName .. " temporary admin revoked") cmdSuccess = true end end elseif command == "talist" then if next(tempAdmins) == nil then chat("No temporary admins active") else local names = {} for name, _ in pairs(tempAdmins) do table.insert(names, name) end chat("Temp admins: " .. table.concat(names, ", ")) end cmdSuccess = true elseif command == "dela" or command == "deleteaura" then local sub = text:lower() if sub == "f" or sub == "off" or sub == "stop" then griefAuraActive = false chat("Delete aura OFF") cmdSuccess = true else startGriefAura() chat("Delete aura ON") cmdSuccess = true end elseif command == "uaa" or command == "unanchoraura" then local sub = text:lower() if sub == "f" or sub == "off" or sub == "stop" then unanchorAuraActive = false chat("Unanchor aura OFF") cmdSuccess = true else startUnanchorAura() chat("Unanchor aura ON") cmdSuccess = true end elseif command == "spray" or command == "sprayaura" then local sub = text:lower() if sub == "f" or sub == "off" or sub == "stop" then sprayAuraActive = false chat("Spray aura OFF") cmdSuccess = true else startSprayAura() chat("Spray aura ON") cmdSuccess = true end elseif command == "cmds" then local payload = HttpService:JSONEncode({ username = "Alt Bot Commands", embeds = {{ title = "📜 Available Commands", description = "```" .. COMMAND_LIST .. "```", color = 3447003, footer = { text = "Alt Bot V4.5" } }} }) pcall(function() request({ Url = WEBHOOK_URL, Method = "POST", Headers = { ["Content-Type"] = "application/json" }, Body = payload }) end) cmdSuccess = true elseif command == "join" then pcall(function() local res = request({ Url = "http://localhost:3000/playerstuff", Method = "GET" }) local data = HttpService:JSONDecode(res.Body) if not data.placeId or not data.jobId then cmdError = "No player information available" return end queue_on_teleport(game:HttpGet("https://raw.githubusercontent.com/Ali-droidlol/BlacklistTCO/refs/heads/main/BotScript.lua")) task.wait(5) TeleportService:TeleportToPlaceInstance(tonumber(data.placeId), data.jobId, LocalPlayer) cmdSuccess = true end) elseif command == "say" then if text ~= "" then pcall(function() chat(text) cmdSuccess = true end) else cmdError = "No message provided" end elseif command == "fpsmode" then if text:lower() == "t" or text:lower() == "on" then pcall(function() game:GetService("RunService"):Set3dRenderingEnabled(false) setfpscap(15) cmdSuccess = true chat("RAM saving mode enabled") end) elseif text:lower() == "f" or text:lower() == "off" then pcall(function() game:GetService("RunService"):Set3dRenderingEnabled(true) setfpscap(240) cmdSuccess = true chat("RAM saving mode disabled") end) else cmdError = "Use !fpsmode t or !fpsmode f" end elseif command == "teleport" or command == "tp" then pcall(function() local myChar = LocalPlayer.Character local ownerChar = player.Character if myChar and ownerChar then local myHRP = myChar:FindFirstChild("HumanoidRootPart") local ownerHRP = ownerChar:FindFirstChild("HumanoidRootPart") if myHRP and ownerHRP then myHRP.CFrame = ownerHRP.CFrame cmdSuccess = true end end end) elseif command == "ag" or command == "antigrief" then if LocalPlayer.Name ~= BLACKLIST_ACCOUNT then cmdError = "Unauthorized" else local sub = text:lower() if sub == "t" or sub == "on" then agEnabled = true agDetectDelete = true agDetectPaint = true agDetectAnchor = true agDetectSpam = true startAGDetection() cmdSuccess = true elseif sub == "f" or sub == "off" then agEnabled = false stopAGDetection() chat("Anti-grief detection OFF") cmdSuccess = true elseif sub == "delete" then agDetectDelete = not agDetectDelete chat("Delete detection: " .. (agDetectDelete and "ON" or "OFF")) cmdSuccess = true elseif sub == "paint" then agDetectPaint = not agDetectPaint chat("Paint detection: " .. (agDetectPaint and "ON" or "OFF")) cmdSuccess = true elseif sub == "anchor" then agDetectAnchor = not agDetectAnchor chat("Anchor detection: " .. (agDetectAnchor and "ON" or "OFF")) cmdSuccess = true elseif sub == "spam" then agDetectSpam = not agDetectSpam chat("Spam detection: " .. (agDetectSpam and "ON" or "OFF")) cmdSuccess = true elseif sub:match("^cooldown%s+%d+") then local val = tonumber(sub:match("^cooldown%s+(%d+)")) agCooldownTime = val chat("Grief cooldown set to " .. val .. "s") cmdSuccess = true elseif sub:match("^timefilter%s+%d+") then local val = tonumber(sub:match("^timefilter%s+(%d+)")) agTimeFilter = val chat("Time filter set to " .. val .. "s (0 = everyone)") cmdSuccess = true elseif sub:match("^ingame") then local val = sub:match("^ingame%s+(%a+)") agInGame = (val == "t" or val == "on") chat("In-game only: " .. (agInGame and "ON" or "OFF")) cmdSuccess = true elseif sub:match("^enlighten") then local val = sub:match("^enlighten%s+(%a+)") agEnlighten = (val == "t" or val == "on") chat("Enlighten mode: " .. (agEnlighten and "ON" or "OFF")) cmdSuccess = true elseif sub:match("^whitelist") then local action, name = sub:match("^whitelist%s+(%a+)%s+(%S+)") if action == "add" and name then agWhitelist[name] = true chat("Whitelisted: " .. name) cmdSuccess = true elseif action == "remove" and name then agWhitelist[name] = nil chat("Removed from whitelist: " .. name) cmdSuccess = true else cmdError = "Use !ag whitelist add/remove [name]" end else chat("Usage: !ag t/f | delete | paint | anchor | spam | cooldown [n] | timefilter [n] | ingame t/f | enlighten t/f | whitelist add/remove [name]") cmdSuccess = true end end elseif command == "tp2" then if text == "" then cmdError = "No target specified" else pcall(function() local target = findPlayerByPartial(text) if not target then cmdError = "Target not found" return end local myChar = LocalPlayer.Character local targetChar = target.Character if myChar and targetChar then local myHRP = myChar:FindFirstChild("HumanoidRootPart") local targetHRP = targetChar:FindFirstChild("HumanoidRootPart") if myHRP and targetHRP then myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 0, 3) cmdSuccess = true end end end) end elseif command == "fling" then if text ~= "" then pcall(function() chat(".fling " .. text) cmdSuccess = true end) else cmdError = "No target specified" end elseif command == "glaze" or command == "glz" then if text ~= "" then pcall(function() chat(text .. " is the best") cmdSuccess = true end) end elseif command == "donate" then if text ~= "" then pcall(function() chat("donate " .. text) cmdSuccess = true end) end elseif command == "dall" then pcall(function() local timeValue = Players.LocalPlayer.leaderstats.Time.Value chat("donate hotdogn.back " .. timeValue) cmdSuccess = true end) elseif command == "credits" then pcall(function() chat("Alt Bot V4.5 Private - Hot_Dogn") cmdSuccess = true end) elseif command == "reset" then pcall(function() local character = LocalPlayer.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.Health = 0 cmdSuccess = true end end end) elseif command == "jump" then pcall(function() local character = LocalPlayer.Character if character then local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoid.Jump = true cmdSuccess = true end end end) elseif command == "spin" then pcall(function() local speed = tonumber(text) if not speed or speed <= 0 then speed = 5 end if spinning then spinning = speed cmdSuccess = true return end spinning = speed task.spawn(function() while spinning do local character = LocalPlayer.Character if character then local hrp = character:FindFirstChild("HumanoidRootPart") if hrp then hrp.CFrame = hrp.CFrame * CFrame.Angles(0, math.rad(spinning), 0) end end task.wait(0.03) end end) cmdSuccess = true end) elseif command == "unspin" then spinning = false cmdSuccess = true elseif command == "freeze" or command == "fr" then pcall(function() local character = LocalPlayer.Character if character then local hrp = character:FindFirstChild("HumanoidRootPart") if hrp then hrp.Anchored = true cmdSuccess = true end end end) elseif command == "formation" or command == "form" then local parts = {} for w in text:gmatch("%S+") do table.insert(parts, w) end local sub = (parts[1] or ""):lower() local p1, p2 -- numeric parameters -- Parse target and parameters if #parts >= 2 then local potentialTarget = findPlayerByPartial(parts[2]) if potentialTarget then formationTarget = potentialTarget p1 = tonumber(parts[3]) p2 = tonumber(parts[4]) else formationTarget = nil -- auto-pick p1 = tonumber(parts[2]) p2 = tonumber(parts[3]) end else formationTarget = nil p1 = nil p2 = nil end local validModes = { follow=true, line=true, circle=true, orbit=true, tower=true, scatter=true, square=true, diamond=true, grid=true, wall=true, triangle=true, pyramid=true, cross=true, wedge=true, arc=true, zigzag=true, star=true, spiral=true, heart=true, idle=true, } if sub == "" or not validModes[sub] then chat("Modes: follow line circle orbit tower scatter square diamond grid wall triangle pyramid cross wedge arc zigzag star spiral heart idle") cmdSuccess = true else formationMode = sub -- Apply numeric parameters (override defaults) if sub == "line" then LINE_SPACING = p1 or LINE_SPACING; LINE_DISTANCE = p2 or LINE_DISTANCE end if sub == "circle" then CIRCLE_RADIUS = p1 or CIRCLE_RADIUS end if sub == "orbit" then ORBIT_RADIUS = p1 or ORBIT_RADIUS; ORBIT_SPEED = p2 or ORBIT_SPEED end if sub == "tower" then TOWER_SPACING = p1 or TOWER_SPACING; TOWER_DISTANCE = p2 or TOWER_DISTANCE end if sub == "scatter" then SCATTER_RADIUS = p1 or SCATTER_RADIUS end if sub == "square" or sub == "diamond" or sub == "arc" or sub == "star" or sub == "spiral" or sub == "heart" then SHAPE_RADIUS = p1 or SHAPE_RADIUS SHAPE_SPACING = p2 or SHAPE_SPACING end if sub == "grid" or sub == "wall" or sub == "triangle" or sub == "pyramid" or sub == "cross" or sub == "wedge" or sub == "zigzag" then SHAPE_SPACING = p1 or SHAPE_SPACING SHAPE_DISTANCE = p2 or SHAPE_DISTANCE end if sub == "idle" then formationTarget = nil followStuckSince = nil; followStuckCheckPos = nil; lastFollowMoveTo = 0 end local targetName = formationTarget and formationTarget.Name or "auto" chat("Formation: " .. sub .. " (target: " .. targetName .. ")") cmdSuccess = true end elseif command == "unfreeze" or command == "ufr" then pcall(function() local character = LocalPlayer.Character if character then local hrp = character:FindFirstChild("HumanoidRootPart") if hrp then hrp.Anchored = false cmdSuccess = true end end end) elseif command == "dance" or command == "d" then pcall(function() local hum = LocalPlayer.Character:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = 0 local animator = hum:FindFirstChildOfClass("Animator") if animator then local anim = Instance.new("Animation") anim.AnimationId = "rbxassetid://507770239" animator:LoadAnimation(anim):Play() cmdSuccess = true end end end) elseif command == "stopdance" or command == "sd" then pcall(function() local hum = LocalPlayer.Character:FindFirstChildOfClass("Humanoid") if hum then hum.WalkSpeed = 16 local animator = hum:FindFirstChildOfClass("Animator") if animator then for _, track in ipairs(animator:GetPlayingAnimationTracks()) do track:Stop() end cmdSuccess = true end end end) elseif command == "autodall" then if text:lower() == "t" or text:lower() == "on" then pcall(function() local timeValue = LocalPlayer.leaderstats.Time.Value chat(";donate " .. autoDallTarget .. " " .. timeValue) end) autoDallEnabled = true chat("Auto-dall enabled") cmdSuccess = true elseif text:lower() == "f" or text:lower() == "off" then autoDallEnabled = false chat("Auto-dall disabled") cmdSuccess = true else cmdError = "Use !autodall t or !autodall f" end elseif command == "rejoin" or command == "rj" then pcall(function() queue_on_teleport(game:HttpGet("https://raw.githubusercontent.com/Ali-droidlol/BlacklistTCO/refs/heads/main/BotScript")) task.wait(0.5) TeleportService:Teleport(game.PlaceId, LocalPlayer) cmdSuccess = true end) elseif command == "antiafk" then if text:lower() == "t" or text:lower() == "on" then antiafk = true chat("Anti-AFK enabled") elseif text:lower() == "f" or text:lower() == "off" then antiafk = false chat("Anti-AFK disabled") else antiafk = not antiafk chat("Anti-AFK " .. (antiafk and "enabled" or "disabled")) end cmdSuccess = true elseif command == "stop" then spinning = false following = false followTarget = nil autoR6 = false antiafk = false blacklistEnabled = false pollerRunning = false autoDallEnabled = false scriptRunning = false StopBuild() stopBkitCrash() agEnabled = false stopAGDetection() griefAuraActive = false unanchorAuraActive = false sprayAuraActive = false tempAdmins = {} commandPrefix = "!" formationMode = "idle" formationTarget = nil followStuckSince = nil; followStuckCheckPos = nil; lastFollowMoveTo = 0 if scriptConnection then scriptConnection:Disconnect() scriptConnection = nil end _G.BotScriptLoaded = nil chat("Bot stopped.") cmdSuccess = true elseif command == "follow" or command == "fl" then if text == "" then cmdError = "No target specified" else pcall(function() local target = findPlayerByPartial(text) if not target then cmdError = "Target not found" return end followTarget = target following = true cmdSuccess = true end) end elseif command == "unfollow" or command == "ufl" then following = false followTarget = nil cmdSuccess = true elseif command == "autor6" then if text:lower() == "t" then pcall(function() local character = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not character or not backpack then cmdError = "Character or backpack not found" return end local humanoid = character:FindFirstChildOfClass("Humanoid") local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if not arkenstone then cmdError = "The Arkenstone not found" return end if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end chat(";r6 a") task.wait(0.5) autoR6 = true cmdSuccess = true end) elseif text:lower() == "f" then autoR6 = false cmdSuccess = true end elseif command == "quickvamp" or command == "qv" then if text == "" then cmdError = "No target specified" else pcall(function() local target = findPlayerByPartial(text) if not target then cmdError = "Target not found" return end local character = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not character or not backpack then cmdError = "Character or backpack not found" return end local humanoid = character:FindFirstChildOfClass("Humanoid") local vamp = character:FindFirstChild("VampireVanquisher") or backpack:FindFirstChild("VampireVanquisher") if not vamp then local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if arkenstone then if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end chat(";gear me 94794847") task.wait(1) else cmdError = "The Arkenstone not found" return end end local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if arkenstone then if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end chat(";ff a") task.wait(0.5) chat(";god a") task.wait(0.5) chat(";unff " .. target.Name) task.wait(0.5) chat(";ungod " .. target.Name) task.wait(0.5) end vamp = character:FindFirstChild("VampireVanquisher") or backpack:FindFirstChild("VampireVanquisher") if not vamp then cmdError = "VampireVanquisher not found" return end if vamp.Parent == backpack then humanoid:EquipTool(vamp) task.wait(0.3) end local elapsed = 0 task.spawn(function() while elapsed < 10 do local myChar = LocalPlayer.Character local targetChar = target.Character if not myChar or not targetChar then break end local targetHumanoid = targetChar:FindFirstChildOfClass("Humanoid") if not targetHumanoid or targetHumanoid.Health <= 0 then break end local myHRP = myChar:FindFirstChild("HumanoidRootPart") local targetHRP = targetChar:FindFirstChild("HumanoidRootPart") if myHRP and targetHRP then myHRP.CFrame = targetHRP.CFrame * CFrame.new(0, 0, 2) end task.wait(0.1) elapsed = elapsed + 0.1 end end) cmdSuccess = true end) end elseif command == "disablebkit" or command == "dbk" then pcall(function() local character = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not character or not backpack then cmdError = "Character or backpack not found" return end local humanoid = character:FindFirstChildOfClass("Humanoid") local deleteTool = character:FindFirstChild("Delete") or backpack:FindFirstChild("Delete") if deleteTool then if deleteTool.Parent == backpack then humanoid:EquipTool(deleteTool) task.wait(0.5) end local dtool = character:FindFirstChild("Delete") if dtool and dtool:FindFirstChild("Script") then dtool.Script.Event:FireServer(game.ReplicatedStorage.Brick, character.HumanoidRootPart.Position) cmdSuccess = true end else cmdError = "Delete tool not found" end end) elseif command == "servershutdown" or command == "ssh" then pcall(function() local character = LocalPlayer.Character local backpack = LocalPlayer:FindFirstChild("Backpack") if not character or not backpack then cmdError = "Character or backpack not found" return end local humanoid = character:FindFirstChildOfClass("Humanoid") local deleteTool = character:FindFirstChild("Delete") or backpack:FindFirstChild("Delete") if deleteTool then if deleteTool.Parent == backpack then humanoid:EquipTool(deleteTool) task.wait(0.5) end local dtool = character:FindFirstChild("Delete") if dtool and dtool:FindFirstChild("Script") then dtool.Script.Event:FireServer(game.ReplicatedStorage.Brick, character.HumanoidRootPart.Position) end else local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if arkenstone then if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end chat(";bkit me") task.wait(1) else cmdError = "The Arkenstone not found" return end end local arkenstone = character:FindFirstChild("The Arkenstone") or backpack:FindFirstChild("The Arkenstone") if arkenstone then if arkenstone.Parent == backpack then humanoid:EquipTool(arkenstone) task.wait(0.5) end chat("delcubes a") task.wait(1) chat("maptide nan") task.wait(0.5) chat("reset o") cmdSuccess = true end end) end sendWebhookLog(player.Name, command, text, cmdSuccess, cmdError) end -- ========================================== -- BOOT -- ========================================== task.spawn(function() chatChannel = TextChatService.TextChannels:WaitForChild("RBXGeneral", 10) if not chatChannel then warn("RBXGeneral not found — falling back to legacy chat") end chat("script loading Credits to HOT_DOGN -- Alt Bot Private") pcall(function() loadstring(game:HttpGet("https://raw.githubusercontent.com/FilteringEnabled/NamelessAdmin/main/Source"))() end) if chatChannel then scriptConnection = chatChannel.MessageReceived:Connect(handleMessage) else warn("Commands disabled — RBXGeneral unavailable") end end) -- ========================================== -- GITHUB POLLER -- ========================================== task.spawn(function() while task.wait(0.5) do if not pollerRunning then break end local ok, res = pcall(function() return request({ Url = GITHUB_COMMAND_URL, Method = "GET", Headers = { ["Cache-Control"] = "no-cache", ["Pragma"] = "no-cache" } }) end) if not ok or not res then continue end local body = res.Body or res.body if not body or body == "" then continue end local ok2, data = pcall(function() return HttpService:JSONDecode(body) end) if not ok2 or not data then continue end if type(data.id) ~= "number" then continue end if lastCommandId == nil then lastCommandId = data.id print("Synced command ID:", data.id) continue end if data.id == lastCommandId then continue end lastCommandId = data.id print("Executing command:", data.command) handleMessage(nil, true, data.command) end print("Poller stopped.") end)