Refugio de portales - Hub
Key Required

Refugio de portales - Hub

Portal Asylump1bubp1bub 896 views 1.4K executesUpdated Oct 5, 2026
5.0/ 5(1 votes)
10100% Positive
Lua Script•585 lines (18317 chars)
-- ============================================================
-- paneer's Menu — WindUI
-- Todos los exploits confirmados integrados
-- ============================================================

-- Cargar WindUI
local WindUI = loadstring(game:HttpGet("https://github.com/Footagesus/WindUI/releases/latest/download/main.lua"))()

-- Servicios
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local CollectionService = game:GetService("CollectionService")
local LP = Players.LocalPlayer
local RS = ReplicatedStorage

-- Packet library del juego
local Packets = require(RS.Utils.Packets)

-- Estado global
local state = {
    m1Auto = false,
    abilitySpam = false,
    dashSpam = false,
    blockSpam = false,
    wheelSpinSpam = false,
    confettiSpam = false,
    rainbowPortal = false,
    espEnabled = false,
    fovEnabled = false,
    zoomEnabled = false,
}

local espObjects = {}
local requestId = 0

-- ============================================================
-- FUNCIONES AUXILIARES
-- ============================================================

local function getChar()
    local char = LP.Character
    if not char then return nil end
    return char, char:FindFirstChildOfClass("Humanoid"), char:FindFirstChild("HumanoidRootPart")
end

local function getClosestEnemy(range)
    range = range or 12
    local char = LP.Character
    if not char then return nil end
    local hrp = char:FindFirstChild("HumanoidRootPart")
    if not hrp then return nil end
    local closest, minDist = nil, range
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= LP and p.Character then
            local php = p.Character:FindFirstChild("HumanoidRootPart")
            local phum = p.Character:FindFirstChildOfClass("Humanoid")
            if php and phum and phum.Health > 0 then
                local dist = (php.Position - hrp.Position).Magnitude
                if dist < minDist then
                    closest, minDist = php, dist
                end
            end
        end
    end
    return closest
end

local function hsvToHex(h, s, v)
    return "#" .. Color3.fromHSV(h, s, v):ToHex()
end

-- ============================================================
-- CREAR VENTANA
-- ============================================================

local Window = WindUI:CreateWindow({
    Title = "paneer's Hub",
    Icon = "crown",
    Author = "by paneer",
    Folder = "paneersHub",
    Size = UDim2.fromOffset(580, 420),
    Transparent = true,
    Theme = "Dark",
    Resizable = true,
    SideBarWidth = 180,
    HideSearchBar = true,
    ScrollBarEnabled = false,
})

-- Tabs
local MainTab = Window:Tab({ Title = "Principal", Icon = "home" })
local CombatTab = Window:Tab({ Title = "Combate", Icon = "sword" })
local ExploitsTab = Window:Tab({ Title = "Exploits", Icon = "zap" })
local VisualsTab = Window:Tab({ Title = "Visuales", Icon = "eye" })
local RewardsTab = Window:Tab({ Title = "Recompensas", Icon = "gift" })

-- ============================================================
-- TAB PRINCIPAL
-- ============================================================

local mainSection = MainTab:Section({ Title = "Estado", Opened = true })

mainSection:Button({
    Title = "Ver Morteys",
    Desc = "Busca el contador en la GUI",
    Callback = function()
        local PlayerGui = LP:WaitForChild("PlayerGui")
        local found = false
        local function scan(inst, path, depth)
            if depth > 10 then return end
            path = path or ""
            if inst:IsA("TextLabel") or inst:IsA("TextButton") then
                local txt = inst.Text
                if txt and txt:match("^[%d,]+$") and #txt >= 3 then
                    print("[paneer] NUMERO: " .. path .. "." .. inst.Name .. " = " .. txt)
                    found = true
                end
            end
            for _, c in ipairs(inst:GetChildren()) do
                scan(c, path .. "." .. inst.Name, depth + 1)
            end
        end
        scan(PlayerGui, "PlayerGui", 0)
        if not found then
            print("[paneer] No se encontraron números grandes en la GUI")
        end
    end,
})

mainSection:Button({
    Title = "Ver Inventario",
    Desc = "Muestra habilidades y gun models poseídos",
    Callback = function()
        for _, folderName in ipairs({"OwnedSpecials", "OwnedUltimates", "OwnedGunModels"}) do
            local folder = LP:FindFirstChild(folderName)
            if folder then
                print("[paneer] === " .. folderName .. " ===")
                for _, v in ipairs(folder:GetChildren()) do
                    if v:IsA("BoolValue") and v.Value then
                        print("  ✓ " .. v.Name)
                    end
                end
            end
        end
    end,
})

-- ============================================================
-- TAB COMBATE
-- ============================================================

local combatSection = CombatTab:Section({ Title = "Auto M1", Opened = true })

combatSection:Toggle({
    Title = "M1 Auto + Aim",
    Desc = "Ataca automáticamente y se gira al enemigo más cercano",
    Value = false,
    Callback = function(v)
        state.m1Auto = v
    end,
})

combatSection:Slider({
    Title = "Rango de Aim",
    Desc = "Distancia para apuntar",
    Step = 1,
    Value = { Min = 5, Max = 50, Default = 12 },
    Callback = function(v)
        state.m1Range = v
    end,
})

local abilitySection = CombatTab:Section({ Title = "Habilidades", Opened = true })

abilitySection:Toggle({
    Title = "Spam de Habilidades",
    Desc = "Activa Special y Ultimate continuamente",
    Value = false,
    Callback = function(v)
        state.abilitySpam = v
    end,
})

local dashSection = CombatTab:Section({ Title = "Dash y Block", Opened = true })

dashSection:Toggle({
    Title = "Spam de Dash",
    Desc = "Dash front continuo",
    Value = false,
    Callback = function(v)
        state.dashSpam = v
    end,
})

dashSection:Toggle({
    Title = "Spam de Block",
    Desc = "Toggle rápido de bloqueo",
    Value = false,
    Callback = function(v)
        state.blockSpam = v
    end,
})

-- ============================================================
-- TAB EXPLOITS
-- ============================================================

local packetSection = ExploitsTab:Section({ Title = "Packets", Opened = true })

packetSection:Toggle({
    Title = "WheelSpin Infinito",
    Desc = "Gira la ruleta sin límite — CONFIRMADO",
    Value = false,
    Callback = function(v)
        state.wheelSpinSpam = v
    end,
})

packetSection:Toggle({
    Title = "Confetti a Todos",
    Desc = "Emite confetti global — CONFIRMADO",
    Value = false,
    Callback = function(v)
        state.confettiSpam = v
    end,
})

packetSection:Button({
    Title = "Disparar Confetti (una vez)",
    Desc = "Emite confetti inmediatamente",
    Callback = function()
        pcall(function() Packets.Conffeti.Emit:Fire() end)
    end,
})

local portalSection = ExploitsTab:Section({ Title = "Portal", Opened = true })

portalSection:Toggle({
    Title = "Portal Arcoíris",
    Desc = "Cambia el color del portal en ciclo HSV",
    Value = false,
    Callback = function(v)
        state.rainbowPortal = v
    end,
})

portalSection:Slider({
    Title = "Velocidad Arcoíris",
    Desc = "Segundos por tick (más bajo = más rápido)",
    Step = 0.01,
    Value = { Min = 0.03, Max = 0.5, Default = 0.08 },
    Callback = function(v)
        state.rainbowSpeed = v
    end,
})

portalSection:Button({
    Title = "Equipar Portal",
    Desc = "Fuerza la creación de un portal",
    Callback = function()
        local PortalSlotAction = RS.Functions:FindFirstChild("PortalSlotAction")
        if PortalSlotAction then
            pcall(function() PortalSlotAction:InvokeServer("Equip") end)
        end
    end,
})

local codeSection = ExploitsTab:Section({ Title = "Códigos", Opened = false })

codeSection:Button({
    Title = "Probar Códigos Comunes",
    Desc = "Prueba una wordlist de códigos potenciales",
    Callback = function()
        local codes = {"FREE", "MORTY", "RICK", "PORTAL", "SUMMER", "BETH", "JERRY",
                       "EVILMORTY", "PRIME", "C137", "BIRD", "PICKLE", "TINY"}
        for _, code in ipairs(codes) do
            pcall(function()
                local a, b = Packets.Codes.RedeemCode:Fire(code)
                if type(a) == "table" then
                    print("[paneer] Code " .. code .. " -> " .. tostring(a[1]) .. " | " .. tostring(a[2]))
                end
            end)
            task.wait(0.8)
        end
    end,
})

-- ============================================================
-- TAB VISUALES
-- ============================================================

local espSection = VisualsTab:Section({ Title = "ESP", Opened = true })

espSection:Toggle({
    Title = "ESP de Jugadores",
    Desc = "Cajas y nombres sobre enemigos",
    Value = false,
    Callback = function(v)
        state.espEnabled = v
        if not v then
            for _, objs in pairs(espObjects) do
                objs.box:Remove()
                objs.name:Remove()
            end
            espObjects = {}
        end
    end,
})

local fovSection = VisualsTab:Section({ Title = "Cámara", Opened = true })

fovSection:Toggle({
    Title = "FOV Hack",
    Desc = "Forza el FieldOfView localmente (client-side)",
    Value = false,
    Callback = function(v)
        state.fovEnabled = v
    end,
})

fovSection:Slider({
    Title = "FOV",
    Desc = "Valor del FieldOfView",
    Step = 1,
    Value = { Min = 70, Max = 140, Default = 120 },
    Callback = function(v)
        state.fovValue = v
    end,
})

fovSection:Toggle({
    Title = "Zoom Extendido",
    Desc = "MaxZoomDistance = 1000",
    Value = false,
    Callback = function(v)
        state.zoomEnabled = v
        if v then
            LP.CameraMaxZoomDistance = 1000
        end
    end,
})

-- ============================================================
-- TAB RECOMPENSAS
-- ============================================================

local rewardSection = RewardsTab:Section({ Title = "Recompensas", Opened = true })

rewardSection:Button({
    Title = "Reclamar Todo (Playtime + Daily)",
    Desc = "Envía los packets de todas las recompensas",
    Callback = function()
        for i = 1, 7 do
            pcall(function() Packets.PlaytimeRewards.ClaimReward:Fire(i) end)
            task.wait(0.3)
        end
        for i = 1, 7 do
            pcall(function() Packets.DailyRewards.ClaimReward:Fire(i) end)
            task.wait(0.3)
        end
        pcall(function() Packets.FriendReward.ClaimReward:Fire() end)
        pcall(function() Packets.GroupReward.ClaimReward:Fire() end)
        WindUI:Notify({ Title = "Recompensas", Content = "Todos los packets enviados", Duration = 3 })
    end,
})

rewardSection:Button({
    Title = "Verificar Pases",
    Desc = "Muestra si tienes los gamepasses",
    Callback = function()
        local passIds = {
            ["Custom Portal Color"] = 1979288487,
            ["VIP"] = 1853711135,
            ["Teleporter"] = 1853549088,
            ["x2 Speed"] = 1853099131,
        }
        for name, id in pairs(passIds) do
            pcall(function()
                local owned = Packets.Marketplace.CheckPassOwned:Fire(id, name)
                print("[paneer] " .. name .. ": " .. tostring(owned))
            end)
            task.wait(0.3)
        end
    end,
})

-- ============================================================
-- LOOPS DE EJECUCIÓN
-- ============================================================

-- M1 Auto + Aim
task.spawn(function()
    while task.wait(0.15) do
        if state.m1Auto then
            local char, hum, hrp = getChar()
            if char and hum and hum.Health > 0 and hrp then
                local target = getClosestEnemy(state.m1Range or 12)
                if target then
                    local lookPos = Vector3.new(target.Position.X, hrp.Position.Y, target.Position.Z)
                    hrp.CFrame = CFrame.lookAt(hrp.Position, lookPos)
                end
                requestId = requestId + 1
                local CombatEvent = RS.Events.Combat:FindFirstChild("CombatEvent")
                if CombatEvent then
                    pcall(function()
                        CombatEvent:FireServer({
                            action = "Start",
                            gunMode = false,
                            requestId = requestId,
                            finisher = nil,
                            predictedStage = 1,
                            rootCFrame = hrp.CFrame,
                            sentAt = workspace:GetServerTimeNow()
                        })
                    end)
                end
            end
        end
    end
end)

-- Ability Spam
task.spawn(function()
    while task.wait(1.5) do
        if state.abilitySpam then
            local AbilityAction = RS.Functions:FindFirstChild("AbilityAction")
            if AbilityAction then
                for _, ability in ipairs({"Special", "Ultimate"}) do
                    local ok, res = pcall(function()
                        return AbilityAction:InvokeServer("Activate", ability)
                    end)
                    if ok and type(res) == "table" and res.serial then
                        task.wait(0.3)
                        pcall(function()
                            AbilityAction:InvokeServer("Release", ability, res.serial)
                        end)
                    end
                    task.wait(0.3)
                end
            end
        end
    end
end)

-- Dash Spam
task.spawn(function()
    while task.wait(1.5) do
        if state.dashSpam then
            local DashEvent = RS.Events.Combat:FindFirstChild("DashEvent")
            if DashEvent then
                requestId = requestId + 1
                pcall(function() DashEvent:FireServer("Start", "Front", requestId) end)
            end
        end
    end
end)

-- Block Spam
task.spawn(function()
    while task.wait(0.2) do
        if state.blockSpam then
            local BlockEvent = RS.Events.Combat:FindFirstChild("BlockEvent")
            if BlockEvent then
                pcall(function() BlockEvent:FireServer(true) end)
                task.wait(0.05)
                pcall(function() BlockEvent:FireServer(false) end)
            end
        end
    end
end)

-- WheelSpin Spam
task.spawn(function()
    while task.wait(1) do
        if state.wheelSpinSpam then
            pcall(function() Packets.WheelSpin.Spin:Fire() end)
        end
    end
end)

-- Confetti Spam
task.spawn(function()
    while task.wait(1.5) do
        if state.confettiSpam then
            pcall(function() Packets.Conffeti.Emit:Fire() end)
        end
    end
end)

-- Rainbow Portal
task.spawn(function()
    local hue = 0
    while true do
        local speed = state.rainbowSpeed or 0.08
        if state.rainbowPortal then
            hue = (hue + 0.008) % 1
            local hex = hsvToHex(hue, 1, 1)
            pcall(function() Packets.Settings.SavePortalColor:Fire(hex) end)
        end
        task.wait(speed)
    end
end)

-- ESP
local cam = workspace.CurrentCamera
local function createESP(player)
    if player == LP or espObjects[player] then return end
    local box = Drawing.new("Square")
    box.Thickness = 1; box.Color = Color3.fromRGB(255, 0, 0); box.Filled = false; box.Visible = false
    local name = Drawing.new("Text")
    name.Size = 14; name.Center = true; name.Outline = true
    name.Color = Color3.fromRGB(255, 255, 255); name.Visible = false
    espObjects[player] = {box = box, name = name}
end
for _, p in ipairs(Players:GetPlayers()) do createESP(p) end
Players.PlayerAdded:Connect(createESP)
Players.PlayerRemoving:Connect(function(p)
    if espObjects[p] then
        espObjects[p].box:Remove(); espObjects[p].name:Remove(); espObjects[p] = nil
    end
end)

RunService.RenderStepped:Connect(function()
    if not state.espEnabled then
        for _, objs in pairs(espObjects) do
            objs.box.Visible = false; objs.name.Visible = false
        end
        return
    end
    for player, objs in pairs(espObjects) do
        local char = player.Character
        local hrp = char and char:FindFirstChild("HumanoidRootPart")
        local hum = char and char:FindFirstChildOfClass("Humanoid")
        if hrp and hum and hum.Health > 0 then
            local pos, onScreen = cam:WorldToViewportPoint(hrp.Position)
            if onScreen then
                local head = char:FindFirstChild("Head")
                if head then
                    local headPos = cam:WorldToViewportPoint(head.Position + Vector3.new(0, 1, 0))
                    local height = math.abs(headPos.Y - pos.Y) * 1.8
                    local width = height / 2
                    objs.box.Size = Vector2.new(width, height)
                    objs.box.Position = Vector2.new(pos.X - width/2, pos.Y - height/2)
                    objs.box.Visible = true
                    objs.name.Text = player.Name .. " [" .. math.floor(hum.Health) .. "]"
                    objs.name.Position = Vector2.new(pos.X, pos.Y - height/2 - 20)
                    objs.name.Visible = true
                end
            else
                objs.box.Visible = false; objs.name.Visible = false
            end
        else
            objs.box.Visible = false; objs.name.Visible = false
        end
    end
end)

-- FOV + Zoom
RunService.RenderStepped:Connect(function()
    if state.fovEnabled and cam then
        local targetFOV = state.fovValue or 120
        if cam.FieldOfView ~= targetFOV then
            cam.FieldOfView = targetFOV
        end
    end
    if state.zoomEnabled then
        if LP.CameraMaxZoomDistance ~= 1000 then
            LP.CameraMaxZoomDistance = 1000
        end
    end
end)

-- ============================================================
-- NOTIFICACIÓN
-- ============================================================

WindUI:Notify({
    Title = "paneer's Hub",
    Content = "Menú cargado. Todos los exploits activos.",
    Duration = 5,
})

print("[paneer] Menú definitivo cargado")

Features & Information

- Menú WindUI con 5 pestañas: Principal, Combate, Exploits, Visuales, Recompensas - M1 Auto + Aim: ataca y gira hacia el enemigo más cercano - Spam de habilidades (Special y Ultimate) - Spam de Dash y Block - WheelSpin infinito (dinero ilimitado) — CONFIRMADO - Confetti a todos los jugadores - Portal Arcoíris: cambia el color de tu portal en ciclo HSV - Reclamo automático de recompensas (Playtime, Daily, Friend, Group) - Verificador de GamePasses - ESP de jugadores con cajas y nombres - FOV Hack y Zoom Extendido (client-side) - Interfaz en español

Community Comments (0)

No comments yet for this script.