Volver al catálogo

Key System

Cookieskeysystem.lua · v2.0.0

Una ventana que pide una key antes de cargar tu hub, con el mismo estilo que CookiesLib. Valida contra una lista, una URL, tu propia función o KeyForge, recuerda la key y bloquea tras varios intentos fallidos.

En esta página

Pruébalo antes de usarlo

Este script abre el Key System con una sola key válida, COOKIES-DEMO (sin distinguir mayúsculas). Pégalo en tu executor y prueba a escribir una key mal y una bien:

KeySystemTest.lua
local KeySystem = loadstring(game:HttpGet("https://raw.githubusercontent.com/Lilwero20/CookiesLib/main/Cookieskeysystem.lua"))()

local ok, key = KeySystem.Prompt({
    Title = "Test",
    Keys = { "COOKIES-DEMO" },
    CaseSensitive = false,
    SaveKey = false,
})

print("Key valid:", ok, key)

También está dentro del menú de prueba de CookiesLib: abre la pestaña Personalizar y pulsa Abrir key system. Allí la key también es COOKIES-DEMO, y con 3 errores se activa una espera de 10 segundos.

CookiesDemo.lua
loadstring(game:HttpGet("https://raw.githubusercontent.com/Lilwero20/CookiesLib/main/CookiesDemo.lua"))()

Inicio rápido

Carga la librería y el Key System, pide la key y, solo si es válida, crea tu ventana. Si le pasas Library, el Key System usa su tema (incluido el que eligió el jugador) y sus fuentes.

lua
local Library   = loadstring(game:HttpGet("https://raw.githubusercontent.com/Lilwero20/CookiesLib/main/CookiesLib.lua"))()
local KeySystem = loadstring(game:HttpGet("https://raw.githubusercontent.com/Lilwero20/CookiesLib/main/Cookieskeysystem.lua"))()

local ok, key = KeySystem.Prompt({
    Library = Library,
    Title = "My Hub",
    Subtitle = "Key System",
    KeyLink = "https://example.com/get-key",
    DiscordLink = "https://discord.gg/xxxxxx",
    Keys = { "COOKIE-1234", "COOKIE-5678" },
})
if not ok then return end

local Window = Library:CreateWindow({ Title = "My Hub" })

KeySystem.Prompt(opciones) espera hasta que el jugador valida o cierra, y devuelve ok, key. Es un atajo de KeySystem.new(opciones):Wait().

Cómo se valida la key

Se usa el primer método disponible, en este orden:

  1. 1`KeyForge`: servicio externo de keys (ver más abajo).
  2. 2`Validate`: tu propia función.
  3. 3`KeyUrl`: una URL con una key por línea (se guarda en caché 30 segundos).
  4. 4`Keys`: una lista dentro del script.
lua
Validate = function(key)
    if key == "secret" then
        return true, "Welcome"
    end
    return false, "Wrong key"
end,

KeyUrl = "https://raw.githubusercontent.com/user/repo/main/keys.txt",

Validate devuelve si la key es válida y, opcionalmente, un mensaje para el jugador. Los espacios al principio y al final de la key se ignoran, y con CaseSensitive = false da igual escribir en mayúsculas o minúsculas.

Una lista Keys dentro del script la puede leer cualquiera que abra el script. Para algo serio usa KeyUrl, Validate contra tu servidor o KeyForge.

Personalizarlo

Puedes cambiar el tema, el color, los textos y los pasos de ayuda. Este ejemplo lo deja con tema rosa y los textos en español:

lua
KeySystem.new({
    Library = Library,
    Theme = "Strawberry",
    Accent = Color3.fromRGB(255, 105, 140),
    Title = "Mi Hub",
    Subtitle = "Acceso",
    Description = "Escribe tu key para desbloquear el hub.",
    Steps = {
        "Pulsa Get key para copiar el enlace",
        "Completa los pasos en tu navegador",
        "Pega tu key y pulsa Verify",
    },
    Keys = { "COOKIE-1234" },
    CaseSensitive = false,
    MaxAttempts = 3,
    Cooldown = 10,
    Blur = true,
})
OpciónPor defectoQué hace
LibrarynilHereda el tema y las fuentes de CookiesLib
ThemenilNombre de un tema de CookiesLib o tabla de colores
AccentnilColor de acento solo para el Key System
Title / Subtitle"Cookies Hub" / "Key System"Textos de la cabecera
Logologo de CookiesImagen; false la quita
Descriptiontexto en inglésTexto bajo el título
Steps3 pasos en inglésHasta 3 pasos en el panel «Need a key?»
NotenilTexto libre en lugar de los pasos
KeyLinknilEnlace del botón Get key
DiscordLinknilBotón Join Discord
CaseSensitivetruefalse ignora mayúsculas y minúsculas
SaveKeytruePermite recordar la key en el dispositivo
AutoVerifytrueVerifica sola la key guardada al abrir
MaxAttempts5Intentos fallidos antes del bloqueo
Cooldown15Segundos de bloqueo
Blur / ShadowtrueDesenfoque del fondo y sombra de la ventana
Folder / FileName"CookiesHub" / autoDónde se guarda la key
IdautomáticoSepara la key y el bloqueo de cada script

Los botones aparecen solo si tienen algo que hacer: Get key con KeyLink o KeyForge, Join Discord con DiscordLink, y Paste si el executor tiene portapapeles.

Objeto y eventos

KeySystem.new devuelve un objeto que puedes controlar desde tu script:

lua
local ks = KeySystem.new({ Keys = { "COOKIE-1234" } })

local ok, key = ks:Wait()
ks:Submit("COOKIE-1234")
ks:SetStatus("Checking...", "Warning")
ks:Close()
ks:Destroy()
MétodoQué hace
ks:Wait()Espera hasta terminar y devuelve success, key
ks:Submit(key)Envía una key por código (sin argumento usa lo escrito)
ks:SetStatus(texto, tipo)Mensaje bajo el botón: Success, Warning, Error o nil
ks:Close()Cierra sin validar
ks:Destroy()Cierra y limpia todo

En vez de esperar con Wait() puedes usar eventos:

lua
KeySystem.new({
    Keys = { "COOKIE-1234" },
    OnSuccess = function(key)
        loadstring(game:HttpGet("https://example.com/my-hub.lua"))()
    end,
    OnFail = function(key, message)
        warn("Wrong key:", key, message)
    end,
    OnClose = function()
        warn("Closed without a key")
    end,
})

Cómo se comporta

  • Key recordada: si el executor puede guardar archivos, aparece la casilla *Remember key*. La key válida se guarda y, al abrir de nuevo, se rellena y se verifica sola. Si deja de ser válida se borra.
  • Intentos: se muestran los que quedan. Al agotarlos, el botón se bloquea durante Cooldown segundos, aunque se vuelva a ejecutar el script en la misma partida.
  • Errores de conexión (URL caída, KeyForge sin respuesta, error en Validate) no gastan intentos.
  • La ventana se puede arrastrar desde arriba y se adapta a pantallas pequeñas.

Varios scripts con key

Cada Key System tiene su propio Id, así que varios scripts pueden usarlo a la vez sin pisarse: cada uno guarda su key en Folder/keys/<Id>.txt y tiene su propio bloqueo por intentos.

Si usas`Id` automático
Id = "mi-hub"mi-hub
KeyForgekf_<scriptId>
KeyUrlurl_<hash de la URL>
Keyskeys_<hash de la lista>
Solo ValidateEl Title

Si dos scripts tuyos usan Validate con el mismo Title, dales un Id distinto:

lua
KeySystem.new({ Id = "blox-fruits", Title = "Cookies Hub", Validate = check })
KeySystem.new({ Id = "steal-an-egg", Title = "Cookies Hub", Validate = check })

KeyForge

Integración opcional con KeyForge, el servicio que usa Cookies Hub. KeyForge se encarga del estado de las keys, los límites, el HWID y la entrega del script. Su SDK se descarga en segundo plano al abrir la ventana, así que verificar es casi instantáneo.

lua
KeySystem.new({
    Library = Library,
    DiscordLink = "https://discord.gg/xxxxxx",
    KeyForge = {
        projectId = "YOUR_PROJECT_ID",
        scriptId = "YOUR_SCRIPT_ID",
        integrationToken = "YOUR_TOKEN",
    },
    LoadScript = true,
})

Los IDs y el token los da el panel de KeyForge: edita un script con key, abre In-game UI y elige Custom Lua GUI. Guía oficial de KeyForge.

Botón / momentoLlamadaQué hace la ventana
Get keyclient:getKeyUrl()Copia el enlace de la página de keys
Verifyclient:verify(key)Si es válida continúa; si no, muestra el mensaje de KeyForge
Tras validar (LoadScript = true)client:loadScript()Carga el script protegido. Si falla, la ventana no se cierra y muestra el motivo
CódigoSignificado¿Gasta intento?
KEY_INVALIDLa key no existe o está vacíaSí
KEY_EXPIREDLa key caducóSí (y se borra la guardada)
KEY_REVOKEDLa key fue revocadaSí (y se borra la guardada)
KEY_SCRIPT_MISMATCHLa key es de otro scriptSí
HWID_MISMATCHLa key está ligada a otro dispositivoSí
RATE_LIMITEDDemasiados intentos en KeyForgeNo
SESSION_EXPIREDLa verificación caducóNo
NETWORK_ERRORNo se pudo conectar con KeyForgeNo
PROJECT_DISABLEDProyecto desactivado o pausadoNo

No pongas secretos ni reglas de validación dentro de tu script: un script volcado se puede leer. Deja eso a KeyForge o a tu servidor.

Ejemplo completo

Key System con tema de CookiesLib, 3 intentos y 10 segundos de espera, y una ventana que solo aparece con una key válida. La key de prueba es COOKIES-DEMO:

MyHubWithKey.lua
local Library   = loadstring(game:HttpGet("https://raw.githubusercontent.com/Lilwero20/CookiesLib/main/CookiesLib.lua"))()
local KeySystem = loadstring(game:HttpGet("https://raw.githubusercontent.com/Lilwero20/CookiesLib/main/Cookieskeysystem.lua"))()

local ok, key = KeySystem.Prompt({
    Library = Library,
    Title = "My Hub",
    Subtitle = "Key System",
    KeyLink = "https://example.com/get-key",
    DiscordLink = "https://discord.gg/xxxxxx",
    Keys = { "COOKIES-DEMO" },
    CaseSensitive = false,
    SaveKey = false,
    MaxAttempts = 3,
    Cooldown = 10,
    OnFail = function(_, message)
        warn(message)
    end,
})
if not ok then return end

local Window = Library:CreateWindow({ Title = "My Hub", Subtitle = "Unlocked" })
local Main = Window:CreateTab("Main", "M")
local Welcome = Main:CreateSection({ Name = "Welcome", Full = true })
Welcome:AddAlert({ Type = "Success", Title = "Key accepted", Content = "Your key: <b>" .. key .. "</b>" })
Welcome:AddButton({ Name = "Say hi", Primary = true, Callback = function()
    Window:Notify({ Title = "My Hub", Content = "Hi!", Type = "Success" })
end })
Window:CreateSettingsTab()

Problemas comunes

  • No recuerda la key: el executor debe soportar writefile, readfile, isfolder, makefolder e isfile, y la casilla *Remember key* tiene que estar marcada al validar.
  • No aparece el botón Get key: necesita KeyLink o KeyForge.
  • Me bloqueó y vuelvo a ejecutar el script: el bloqueo dura Cooldown segundos aunque re-ejecutes en la misma partida; es intencional.
  • Dos scripts se borran la key entre sí: dales un Id distinto a cada uno.