Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- =================================================================================================
- -- || SCRIPT: Auto Block System v2 (Otimizado para Mobile/Delta) ||
- -- || DESCRIÇÃO: Versão aprimorada com UI estável (Orion Library) para executores mobile. ||
- -- || - Interface simples, arrastável e minimizável por padrão. ||
- -- || - Coleta automática de blocos com teleporte de ida e volta. ||
- -- || - Equipa o bloco automaticamente após a coleta. ||
- -- || - Lógica aprimorada para encontrar a pilha de blocos sem precisar de nomes. ||
- =================================================================================================
- --]]
- -- Carrega a biblioteca de UI Orion, que é muito estável em executores mobile
- local OrionLib = loadstring(game:HttpGet(('https://raw.githubusercontent.com/shlexware/Orion/main/source')))()
- --=================================================================================================
- -- >> CONFIGURAÇÕES <<
- -- Altere aqui se necessário.
- --=================================================================================================
- local CONFIG = {
- -- Nomes EXATOS das ferramentas de bloco no seu inventário (Backpack).
- -- Adicione mais nomes se houver. É importante que pelo menos um desses nomes corresponda.
- BLOCK_TOOL_NAMES = {
- "Block", "Bloco", "Red Block", "Blue Block", "Green Block", "Yellow Block"
- },
- -- Palavras-chave para ajudar o script a encontrar o gerador de blocos do seu time.
- -- O script já procura por geradores com a cor do seu time.
- PILE_KEYWORDS = {
- "generator", "gerador", "spawn", "pile", "coleta"
- },
- -- Tempo máximo (em segundos) para esperar por um bloco antes de voltar. Evita ficar preso.
- TELEPORT_TIMEOUT = 4,
- }
- --=================================================================================================
- -- >> SERVIÇOS E VARIÁVEIS GLOBAIS <<
- --=================================================================================================
- local RunService = game:GetService("RunService")
- local Players = game:GetService("Players")
- local LocalPlayer = Players.LocalPlayer
- local isTeleporting = false
- local previousCFrame = nil
- local blockPilePosition = nil
- local isSystemEnabled = false
- --=================================================================================================
- -- >> FUNÇÕES DO NÚCLEO (LÓGICA PRINCIPAL) <<
- --=================================================================================================
- -- Conta quantos blocos o jogador possui no inventário ou na mão.
- function getInventoryBlockCount()
- local count = 0
- local backpack = LocalPlayer.Backpack
- local character = LocalPlayer.Character
- for _, tool in ipairs(backpack:GetChildren()) do
- if tool:IsA("Tool") and table.find(CONFIG.BLOCK_TOOL_NAMES, tool.Name) then
- count = count + 1
- end
- end
- if character and character:FindFirstChildOfClass("Tool") and table.find(CONFIG.BLOCK_TOOL_NAMES, character:FindFirstChildOfClass("Tool").Name) then
- count = count + 1
- end
- return count
- end
- -- Encontra a pilha de blocos de forma inteligente (essencial para mobile)
- function findBlockPile()
- local character = LocalPlayer.Character
- local rootPart = character and character:FindFirstChild("HumanoidRootPart")
- local playerTeam = LocalPlayer.Team
- if not rootPart or not playerTeam then
- OrionLib:MakeNotification({Title = "Erro", Content = "Não foi possível encontrar seu time. Entre em uma equipe.", Time = 5})
- return nil
- end
- local playerTeamColor = playerTeam.TeamColor
- local closestPile, minDistance = nil, math.huge
- for _, part in ipairs(workspace:GetDescendants()) do
- if part:IsA("BasePart") and part.Parent and part.Parent:IsA("Model") then
- local nameLower = part.Parent.Name:lower()
- local containsKeyword = false
- for _, keyword in ipairs(CONFIG.PILE_KEYWORDS) do
- if nameLower:find(keyword) then
- containsKeyword = true
- break
- end
- end
- -- Verifica se a parte tem a cor do time e se o nome do modelo contém uma palavra-chave
- if containsKeyword and part.BrickColor == playerTeamColor then
- local distance = (rootPart.Position - part.Position).Magnitude
- if distance < minDistance then
- minDistance = distance
- closestPile = part
- end
- end
- end
- end
- if closestPile then
- OrionLib:MakeNotification({Title = "Sucesso!", Content = "Pilha de blocos do seu time encontrada!", Time = 3})
- return closestPile.Position
- else
- OrionLib:MakeNotification({Title = "Aviso!", Content = "Não foi possível encontrar a pilha de blocos automaticamente.", Time = 7})
- return nil
- end
- end
- --=================================================================================================
- -- >> CRIAÇÃO DA INTERFACE (UI) COM ORION LIBRARY <<
- --=================================================================================================
- -- Cria a janela principal, que já é arrastável e pode ser aberta/fechada.
- local Window = OrionLib:MakeWindow({
- Name = "Auto Block System by AI",
- HidePremium = true,
- SaveConfig = true,
- ConfigFolder = "Orion_Config_ABS",
- IntroEnabled = false -- Desativa a animação de introdução para um visual mais limpo
- })
- -- Cria a aba principal dentro da janela
- local AutoFarmTab = Window:MakeTab({
- Name = "Coleta Automática",
- Icon = "rbxassetid://13724819434", -- Ícone de bloco
- PremiumOnly = false
- })
- -- Adiciona uma seção para organizar os controles
- AutoFarmTab:AddSection({ Name = "Controle Principal" })
- -- Cria o botão de Ligar/Desligar (Toggle)
- AutoFarmTab:AddToggle({
- Name = "Ativar Coleta Automática de Blocos",
- Default = false,
- Callback = function(Value)
- isSystemEnabled = Value
- if isSystemEnabled then
- -- Ao ligar, tenta encontrar a pilha de blocos
- blockPilePosition = findBlockPile()
- if not blockPilePosition then
- isSystemEnabled = false -- Desativa se não encontrar, para evitar erros
- OrionLib:MakeNotification({Title = "Falha!", Content = "Sistema desativado. Pilha de blocos não encontrada.", Time = 5})
- -- A UI do toggle pode precisar ser resetada manualmente aqui, mas geralmente o OrionLib cuida disso.
- else
- OrionLib:MakeNotification({Title = "Sistema Ativado!", Content = "Aguardando inventário ficar vazio...", Time = 3})
- end
- else
- OrionLib:MakeNotification({Title = "Sistema Desativado!", Content = "A coleta automática foi parada.", Time = 3})
- end
- end
- })
- -- Adiciona uma seção para mostrar informações em tempo real
- AutoFarmTab:AddSection({ Name = "Status" })
- -- Label para mostrar o status (Ativado/Desativado)
- local StatusLabel = AutoFarmTab:AddLabel("Status: Desativado")
- -- Label para mostrar a contagem de blocos
- local BlockCountLabel = AutoFarmTab:AddLabel("Blocos no inventário: 0")
- --=================================================================================================
- -- >> LOOP PRINCIPAL E LÓGICA DE TELEPORTE <<
- --=================================================================================================
- RunService.Heartbeat:Connect(function()
- -- Atualiza as informações na UI a cada frame
- local blockCount = getInventoryBlockCount()
- BlockCountLabel:Set("Blocos no inventário: " .. blockCount)
- StatusLabel:Set(isSystemEnabled and "Status: ATIVADO" or "Status: Desativado")
- -- Validações para executar a lógica principal
- if not isSystemEnabled or isTeleporting or blockCount > 0 then
- return
- end
- local character = LocalPlayer.Character
- local rootPart = character and character:FindFirstChild("HumanoidRootPart")
- local humanoid = character and character:FindFirstChildOfClass("Humanoid")
- if not rootPart or not humanoid or humanoid.Health <= 0 then
- return
- end
- -- Confere se a posição da pilha é válida
- if not blockPilePosition then return end
- -- 1. Inicia o processo e "trava" o script para evitar repetições
- isTeleporting = true
- -- 2. Salva a posição e orientação EXATAS antes de teleportar
- previousCFrame = rootPart.CFrame
- -- 3. Teleporta para o centro da pilha de blocos
- -- Adicionamos um pequeno offset no Y para não ficar preso dentro do chão
- rootPart.CFrame = CFrame.new(blockPilePosition + Vector3.new(0, 3.5, 0))
- -- 4. Aguarda a coleta do bloco com um sistema de timeout para não ficar preso
- local blockCollected = false
- local connection
- local timeoutCoroutine = coroutine.create(function()
- task.wait(CONFIG.TELEPORT_TIMEOUT)
- if not blockCollected then
- if connection then connection:Disconnect() end
- OrionLib:MakeNotification({Title = "Timeout!", Content = "Retornando para a posição anterior.", Time = 3})
- if rootPart and previousCFrame then
- rootPart.CFrame = previousCFrame
- end
- isTeleporting = false
- end
- end)
- coroutine.resume(timeoutCoroutine)
- -- Ouve o evento de um item ser adicionado ao inventário
- connection = LocalPlayer.Backpack.ChildAdded:Connect(function(child)
- if child:IsA("Tool") and table.find(CONFIG.BLOCK_TOOL_NAMES, child.Name) then
- blockCollected = true
- if connection then connection:Disconnect() end
- -- 5. Retorna à posição anterior IMEDIATAMENTE
- if rootPart and previousCFrame then
- rootPart.CFrame = previousCFrame
- end
- -- Pequena espera para o jogo processar tudo
- task.wait()
- -- 6. Equipa o bloco recém-adquirido
- if humanoid and LocalPlayer.Backpack:FindFirstChild(child.Name) then
- humanoid:EquipTool(LocalPlayer.Backpack[child.Name])
- end
- -- 7. Libera a "trava" para permitir um novo ciclo quando necessário
- isTeleporting = false
- end
- end)
- end)
- -- Inicializa a biblioteca (necessário para que a janela apareça)
- OrionLib:Init()
Advertisement
Add Comment
Please, Sign In to add comment