-- ========================================================= -- 🎃 T88 HUB v84.1 - HALLOWEEN EDITION (SEM KEY) 🎃 -- Auto Cristal + Abóbora + Beber + Comer + ESP + Attack -- ========================================================= local Players = game:GetService("Players") local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local VirtualInputManager = game:GetService("VirtualInputManager") local VirtualUser = game:GetService("VirtualUser") local LP = Players.LocalPlayer local LINK_DO_DISCORD = "https://discord.gg/9xAJDuR8z" task.spawn(function() while task.wait(300) do pcall(function() VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) end end) LP.Idled:Connect(function() pcall(function() VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) end) local function iniciarHub() local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))() local Config = { espPlayer = false, espVida = true, espDistancia = false, raioEsp = 300, autoAttack = false, raioAttack = 10, intervaloAtaque = 1.0, anguloLimite = 60, autoCristal = false, autoAbobora = false, autoBeber = false, autoComer = false, qualidadeMinima = 0.7, priorizarHotsprings = true, metaComer = 0.7, metaBeber = 0.95, velocidadeVoo = 200, raioRegiao = 900, tempoMaxRegiao = 12, prioridadeComerBeber = 0.6, } local totalAbobora = 0 local totalColetado = 0 local totalBebeu = 0 local totalComeu = 0 local indiceRegiaoAbobora = 1 local indiceRegiaoAtual = 1 local ultimaVarredura = 0 local ocupado = false local quemTaOcupado = nil local tempoLock = 0 local lockToken = 0 local function pegarLock(quem) if ocupado then if tick() - tempoLock > 25 then ocupado = false; quemTaOcupado = nil; lockToken = lockToken + 1 else return false end end ocupado = true; quemTaOcupado = quem; tempoLock = tick(); lockToken = lockToken + 1 print("[T88] 🔒 " .. quem) return lockToken end local function liberarLock(token) if token and token ~= lockToken then return end if quemTaOcupado then print("[T88] 🔓 " .. quemTaOcupado) end ocupado = false; quemTaOcupado = nil; tempoLock = 0 end local function tenhoLock(token) return ocupado and token == lockToken end local function forcarLiberacao() ocupado = false; quemTaOcupado = nil; lockToken = lockToken + 1 end local function getHRP() local char = LP.Character return char and char:FindFirstChild("HumanoidRootPart") end local attackRemote = nil task.spawn(function() local remotes = ReplicatedStorage:WaitForChild("Remotes", 10) if remotes then local combat = remotes:WaitForChild("Combat", 10) if combat then attackRemote = combat:WaitForChild("Attack", 10) end end end) local TryConsume = nil task.spawn(function() pcall(function() local remotes = ReplicatedStorage:WaitForChild("Remotes", 10) if remotes then local controls = remotes:WaitForChild("Controls", 10) if controls then TryConsume = controls:WaitForChild("TryConsume", 10) end end end) end) local function acharBotaoAtaque() for _, g in ipairs({LP.PlayerGui.TouchGui, LP.PlayerGui.Touchscreen}) do if g then for _, obj in ipairs(g:GetDescendants()) do if obj:IsA("ImageButton") then local nome = string.lower(obj.Name) if string.find(nome, "attack") or string.find(nome, "punch") or string.find(nome, "claw") or string.find(nome, "bite") or string.find(nome, "strike") then return obj end end end end end return nil end local botaoAtaque = acharBotaoAtaque() local function acharBarra(nome) local hud = LP.PlayerGui:FindFirstChild("Hud") if not hud then return nil end local bottom = hud:FindFirstChild("BottomContainer") local statsF = bottom and bottom:FindFirstChild("Stats") local content = statsF and statsF:FindFirstChild("StatsContent") local botBox = content and content:FindFirstChild("BotBox") if not botBox then return nil end return botBox:FindFirstChild(nome) end local function lerPorcentagem(barra) if not barra then return nil end local bar = barra:FindFirstChild("Bar") if bar and bar:IsA("Frame") then return bar.Size.X.Scale end for _, filho in ipairs(barra:GetChildren()) do if filho:IsA("Frame") then return filho.Size.X.Scale end end return nil end local function urgenciaComerBeber() if Config.autoBeber then local sede = lerPorcentagem(acharBarra("Water")) if sede and sede < Config.prioridadeComerBeber then return "sede" end end if Config.autoComer then local fome = lerPorcentagem(acharBarra("Food")) if fome and fome < Config.prioridadeComerBeber then return "fome" end end return nil end local function getPos(obj) if obj:IsA("BasePart") then return obj.Position end if obj:IsA("Model") then local ok, p = pcall(function() return obj:GetPivot().Position end) if ok then return p end end local p = obj:FindFirstChildWhichIsA("BasePart", true) if p then return p.Position end return nil end -- 🛠️ Desencalha o dino (SÓ IMPULSO FÍSICO, zero teleporte) local function desencalhar(posAlvo, bv) local h = getHRP() if not h then return end if bv then bv.Velocity = Vector3.new(0, 500, 0) task.wait(0.6) end local h2 = getHRP() if h2 and h2.Position.Y < posAlvo.Y - 5 then if bv then local dirXZ = Vector3.new( posAlvo.X - h2.Position.X, 0, posAlvo.Z - h2.Position.Z ) if dirXZ.Magnitude > 0.1 then dirXZ = dirXZ.Unit bv.Velocity = dirXZ * 50 + Vector3.new(0, 600, 0) else bv.Velocity = Vector3.new(0, 600, 0) end task.wait(0.5) end end end local function voarAtePerto(posAlvo, token) local DISTANCIA = 3 local MAX_TENTATIVAS = 5 local TEMPO_POR_TENTATIVA = 15 for tentativa = 1, MAX_TENTATIVAS do if token and not tenhoLock(token) then return false end local hrp = getHRP() if not hrp then return false end if (hrp.Position - posAlvo).Magnitude <= DISTANCIA then return true end local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Parent = hrp local inicio = tick() local ultimaPos = hrp.Position local tempoParado = 0 while tick() - inicio < TEMPO_POR_TENTATIVA do local h = getHRP() if not h then break end if token and not tenhoLock(token) then bv:Destroy(); return false end local dist = (h.Position - posAlvo).Magnitude if dist <= DISTANCIA then bv:Destroy() pcall(function() h.AssemblyLinearVelocity = Vector3.zero h.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.3) return true end local moveu = (h.Position - ultimaPos).Magnitude if moveu < 0.5 then tempoParado = tempoParado + 0.03 else tempoParado = 0 end ultimaPos = h.Position if tempoParado > 2 then tempoParado = 0 desencalhar(posAlvo, bv) task.wait(0.5) end local dir = (posAlvo - h.Position).Unit if dist < 50 then bv.Velocity = dir * 15 else bv.Velocity = dir * Config.velocidadeVoo end task.wait(0.03) end bv:Destroy() pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.5) end return false end local function voarSemLock(posAlvo) local hrp = getHRP() if not hrp then return end local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Parent = hrp local inicio = tick() local ultimaPos = hrp.Position local tempoParado = 0 while tick() - inicio < 15 do local h = getHRP() if not h then break end local dist = (h.Position - posAlvo).Magnitude if dist <= 10 then break end local moveu = (h.Position - ultimaPos).Magnitude if moveu < 0.5 then tempoParado = tempoParado + 0.03 else tempoParado = 0 end ultimaPos = h.Position if tempoParado > 2 then tempoParado = 0 desencalhar(posAlvo, bv) task.wait(0.5) end local dir = (posAlvo - h.Position).Unit if dist < 50 then bv.Velocity = dir * 20 else bv.Velocity = dir * Config.velocidadeVoo end task.wait(0.03) end bv:Destroy() pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) end local function voarAteComida(posComida, token) local OFFSET_Y = 6 local RAIO_ACEITO = 6 for tentativa = 1, 5 do if token and not tenhoLock(token) then return false end local hrp = getHRP() if not hrp then return false end if (hrp.Position - posComida).Magnitude <= RAIO_ACEITO then return true end local alvoVoo = posComida + Vector3.new(0, OFFSET_Y, 0) local bv = Instance.new("BodyVelocity") bv.MaxForce = Vector3.new(math.huge, math.huge, math.huge) bv.Parent = hrp local inicio = tick() local ultimaPos = hrp.Position local tempoParado = 0 while tick() - inicio < 10 do local h = getHRP() if not h then break end if token and not tenhoLock(token) then bv:Destroy(); return false end local distAtual = (h.Position - posComida).Magnitude if distAtual <= RAIO_ACEITO then bv:Destroy() pcall(function() h.AssemblyLinearVelocity = Vector3.zero h.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.3) return true end local moveu = (h.Position - ultimaPos).Magnitude if moveu < 0.5 then tempoParado = tempoParado + 0.03 else tempoParado = 0 end ultimaPos = h.Position if tempoParado > 2 then tempoParado = 0 desencalhar(posComida, bv) task.wait(0.4) end if h.Position.Y < posComida.Y - 2 then local dirXZ = Vector3.new(posComida.X - h.Position.X, 0, posComida.Z - h.Position.Z) if dirXZ.Magnitude > 0.1 then dirXZ = dirXZ.Unit bv.Velocity = dirXZ * 40 + Vector3.new(0, 80, 0) else bv.Velocity = Vector3.new(0, 80, 0) end else local dir = (alvoVoo - h.Position).Unit if distAtual < 15 then bv.Velocity = dir * 12 else bv.Velocity = dir * Config.velocidadeVoo end end task.wait(0.03) end bv:Destroy() pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.3) end return false end -- AUTO ATTACK local ultimaMordida = 0 local alvoAtual = nil local function acharAlvo() local hrp = getHRP() if not hrp then return nil end local melhorAlvo, menorDist = nil, Config.raioAttack for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LP and plr.Character then local hum = plr.Character:FindFirstChildOfClass("Humanoid") local aHrp = plr.Character:FindFirstChild("HumanoidRootPart") if hum and hum.Health > 0 and aHrp then local d = (aHrp.Position - hrp.Position).Magnitude if d < menorDist then menorDist = d; melhorAlvo = plr end end end end return melhorAlvo end local function calcularAngulo(posAlvo) local hrp = getHRP() if not hrp then return 180 end local direcaoAtual = hrp.CFrame.LookVector local direcaoAlvo = (posAlvo - hrp.Position) if direcaoAlvo.Magnitude < 0.1 then return 0 end direcaoAlvo = direcaoAlvo.Unit local dot = direcaoAtual:Dot(direcaoAlvo) dot = math.clamp(dot, -1, 1) return math.deg(math.acos(dot)) end local virando = false local function virarRapido(posAlvo) if virando then return end virando = true task.spawn(function() local char = LP.Character if not char then virando = false; return end local hrp = char:FindFirstChild("HumanoidRootPart") local humanoid = char:FindFirstChildOfClass("Humanoid") if not hrp or not humanoid then virando = false; return end pcall(function() humanoid.AutoRotate = false end) local alvoVec = Vector3.new(posAlvo.X, hrp.Position.Y, posAlvo.Z) if (alvoVec - hrp.Position).Magnitude < 0.5 then pcall(function() humanoid.AutoRotate = true end) virando = false return end local cframeAlvo = CFrame.new(hrp.Position, alvoVec) local cframeOriginal = hrp.CFrame for i = 1, 4 do pcall(function() hrp.CFrame = cframeOriginal:Lerp(cframeAlvo, i / 4) end) task.wait(0.02) end pcall(function() humanoid.AutoRotate = true end) virando = false end) end local function morder() if attackRemote then pcall(function() attackRemote:FireServer() end) pcall(function() attackRemote:FireServer() end) end if botaoAtaque then pcall(function() local pos = botaoAtaque.AbsolutePosition + botaoAtaque.AbsoluteSize / 2 VirtualInputManager:SendMouseButtonEvent(pos.X, pos.Y, 0, true, game, 0) task.wait(0.03) VirtualInputManager:SendMouseButtonEvent(pos.X, pos.Y, 0, false, game, 0) end) end pcall(function() local char = LP.Character if char then local tool = char:FindFirstChildOfClass("Tool") if tool then tool:Activate() end end end) end -- BOTÃO FLUTUANTE 🎃 local gui = Instance.new("ScreenGui") gui.Name = "T88StrikeBtn" gui.ResetOnSpawn = false; gui.IgnoreGuiInset = true gui.DisplayOrder = 100; gui.Parent = LP:WaitForChild("PlayerGui") local btnStrike = Instance.new("TextButton") btnStrike.Name = "BtnStrike" btnStrike.Size = UDim2.new(0, 65, 0, 65) btnStrike.Position = UDim2.new(1, -85, 0, 300) btnStrike.BackgroundColor3 = Color3.fromRGB(30, 15, 40) btnStrike.Text = "🎃" btnStrike.TextColor3 = Color3.fromRGB(255, 140, 0) btnStrike.Font = Enum.Font.GothamBold btnStrike.TextSize = 25 btnStrike.BorderSizePixel = 0 btnStrike.AutoButtonColor = false btnStrike.Active = true btnStrike.ZIndex = 10 btnStrike.Parent = gui local btnCorner = Instance.new("UICorner") btnCorner.CornerRadius = UDim.new(1, 0); btnCorner.Parent = btnStrike local btnStroke = Instance.new("UIStroke") btnStroke.Color = Color3.fromRGB(255, 140, 0) btnStroke.Thickness = 2; btnStroke.Parent = btnStrike local arrastando, inicio, posInicial, moveu = false, Vector2.new(), UDim2.new(), false btnStrike.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then arrastando = true; moveu = false inicio = Vector2.new(input.Position.X, input.Position.Y) posInicial = btnStrike.Position end end) btnStrike.InputChanged:Connect(function(input) if not arrastando then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local dx = input.Position.X - inicio.X local dy = input.Position.Y - inicio.Y if math.abs(dx) > 3 or math.abs(dy) > 3 then moveu = true end btnStrike.Position = UDim2.new(posInicial.X.Scale, posInicial.X.Offset + dx, posInicial.Y.Scale, posInicial.Y.Offset + dy) end end) btnStrike.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then arrastando = false btnStrike:SetAttribute("UltimoCliqueFoiArrasto", moveu) end end) btnStrike.MouseButton1Click:Connect(function() if btnStrike:GetAttribute("UltimoCliqueFoiArrasto") then btnStrike:SetAttribute("UltimoCliqueFoiArrasto", false); return end Config.autoAttack = not Config.autoAttack if Config.autoAttack then btnStrike.TextColor3 = Color3.fromRGB(255, 255, 0) btnStroke.Color = Color3.fromRGB(255, 255, 0) btnStrike.Text = "✅" else btnStrike.TextColor3 = Color3.fromRGB(255, 140, 0) btnStroke.Color = Color3.fromRGB(255, 140, 0) btnStrike.Text = "🎃" end end) task.spawn(function() while task.wait(0.1) do if Config.autoAttack then local alvo = acharAlvo() if alvo and alvo.Character then local aHrp = alvo.Character:FindFirstChild("HumanoidRootPart") if aHrp then local angulo = calcularAngulo(aHrp.Position) if angulo > Config.anguloLimite then virarRapido(aHrp.Position) end local agora = tick() if agora - ultimaMordida >= Config.intervaloAtaque then ultimaMordida = agora morder() end end end end end end) -- ESP local espObjects = {} local function atualizarVida(dados, hum) if not dados.vidaFill or not hum then return end local hpPct = math.clamp(hum.Health / hum.MaxHealth, 0, 1) dados.vidaFill.Size = UDim2.new(hpPct, 0, 1, 0) if hpPct > 0.6 then dados.vidaFill.BackgroundColor3 = Color3.fromRGB(0, 255, 0) elseif hpPct > 0.3 then dados.vidaFill.BackgroundColor3 = Color3.fromRGB(255, 200, 0) else dados.vidaFill.BackgroundColor3 = Color3.fromRGB(255, 0, 0) end if dados.nomeLabel then dados.nomeLabel.Text = hum.Parent.Name .. " [" .. math.floor(hum.Health) .. "/" .. math.floor(hum.MaxHealth) .. "]" end end local function criarESP(plr) if plr == LP or not plr.Character then return end local hrp = plr.Character:FindFirstChild("HumanoidRootPart") if not hrp then return end if espObjects[plr] and espObjects[plr].box and espObjects[plr].box.Parent == hrp then return end if espObjects[plr] then if espObjects[plr].box then pcall(function() espObjects[plr].box:Destroy() end) end if espObjects[plr].billboard then pcall(function() espObjects[plr].billboard:Destroy() end) end end local box = Instance.new("BoxHandleAdornment") box.Name = "T88_ESP_Box"; box.Size = Vector3.new(4, 6, 4) box.AlwaysOnTop = true; box.ZIndex = 5; box.Transparency = 0.4 box.Color3 = Color3.fromRGB(255, 80, 0); box.Adornee = hrp; box.Parent = hrp; box.Visible = false local billboard = Instance.new("BillboardGui") billboard.Name = "T88_ESP_Billboard"; billboard.Size = UDim2.new(0, 120, 0, 50) billboard.StudsOffset = Vector3.new(0, 4, 0); billboard.AlwaysOnTop = true billboard.Adornee = hrp; billboard.Parent = hrp; billboard.Enabled = false local nomeLabel = Instance.new("TextLabel") nomeLabel.Name = "Nome"; nomeLabel.Size = UDim2.new(1, 0, 0, 16); nomeLabel.BackgroundTransparency = 1 nomeLabel.Text = plr.Name; nomeLabel.TextColor3 = Color3.fromRGB(255, 180, 0) nomeLabel.TextStrokeTransparency = 0; nomeLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) nomeLabel.Font = Enum.Font.GothamBold; nomeLabel.TextSize = 12; nomeLabel.Parent = billboard local vidaBg = Instance.new("Frame") vidaBg.Name = "VidaBg"; vidaBg.Size = UDim2.new(0, 80, 0, 6) vidaBg.Position = UDim2.new(0.5, -40, 0, 18); vidaBg.BackgroundColor3 = Color3.fromRGB(50, 50, 50) vidaBg.BorderSizePixel = 0; vidaBg.Parent = billboard local vbc = Instance.new("UICorner"); vbc.CornerRadius = UDim.new(0, 3); vbc.Parent = vidaBg local vidaFill = Instance.new("Frame") vidaFill.Name = "VidaFill"; vidaFill.Size = UDim2.new(1, 0, 1, 0) vidaFill.BackgroundColor3 = Color3.fromRGB(0, 255, 0); vidaFill.BorderSizePixel = 0; vidaFill.Parent = vidaBg local vfc = Instance.new("UICorner"); vfc.CornerRadius = UDim.new(0, 3); vfc.Parent = vidaFill local distLabel = Instance.new("TextLabel") distLabel.Name = "Dist"; distLabel.Size = UDim2.new(1, 0, 0, 14) distLabel.Position = UDim2.new(0, 0, 0, 26); distLabel.BackgroundTransparency = 1 distLabel.Text = "0m"; distLabel.TextColor3 = Color3.fromRGB(255, 200, 100) distLabel.TextStrokeTransparency = 0; distLabel.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) distLabel.Font = Enum.Font.Gotham; distLabel.TextSize = 11; distLabel.Parent = billboard espObjects[plr] = {box = box, billboard = billboard, vidaFill = vidaFill, vidaBg = vidaBg, distLabel = distLabel, nomeLabel = nomeLabel} local hum = plr.Character:FindFirstChildOfClass("Humanoid") if hum then hum.HealthChanged:Connect(function() atualizarVida(espObjects[plr], hum) end) end end local function removerESP(plr) if espObjects[plr] then if espObjects[plr].box then pcall(function() espObjects[plr].box:Destroy() end) end if espObjects[plr].billboard then pcall(function() espObjects[plr].billboard:Destroy() end) end espObjects[plr] = nil end end Players.PlayerRemoving:Connect(removerESP) task.spawn(function() while task.wait(0.1) do local hrp = getHRP() if hrp then for _, plr in ipairs(Players:GetPlayers()) do if plr ~= LP and plr.Character then local precisaCriar = false if not espObjects[plr] then precisaCriar = true elseif not espObjects[plr].box or not espObjects[plr].box.Parent then precisaCriar = true end if precisaCriar then criarESP(plr) end if espObjects[plr] then local dados = espObjects[plr] local aHrp = plr.Character:FindFirstChild("HumanoidRootPart") local aHum = plr.Character:FindFirstChildOfClass("Humanoid") if aHrp and aHum and dados.box and dados.box.Parent then local dist = (aHrp.Position - hrp.Position).Magnitude local dentro = dist <= Config.raioEsp dados.box.Visible = Config.espPlayer and dentro if dados.billboard and dados.billboard.Parent then dados.billboard.Enabled = dentro and (Config.espVida or Config.espDistancia) if dados.vidaBg then dados.vidaBg.Visible = Config.espVida end if dados.distLabel then dados.distLabel.Visible = Config.espDistancia if Config.espDistancia then dados.distLabel.Text = math.floor(dist) .. "m" end end if Config.espVida then atualizarVida(dados, aHum) end end end end end end end end end) -- NOCLIP local noclipAtivo = false RunService.Stepped:Connect(function() if noclipAtivo then local char = LP.Character if char then for _, part in ipairs(char:GetDescendants()) do if part:IsA("BasePart") then part.CanCollide = false end end end end end) local function ativarNoclip() noclipAtivo = true end local function resetPersonagem() local char = LP.Character if not char then return end local hrp = char:FindFirstChild("HumanoidRootPart") local humanoid = char:FindFirstChildOfClass("Humanoid") if not hrp or not humanoid then return end for _, obj in ipairs(char:GetDescendants()) do if obj:IsA("BodyVelocity") or obj:IsA("BodyGyro") or obj:IsA("BodyPosition") or obj:IsA("BodyForce") or obj:IsA("LinearVelocity") or obj:IsA("AngularVelocity") then pcall(function() obj:Destroy() end) end end pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) pcall(function() humanoid.PlatformStand = false; humanoid.Sit = false humanoid.WalkSpeed = 16; humanoid.JumpPower = 50 humanoid.AutoRotate = true end) pcall(function() hrp.CFrame = hrp.CFrame + Vector3.new(0, 30, 0) end) task.wait(0.2) pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.GettingUp) end) task.wait(0.1) pcall(function() humanoid:ChangeState(Enum.HumanoidStateType.Running) end) noclipAtivo = true end LP.CharacterAdded:Connect(function() task.wait(1) if noclipAtivo then noclipAtivo = true end end) -- 🎃 AUTO ABÓBORA local REGIOES_ABOBORA = { Vector3.new(-3360, -45, 829), Vector3.new(-2337, -56, 1458), Vector3.new(-1974, -21, 588), Vector3.new(-1370, 112, 716), Vector3.new(-733, 155, 948), Vector3.new(-17, -1, 831), Vector3.new(313, -13, 50), Vector3.new(86, 116, -363), Vector3.new(219, 86, -997), Vector3.new(-363, -21, -1010), Vector3.new(-466, 18, -130), Vector3.new(-1011, 8, -1611), Vector3.new(-1090, 26, -2244), Vector3.new(-518, 47, -2178), Vector3.new(-990, 27, -2263), Vector3.new(-1458, 91, -2088), Vector3.new(-2040, -24, -1467), Vector3.new(-3182, -45, -94), Vector3.new(-2825, -49, -441), Vector3.new(-2686, 31, -770), Vector3.new(-2608, 26, -1179), Vector3.new(-372, -7, 1710), } local function getPastaPumpkins() local env = Workspace:FindFirstChild("Environment") if not env then return nil end local gath = env:FindFirstChild("Gatherable") if not gath then return nil end return gath:FindFirstChild("Pumpkins") end local function acharPromptAbobora(obj) local p = obj:FindFirstChildOfClass("ProximityPrompt") if p then return p end return obj:FindFirstChildWhichIsA("ProximityPrompt", true) end local function ehAbobora(obj) if not obj.Name:find("Pumpkin") then return false end local prompt = acharPromptAbobora(obj) if not prompt then return false end if not string.find(string.lower(prompt.ObjectText or ""), "pumpkin") then return false end return true end local function coletarAbobora(objAlvo) local prompt = acharPromptAbobora(objAlvo) if not prompt or not prompt.Enabled then return false end if fireproximityprompt then pcall(function() fireproximityprompt(prompt) end) else pcall(function() prompt:InputHoldBegin() task.wait((prompt.HoldDuration or 0) + 0.15) prompt:InputHoldEnd() end) end task.wait(0.3) return not prompt.Enabled end task.spawn(function() task.wait(3) while true do if Config.autoAbobora then local urg = urgenciaComerBeber() if urg then if ocupado then forcarLiberacao() end task.wait(2) else local pasta = getPastaPumpkins() if pasta then local hrp = getHRP() local alvo = nil local menorDist = math.huge for _, obj in ipairs(pasta:GetChildren()) do if ehAbobora(obj) then local prompt = acharPromptAbobora(obj) local pos = getPos(obj) if prompt and prompt.Enabled and pos then local d = (hrp.Position - pos).Magnitude if d < menorDist then menorDist = d; alvo = obj end end end end if alvo then local token = pegarLock("🎃 ABÓBORA") if token then pcall(function() local posAlvo = getPos(alvo) print("[T88] 🎃 Abóbora! Dist: " .. math.floor(menorDist)) voarAtePerto(posAlvo, token) if not tenhoLock(token) then return end coletarAbobora(alvo) totalAbobora = totalAbobora + 1 print("[T88] 🎃 Coletado! Total: " .. totalAbobora) end) liberarLock(token) end else if tick() - ultimaVarredura > 1.5 then ultimaVarredura = tick() local regiao = REGIOES_ABOBORA[indiceRegiaoAbobora] if regiao then print("[T88] 🗺️ Sem abóboras. Varrendo região " .. indiceRegiaoAbobora .. "/" .. #REGIOES_ABOBORA) voarSemLock(regiao) task.wait(2) indiceRegiaoAbobora = indiceRegiaoAbobora + 1 if indiceRegiaoAbobora > #REGIOES_ABOBORA then indiceRegiaoAbobora = 1 end end end end else task.wait(5) end end task.wait(0.5) else task.wait(1) end end end) -- 💎 AUTO CRISTAL local REGIOES = REGIOES_ABOBORA local function acharPromptCristal(obj) local body = obj:FindFirstChild("Body") if body then local p = body:FindFirstChildOfClass("ProximityPrompt") if p then return p end end return obj:FindFirstChildWhichIsA("ProximityPrompt", true) end local function ehExpCrystal(obj) if not obj.Name:find("Crystal") then return false end local prompt = acharPromptCristal(obj) if not prompt then return false end if not string.find(string.lower(prompt.ObjectText or ""), "exp crystal") then return false end return true end local function coletarCristal(objAlvo) local prompt = acharPromptCristal(objAlvo) if not prompt or not prompt.Enabled then return false end if fireproximityprompt then pcall(function() fireproximityprompt(prompt) end) else pcall(function() prompt:InputHoldBegin() task.wait((prompt.HoldDuration or 0) + 0.15) prompt:InputHoldEnd() end) end task.wait(0.3) return not prompt.Enabled end local function getPastaCrystals() local env = Workspace:FindFirstChild("Environment") if not env then return nil end local gath = env:FindFirstChild("Gatherable") if not gath then return nil end return gath:FindFirstChild("Crystals") end local function coletarRegiao(centro, raio, token) local coletados = 0 local pasta = getPastaCrystals() if not pasta then return 0 end local inicio = tick() while tick() - inicio < Config.tempoMaxRegiao do if not tenhoLock(token) then break end local achouAlgum = false for _, obj in ipairs(pasta:GetChildren()) do if not tenhoLock(token) then break end if ehExpCrystal(obj) then local prompt = acharPromptCristal(obj) local pos = getPos(obj) if prompt and prompt.Enabled and pos then local d = (pos - centro).Magnitude if d <= raio then achouAlgum = true voarAtePerto(pos, token) if not tenhoLock(token) then break end coletarCristal(obj) coletados = coletados + 1 totalColetado = totalColetado + 1 print("[T88] 💎 Cristal! Total: " .. totalColetado) task.wait(0.2) end end end end if not achouAlgum then task.wait(1) local achouDeNovo = false for _, obj in ipairs(pasta:GetChildren()) do if ehExpCrystal(obj) then local prompt = acharPromptCristal(obj) local pos = getPos(obj) if prompt and prompt.Enabled and pos then if (pos - centro).Magnitude <= raio then achouDeNovo = true; break end end end end if not achouDeNovo then break end end end return coletados end task.spawn(function() task.wait(3) while true do if Config.autoCristal then local regiao = REGIOES[indiceRegiaoAtual] if regiao then local token = pegarLock("💎 CRISTAL") if token then pcall(function() local hrp = getHRP() if not hrp then return end print("[T88] 📍 Região " .. indiceRegiaoAtual .. "/" .. #REGIOES) voarAtePerto(regiao, token) if not tenhoLock(token) then return end coletarRegiao(regiao, Config.raioRegiao, token) end) liberarLock(token) indiceRegiaoAtual = indiceRegiaoAtual + 1 if indiceRegiaoAtual > #REGIOES then print("[T88] 🔄 Rota completa!") indiceRegiaoAtual = 1 end else task.wait(1) end else indiceRegiaoAtual = 1 end task.wait(1) else task.wait(1) end end end) -- 💧 AUTO BEBER local function acharCorposAgua() local lista = {} local hotsprings = {} local outras = {} local env = Workspace:FindFirstChild("Environment") if not env then return lista end local water = env:FindFirstChild("Water") if not water then return lista end local bodies = water:FindFirstChild("Bodies") if not bodies then return lista end for _, obj in ipairs(bodies:GetChildren()) do local pos = nil if obj:IsA("BasePart") then pos = obj.Position else local p = obj:FindFirstChildWhichIsA("BasePart", true) if p then pos = p.Position end end if pos then local dados = {model = obj, pos = pos, nome = obj.Name} local nomeLower = string.lower(obj.Name) if string.find(nomeLower, "hotspring") or string.find(nomeLower, "hot_spring") or string.find(nomeLower, "thermal") then table.insert(hotsprings, dados) else table.insert(outras, dados) end end end if Config.priorizarHotsprings then for _, h in ipairs(hotsprings) do table.insert(lista, h) end end for _, o in ipairs(outras) do table.insert(lista, o) end return lista end local function lerQualidadeAgua() for _, obj in ipairs(Workspace:GetDescendants()) do if obj:IsA("ProximityPrompt") and obj.Name == "DrinkPrompt" then local actionText = obj.ActionText or "" local num = tonumber(string.match(actionText, "(%d+)")) if num then return num / 100 end end end return nil end local function ehHotspring(model) if not model then return false end local nomeLower = string.lower(model.Name) return string.find(nomeLower, "hotspring") or string.find(nomeLower, "hot_spring") or string.find(nomeLower, "thermal") end task.spawn(function() while task.wait(1) do if Config.autoBeber and not ocupado and TryConsume then local barraSede = acharBarra("Water") if barraSede then local pct = lerPorcentagem(barraSede) local fomePct = 1 if Config.autoComer then local bf = acharBarra("Food") if bf then local fp = lerPorcentagem(bf) if fp then fomePct = fp end end end if pct and pct < Config.prioridadeComerBeber and pct <= fomePct then local token = pegarLock("💧 BEBER") if token then pcall(function() print("[T88] 💧 Sede em " .. math.floor(pct * 100) .. "% (fome: " .. math.floor(fomePct * 100) .. "%)") local tentativas = 0 while tentativas < 25 do if not tenhoLock(token) then break end tentativas = tentativas + 1 local sedeAtual = lerPorcentagem(acharBarra("Water")) local pctAtual = sedeAtual and math.floor(sedeAtual * 100) or 0 if sedeAtual and sedeAtual >= Config.metaBeber then print("[T88] 💧 Sede CHEIA (" .. pctAtual .. "%)!") break end local corpos = acharCorposAgua() if #corpos == 0 then task.wait(2) else local hrp = getHRP() local escolhido, menorDist = nil, math.huge for _, c in ipairs(corpos) do local d = (c.pos - hrp.Position).Magnitude if ehHotspring(c.model) then d = d * 0.1 end if d < menorDist then menorDist = d escolhido = c end end if escolhido then local ehHot = ehHotspring(escolhido.model) local distReal = (escolhido.pos - hrp.Position).Magnitude if distReal > 3 then voarAtePerto(escolhido.pos, token) end if not tenhoLock(token) then break end if ehHot then print("[T88] 💧 Hotsprings! Bebendo direto.") pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.5) pcall(function() TryConsume:InvokeServer(escolhido.model, "drink") end) totalBebeu = totalBebeu + 1 print("[T88] 💧 Gole HOTSPRING " .. tentativas .. " | Sede: " .. pctAtual .. "%") else local qualidade = lerQualidadeAgua() if qualidade and qualidade < Config.qualidadeMinima then print("[T88] 💧 Bactéria! Pulando (qualidade: " .. math.floor(qualidade * 100) .. "%)") else pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.5) pcall(function() TryConsume:InvokeServer(escolhido.model, "drink") end) totalBebeu = totalBebeu + 1 print("[T88] 💧 Gole normal " .. tentativas .. " | Sede: " .. pctAtual .. "%") end end end end task.wait(1.5) end end) liberarLock(token) end end end end end end) -- 🍖 AUTO COMER local DinoSpecies = nil task.spawn(function() pcall(function() local modules = ReplicatedStorage:WaitForChild("Modules", 10) if modules then local referential = modules:WaitForChild("Referential", 10) if referential then local ds = referential:WaitForChild("DinoSpecies", 10) if ds then DinoSpecies = require(ds) end end end end) end) local function detectarComida() local char = LP.Character if not char or not DinoSpecies then return {} end local speciesID = char:FindFirstChild("speciesID") if not speciesID then return {} end local id = speciesID.Value local food = Workspace:FindFirstChild("Environment") if food then food = food:FindFirstChild("Interactive") end if food then food = food:FindFirstChild("Food") end if not food then return {} end local pastasValidas = {} for _, pasta in ipairs(food:GetChildren()) do local ok, res = pcall(function() return DinoSpecies.canEat(id, pasta.Name) end) if ok and res == true then table.insert(pastasValidas, pasta.Name) end end return pastasValidas end local function acharComidaValida(pastasValidas) local hrp = getHRP() if not hrp then return nil end local food = Workspace:FindFirstChild("Environment") if food then food = food:FindFirstChild("Interactive") end if food then food = food:FindFirstChild("Food") end if not food then return nil end local maisPerto, menorDist = nil, math.huge for _, nomePasta in ipairs(pastasValidas) do local pasta = food:FindFirstChild(nomePasta) if pasta then for _, obj in ipairs(pasta:GetDescendants()) do if obj.Name == "FoodRange" and obj:IsA("BasePart") then local d = (obj.Position - hrp.Position).Magnitude if d < menorDist then menorDist = d local modelAlvo = obj.Parent maisPerto = {model = modelAlvo, pos = obj.Position, pasta = nomePasta, nome = modelAlvo.Name} end end end end end return maisPerto end task.spawn(function() task.wait(3) while task.wait(0.5) do if Config.autoComer and not ocupado and DinoSpecies and TryConsume then local barraFome = acharBarra("Food") if barraFome then local pct = lerPorcentagem(barraFome) local sedePct = 1 if Config.autoBeber then local bs = acharBarra("Water") if bs then local sp = lerPorcentagem(bs) if sp then sedePct = sp end end end if pct and pct < Config.prioridadeComerBeber and pct < sedePct then local token = pegarLock("🍖 COMER") if token then pcall(function() print("[T88] 🍖 Fome em " .. math.floor(pct * 100) .. "% (sede: " .. math.floor(sedePct * 100) .. "%)") local tentativas = 0 while tentativas < 25 do if not tenhoLock(token) then break end tentativas = tentativas + 1 local fomeAtual = lerPorcentagem(acharBarra("Food")) local pctAtual = fomeAtual and math.floor(fomeAtual * 100) or 0 if fomeAtual and fomeAtual >= Config.metaComer then print("[T88] 🍖 Fome OK (" .. pctAtual .. "%)!") break end local pastas = detectarComida() local comidaAtual = acharComidaValida(pastas) if not comidaAtual then print("[T88] 🍖 Sem comida.") break end local hrp = getHRP() voarAteComida(comidaAtual.pos, token) if not tenhoLock(token) then break end pcall(function() hrp.AssemblyLinearVelocity = Vector3.zero hrp.AssemblyAngularVelocity = Vector3.zero end) task.wait(0.8) local ok = pcall(function() return TryConsume:InvokeServer(comidaAtual.model, "eat") end) if ok then totalComeu = totalComeu + 1 print("[T88] 🍖 Mordida " .. tentativas .. " | Fome: " .. pctAtual .. "%") else break end task.wait(1.5) end end) liberarLock(token) end end end end end end) -- JANELA local Window = WindUI:CreateWindow({ Title = "🎃 T88 Hub - HALLOWEEN", Author = "T88", Folder = "T88Hub", Icon = "ghost", Theme = "Dark", Size = UDim2.fromOffset(580, 620), Transparent = true, HideSearchBar = true, Background = "rbxassetid://4082279125", BackgroundImageTransparency = 0.65, }) local CombateTab = Window:Tab({ Title = "Combate", Icon = "crosshair" }) CombateTab:Section({ Title = "👁️ ESP" }) CombateTab:Toggle({ Title = "ESP Players", Value = false, Callback = function(s) Config.espPlayer = s end }) CombateTab:Input({ Title = "Raio do ESP", Value = "300", Callback = function(texto) local num = tonumber(texto) if num then Config.raioEsp = math.clamp(math.floor(num), 1, 500) end end }) CombateTab:Toggle({ Title = "ESP Vida", Value = true, Callback = function(s) Config.espVida = s end }) CombateTab:Toggle({ Title = "ESP Distância", Value = false, Callback = function(s) Config.espDistancia = s end }) CombateTab:Section({ Title = "⚔️ Auto Attack" }) CombateTab:Slider({ Title = "Raio de Ataque", Value = { Min = 10, Max = 25, Default = 10 }, Callback = function(v) Config.raioAttack = v end }) CombateTab:Slider({ Title = "⏱️ Pausa entre Ataques (s)", Value = { Min = 3, Max = 30, Default = 10 }, Callback = function(v) Config.intervaloAtaque = v / 10 end }) CombateTab:Slider({ Title = "🎯 Ângulo pra Virar (°)", Value = { Min = 30, Max = 120, Default = 60 }, Callback = function(v) Config.anguloLimite = v end }) local FarmTab = Window:Tab({ Title = "Farm 🎃", Icon = "zap" }) FarmTab:Section({ Title = "🎃 Auto Farm Abóbora (Evento)" }) FarmTab:Toggle({ Title = "🎃 Auto Coletar Abóbora", Value = false, Callback = function(s) Config.autoAbobora = s if s then ativarNoclip() print("[T88] 🎃 Auto Abóbora LIGADO!") game:GetService("StarterGui"):SetCore("SendNotification", { Title = "🎃 T88 Hub", Text = "Auto Abóbora ativado!", Duration = 3 }) else print("[T88] 🎃 Auto Abóbora DESLIGADO.") end end }) FarmTab:Section({ Title = "💎 Auto Cristal" }) FarmTab:Toggle({ Title = "Auto Coletar Exp Crystal", Value = false, Callback = function(s) Config.autoCristal = s if s then ativarNoclip() end end }) FarmTab:Slider({ Title = "💎 Raio por Região", Value = { Min = 300, Max = 1200, Default = 900 }, Callback = function(v) Config.raioRegiao = v end }) FarmTab:Slider({ Title = "💎 Tempo máx por Região (s)", Value = { Min = 5, Max = 30, Default = 12 }, Callback = function(v) Config.tempoMaxRegiao = v end }) FarmTab:Section({ Title = "🍖💧 Auto Comer e Beber" }) FarmTab:Toggle({ Title = "Auto Comer (fome baixa)", Value = false, Callback = function(s) Config.autoComer = s if s then ativarNoclip() end end }) FarmTab:Toggle({ Title = "Auto Beber (sede baixa)", Value = false, Callback = function(s) Config.autoBeber = s if s then ativarNoclip() end end }) FarmTab:Toggle({ Title = "♨️ Priorizar Hotsprings (água termal)", Value = true, Callback = function(s) Config.priorizarHotsprings = s end }) FarmTab:Slider({ Title = "🚨 Urgência Comer/Beber (%)", Value = { Min = 30, Max = 80, Default = 60 }, Callback = function(v) Config.prioridadeComerBeber = v / 100 end }) FarmTab:Slider({ Title = "🍖 Meta de Comer (%)", Value = { Min = 50, Max = 90, Default = 70 }, Callback = function(v) Config.metaComer = v / 100 end }) FarmTab:Slider({ Title = "💧 Meta de Beber (%)", Value = { Min = 70, Max = 100, Default = 95 }, Callback = function(v) Config.metaBeber = v / 100 end }) FarmTab:Section({ Title = "⚙️ Geral" }) FarmTab:Slider({ Title = "⚡ Velocidade do Voo", Value = { Min = 50, Max = 250, Default = 200 }, Callback = function(v) Config.velocidadeVoo = v end }) FarmTab:Button({ Title = "📊 Estatísticas", Callback = function() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "🎃 T88 Stats", Text = "🎃 " .. totalAbobora .. " | 💎 " .. totalColetado .. " | 💧 " .. totalBebeu .. " | 🍖 " .. totalComeu, Duration = 6 }) end }) FarmTab:Button({ Title = "🔓 Forçar Liberação de Lock", Callback = function() forcarLiberacao() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "🎃 T88", Text = "🔓 Lock liberado!", Duration = 3 }) end }) local ConfigTab = Window:Tab({ Title = "Config", Icon = "settings" }) ConfigTab:Section({ Title = "🔄 Emergência" }) ConfigTab:Button({ Title = "🔄 Reset Personagem", Callback = function() resetPersonagem() end }) ConfigTab:Button({ Title = "Fechar Hub", Callback = function() Window:Destroy() gui:Destroy() end }) ConfigTab:Section({ Title = "💬 Comunidade" }) ConfigTab:Button({ Title = "📋 Copiar Link do Discord", Callback = function() if setclipboard then setclipboard(LINK_DO_DISCORD) game:GetService("StarterGui"):SetCore("SendNotification", { Title = "🎃 T88 Hub", Text = "✅ Link do Discord copiado!", Duration = 5 }) end end }) ConfigTab:Button({ Title = "🌐 Abrir Discord no Navegador", Callback = function() pcall(function() game:GetService("GuiService"):OpenBrowserWindow(LINK_DO_DISCORD) end) end }) print("[T88] 🎃 Hub v84.1 SEM KEY carregado!") task.spawn(function() pcall(function() game:GetService("StarterGui"):SetCore("SendNotification", { Title = "🎃 T88 HUB - DICA", Text = "Recomendado usar em SERVIDOR PRIVADO! Farm melhor e sem risco de denúncia.", Duration = 10, }) end) print("") print("════════════════════════════════════════") print("🎃 T88 HUB - RECOMENDAÇÃO 🎃") print("✨ Use em SERVIDOR PRIVADO!") print("✅ Farm melhor - você pega TUDO pra você") print("✅ Criar servidor privado é GRÁTIS") print("⚠️ Em servidor público, outros players podem te denunciar.") print("════════════════════════════════════════") print("") local ok, err = pcall(function() local avisoGui = Instance.new("ScreenGui") avisoGui.Name = "T88_AvisoInicial" avisoGui.ResetOnSpawn = false avisoGui.IgnoreGuiInset = true avisoGui.DisplayOrder = 999 avisoGui.Parent = LP:WaitForChild("PlayerGui") local banner = Instance.new("Frame") banner.Size = UDim2.new(0, 440, 0, 120) banner.Position = UDim2.new(0.5, -220, 0, 100) banner.BackgroundColor3 = Color3.fromRGB(30, 15, 40) banner.BorderSizePixel = 0 banner.Parent = avisoGui local corner = Instance.new("UICorner"); corner.CornerRadius = UDim.new(0, 12); corner.Parent = banner local stroke = Instance.new("UIStroke"); stroke.Color = Color3.fromRGB(255, 140, 0); stroke.Thickness = 3; stroke.Parent = banner local titulo = Instance.new("TextLabel") titulo.Size = UDim2.new(1, -20, 0, 30); titulo.Position = UDim2.new(0, 10, 0, 8) titulo.BackgroundTransparency = 1 titulo.Text = "🎃 DICA: USE SERVIDOR PRIVADO 🎃" titulo.TextColor3 = Color3.fromRGB(255, 140, 0) titulo.Font = Enum.Font.GothamBold; titulo.TextSize = 17 titulo.TextStrokeTransparency = 0; titulo.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) titulo.Parent = banner local descricao = Instance.new("TextLabel") descricao.Size = UDim2.new(1, -20, 0, 75); descricao.Position = UDim2.new(0, 10, 0, 40) descricao.BackgroundTransparency = 1 descricao.Text = "✅ Farm melhor - pega TUDO pra você\n✅ É grátis criar servidor privado\n✅ Sem players atrapalhando\n\n⚠️ Em servidor público, outros players podem te denunciar." descricao.TextColor3 = Color3.fromRGB(255, 220, 150) descricao.Font = Enum.Font.Gotham; descricao.TextSize = 13 descricao.TextWrapped = true; descricao.TextYAlignment = Enum.TextYAlignment.Top descricao.TextStrokeTransparency = 0; descricao.TextStrokeColor3 = Color3.fromRGB(0, 0, 0) descricao.Parent = banner banner.BackgroundTransparency = 1; titulo.TextTransparency = 1 descricao.TextTransparency = 1; stroke.Transparency = 1 for i = 0, 20 do banner.BackgroundTransparency = 1 - (i / 20) titulo.TextTransparency = 1 - (i / 20) descricao.TextTransparency = 1 - (i / 20) stroke.Transparency = 1 - (i / 20) task.wait(0.02) end task.wait(10) for i = 0, 25 do banner.BackgroundTransparency = i / 25 titulo.TextTransparency = i / 25 descricao.TextTransparency = i / 25 stroke.Transparency = i / 25 task.wait(0.02) end avisoGui:Destroy() end) if not ok then warn("[T88] Falha no banner:", err) end end) game:GetService("StarterGui"):SetCore("SendNotification", { Title = "🎃 T88 Hub", Text = "Happy Halloween! Aproveite o evento!", Duration = 5 }) end task.wait(1) iniciarHub() print("[T88] 🎃 Hub HALLOWEEN (sem key) carregado com sucesso!")