
Lista blanca de FiveM: guía completa (txAdmin, scripts, base de datos)
Los scripts gratuitos son útiles para comprobaciones rápidas. Para servidores de producción, compare los paquetes completos para servidores o los scripts de pago con mantenimiento, teniendo en cuenta el framework y el caso de uso.
Una lista blanca en FiveM es un mecanismo de control de acceso que restringe el acceso al servidor a jugadores preaprobados, identificados por sus identificadores únicos (licencia de Rockstar, ID de Steam, ID de Discord, etc.). A continuación, se incluye una guía lista para producción que abarca la lista blanca integrada de txAdmin, los patrones de script, el almacenamiento de la base de datos y las notas de fiabilidad.
Matriz de opciones TL;DR
| Modo | Dónde colocarlo | Qué comprueba | Mejor para | Notas |
|---|---|---|---|---|
| Licencia Aprobada | txAdmin → Configuración → Administrador de jugadores → Modo de lista blanca | licencia: (Estrella de rock) | La mayoría de los servidores | Simple, confiable; admite aprobaciones manuales o preaprobaciones |
| Miembro de Discord | txAdmin (vinculado a Discord) | discordia: es miembro del gremio | Comunidades centradas en Discordia | Usuarios que no son de Discord bloqueados |
| Rol de Discord | txAdmin (vinculado a Discord) | discordia: tiene un papel específico | Acceso restringido por roles (donante, personal) | Combinar con automatizaciones de roles |
| Solo para administradores | Administrador de transacciones | Solo administradores | Noches de mantenimiento/desarrollo | Bloquea efectivamente el servidor, no recomendado |
| Script personalizado | Recurso de Lua/JS | Cualquier identificador que quieras | Reglas granulares y experiencia de usuario | Necesita código + mantenimiento |
Recomendación: Usar Licencia Aprobada Para la línea base (todos tienen una licencia de Rockstar), luego agregue Rol de Discord como puerta adicional para niveles especiales.
Cómo habilitar y operar la lista blanca en txAdmin
Prerrequisitos
- txAdmin ejecutándose (incluido con FXServer).
- Para los modos de Discord: integración de Discord configurada (bot invitado, gremio/rol seleccionado).
Habilitar lista blanca
- Abierto txAdmin → Configuración → Administrador de jugadores.
- Colocar Modo de lista blanca a uno de: Licencia Aprobada, Miembro de Discord, Rol de Discord, o Solo para administradores.
- Establecer un Mensaje de rechazo, p.ej:
No está en la lista blanca. Solicita en discord.gg/yourinvite - Ahorrar.
Aprobar jugadores (dos flujos)
- Pasivo (cola): Cuando un jugador no aprobado intenta unirse, aparece una solicitud debajo Lista blanca. Aprobar/rechazar con un clic.
- Activo (preaprobación): Ir a Lista blanca → Agregar aprobación y pegar un identificador en el formulario
tipo:valor, p.ejlicencia:110000112345678vapor:11000010abcdef0discordia:123456789012345678
Revocar
- Abierto Jugadores o Lista blanca y haga clic Revocar junto a la aprobación.
Consejos
- Preferir licencia Identificadores para acceso de línea base (universalmente presentes).
- Mantén tu mensaje de rechazo procesable (enlace de Discord + reglas básicas + CTA del ticket).
- Para el personal/desarrolladores, requisitos de la pila: por ejemplo, debe ser
licencia+rol de discordia.
Detalles de implementación técnica
Las listas blancas se ejecutan durante el aplazamiento de la conexión Etapa. El servidor inspecciona el conjunto de identificadores del jugador y lo acepta o lo rechaza antes de que se carguen los recursos. Esto mantiene la carga baja y bloquea anticipadamente a los jugadores no aprobados.
Tipos de identificadores (confiabilidad)
licencia:(Estrella de rock) — estable, vinculado a la compra del juego; clave principal recomendada.vapor:— presente solo si se ejecuta Steam; puede faltar si los jugadores no usan Steam.discordia:— presente solo si Discord se ejecuta y su servidor lo lee.dirección IP:— dinámico; se utiliza para telemetría/límite de velocidad, no para identidad.
Script de lista blanca mínima (aplazamientos UX + multi-ID)
-- resource: simple-whitelist
-- fxmanifest.lua should include '@oxmysql/lib/MySQL.lua' if you use DB code below.
local STATIC_WHITELIST = {
["license:110000112345678"] = true,
["steam:11000010abcdef0"] = true,
["discord:123456789012345678"] = true,
}
local function collectIdentifiers(src)
local ids = {}
for _, id in ipairs(GetPlayerIdentifiers(src)) do ids[id] = true end
return ids
end
AddEventHandler("playerConnecting", function(name, setKickReason, deferrals)
local src = source
deferrals.defer()
deferrals.update(("Checking whitelist for %s..."):format(name))
local ids = collectIdentifiers(src)
-- Require at least a Rockstar license in all cases
local hasLicense = false
for id, _ in pairs(ids) do
if id:sub(1, 8) == "license:" then hasLicense = true break end
end
if not hasLicense then
return deferrals.done("You must start the game normally (Rockstar license missing). Restart and try again.")
end
-- Static allowlist quick‑path
for id, _ in pairs(ids) do
if STATIC_WHITELIST[id] then
return deferrals.done()
end
end
-- Fallback: not approved
return deferrals.done("Not whitelisted. Apply at discord.gg/yourinvite")
end)
Usar aplazamientos.actualización Mostrar mensajes de progreso al verificar las identificaciones o una base de datos. Esto reduce los informes falsos de tiempo de espera.
Lista blanca basada en bases de datos (oxmysql, lista para producción)
Esquema
CREAR TABLA SI NO EXISTE lista blanca ( id INT SIN FIRMA NOT NULL AUTO_INCREMENT, identificador VARCHAR(64) NOT NULL, nota VARCHAR(120) NULL, agregado_por VARCHAR(64) NULL, agregado_en TIMESTAMP PREDETERMINADO CURRENT_TIMESTAMP, CLAVE PRINCIPAL (id), CLAVE ÚNICA u_identificador (identificador) );
Comprobación del lado del servidor (oxmysql)
-- Requiere oxmysql. Agregar a fxmanifest: '@oxmysql/lib/MySQL.lua' AddEventHandler('playerConnecting', function(name, setKickReason, deferrals) local src = source deferrals.defer() deferrals.update('Verificando lista blanca...') local ids = {} for _, id in ipairs(GetPlayerIdentifiers(src)) do table.insert(ids, id) end -- Escalar único: ¿Se aprobó algún identificador? local rowCount = MySQL.scalar.await( 'SELECT COUNT(*) FROM whitelist WHERE identifier IN (?)', { ids } ) if rowCount and rowCount > 0 then return deferrals.done() else return deferrals.done('Acceso denegado. Aplicar en discord.gg/yourinvite') end end)
Comandos de calidad de vida del administrador (ejemplo)
RegisterCommand('wladd', function(src, args) si src ~= 0 entonces devuelve fin -- solo consola para simplicidad identificador local = args[1] si no es identificador o no identificador:find(':') entonces imprime('Uso: wladd identifierType:identifierValue') devuelve fin local ok = MySQL.prepare.await('INSERTAR IGNORE INTO whitelist (identificador,nota,added_by) VALORES (?, ?, ?)', { identificador, 'agregar manualmente', 'consola' }) imprime(ok y ('En lista blanca: %s'):formato(identificador) o 'Error al agregar') fin, verdadero) RegisterCommand('wlrm', function(src, args) si src ~= 0 entonces devuelve fin identificador local = args[1] local ok = MySQL.prepare.await('ELIMINAR DE lista blanca DONDE identificador = ?', { identificador }) print(ok y ('Eliminado: %s'):formato(identificador) o 'No se pudo eliminar') fin, verdadero)
Para MySQL asíncrono, reemplazar
MySQL.scalar.awaitconMySQL.Async.fetchScalary el estilo del parámetro con@param/?. Preferir oxmysql para el rendimiento y esperar soporte.
Actuación
- Mantener un Índice ÚNICO en
identificador(ver esquema). - Opcionalmente calentar una memoria caché al iniciar y al cambiar; accede a la base de datos solo en caso de falla de caché.
- Límite de velocidad de intentos fallidos de conexión repetidos por
licencia/IP.
Reglas de múltiples identificadores
Algunos servidores requieren varias ID (p. ej., Steam y Discord) para los niveles de personal. Ejemplo de patrón:
local function hasType(ids, typ)
for id, _ in pairs(ids) do if id:sub(1, #typ+1) == (typ..':') then return true end end
return false
end
-- Require license, and if staff, also discord
if not hasType(ids, 'license') then
return deferrals.done('Start the game normally (license missing).')
end
if staffModeEnabled and not hasType(ids, 'discord') then
return deferrals.done('Join our Discord and link your account to enter.')
end
Usar Discord como lista blanca (sin código personalizado)
Si tu comunidad funciona en Discord, usa txAdmin Miembro de Discord o Rol de Discord modos:
- Vincula txAdmin a tu gremio de Discord.
- Elegir Miembro de Discord permitir a cualquier miembro del gremio, o Rol de Discord para controlar un rol específico (por ejemplo,
@En la lista blanca). - Mantener Licencia Aprobada como segunda puerta si quieres ambas condiciones.
Mejores prácticas: mantener una #solicitudes de lista blanca Canal + formulario ligero. Automatiza la asignación de roles tras la aprobación mediante un bot o un flujo de moderación.
FAXES: Un sistema de lista blanca de Discord para FiveM
Ideas de integración
- Bots de Discord:aprobar automáticamente cuando un usuario completa una solicitud, la impulsa o se suscribe.
- Panel web:el personal agrega o elimina identificadores, con registro de auditoría.
- Niveles de pago: conceder
rol de discordiaa través de su tienda (Tebex/Patreon) y deje que el modo de rol txAdmin imponga el acceso.
Solución de problemas y trampas
- El jugador no aparece en las solicitudes de txAdmin:Asegúrese de que la lista blanca esté habilitada en el perfil correcto; verifique que el jugador realmente haya alcanzado la etapa de aplazamiento (mire la consola en vivo de txAdmin).
- Falta el ID de Steam:Steam debe estar ejecutándose; no configures tu lista blanca únicamente en eso
vapor:. Preferirlicencia:. - Falta el ID de Discord:El usuario debe tener Discord ejecutándose y su servidor debe estar configurado para leer
discordia:; verificar la integración de Discord. licenciacontralicencia2:Algunos marcos registran dos campos de licencia; asegúrese de que sus consultas de migración/base de datos consideren ambos al mover datos.- Tiempos de espera de aplazamiento:Llamar siempre
aplazamientos.actualizar(...)mientras espera a DB; responda dentro de ~10–15 segundos. - Formato de identificador no coincidente:Asegúrate de pegar
tipo:valorexactamente (en minúsculas, separador de dos puntos). - Altos picos de tráfico:Almacene en caché la lista blanca en la memoria, precaliente al inicio y elimine el rebote de las llamadas a la base de datos.
Preguntas frecuentes sobre SEO (contenido preparado para esquemas)
¿Cuál es el mejor identificador para la lista blanca de FiveM?
La estrella de rock licencia: es la más universal y confiable; úsela como su clave principal.
¿Puedo incluirme en la lista blanca de Discord sin codificar?
Sí. txAdmin lo admite Miembro de Discord y Rol de Discord modos de lista blanca una vez que Discord esté vinculado.
¿Necesito Steam para la lista blanca?
No. Muchos jugadores no usan Steam; evita hacer vapor: obligatorio para el acceso de línea base.
¿Puedo combinar varias comprobaciones (por ejemplo, licencia + rol de Discord)?
Sí. Usar el modo de rol txAdmin y Mantenga una verificación de licencia en su secuencia de comandos personalizada o flujo de admisiones.
¿Cómo puedo preaprobar a los jugadores?
txAdmin → Lista blanca → Agregar aprobación, pegar Tipo de identificador:identificador (p.ej, licencia:...).
Mensajes de rechazo de copiar y pegar (use su marca)
- Basado en colas:
Aún no estás en la lista blanca. Postúlate en #whitelist-requests → discord.gg/yourinvite - Controlado por roles:
Tu cuenta de Discord no está en la lista blanca. Únete a discord.gg/yourinvite y solicita acceso. - Mantenimiento:
El servidor está en modo de solo administración por mantenimiento. Inténtelo de nuevo más tarde.
Conclusión
Una lista blanca de FiveM valida los identificadores de los jugadores durante la fase de aplazamiento de la conexión y bloquea a los usuarios no autorizados antes de que se carguen los recursos. En la mayoría de los servidores, habilite Licencia Aprobada En txAdmin, opcionalmente capa Rol de Discord Para el acceso a la comunidad y utilizar un Respaldado por base de datos Lista con almacenamiento en caché para escalar.
Apéndice: Ejemplo mínimo original (para referencia)
-- server.lua lista blanca local = { ["steam:110000132456789"] = verdadero, ["license:abc123def456789"] = verdadero, ["discord:123456789012345678"] = verdadero } AddEventHandler("playerConnecting", function(name, setKickReason, deferrals) jugador local = source identificadores locales = GetPlayerIdentifiers(player) en lista blanca local = falso deferrals.defer() para _, id en pares(identificadores) hacer si lista blanca[id] entonces en lista blanca = verdadero break fin fin si no está en la lista blanca entonces deferrals.done("No está en la lista blanca. Aplicar en: your-discord.gg/invite") de lo contrario deferrals.done() fin fin)






