Pr-historia melhor script
Key Required

Pr-historia melhor script

Ceratosaurus | Prehistoria!Scorpion0scriptScorpion0script 635 views 478 executesUpdated Oct 4, 2026
Unrated
00
Lua Script•1376 lines (61468 chars)
-- =========================================================
-- 🎃 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!")

Features & Information

Auto farm cristal,Auto Comer e beber,Auto atack,esp o script usa chaves pode pegar pelo link do linkvertice ou discord.

Community Comments (0)

No comments yet for this script.