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 | license: (Estrella de rock) | La mayoría de los servidores | Simple, confiable; admite aprobaciones manuales o preaprobaciones |
| Miembro de Discord | txAdmin (vinculado a Discord) | discord: es miembro del gremio | Comunidades centradas en Discord | Usuarios que no son de Discord bloqueados |
| Rol de Discord | txAdmin (vinculado a Discord) | discord: 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:
Not whitelisted. Apply at 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
type:value, p.ejlicense:110000112345678steam:11000010abcdef0discord: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
license+discord role.
Detalles de implementación técnica
Las listas blancas se ejecutan durante el diferimiento de conexión etapa. El servidor inspecciona el conjunto de identificadores del jugador y acepta o rechaza antes de que se carguen los recursos. Esto mantiene baja la carga y bloquea a los jugadores no aprobados temprano.
Tipos de Identificadores (confiabilidad)
license:(Estrella de rock) — estable, vinculado a la compra del juego; clave principal recomendada.steam:— presente solo si se ejecuta Steam; puede faltar si los jugadores no usan Steam.discord:— presente solo si Discord se ejecuta y su servidor lo lee.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
CREATE TABLE IF NOT EXISTS whitelist ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, identifier VARCHAR(64) NOT NULL, note VARCHAR(120) NULL, added_by VARCHAR(64) NULL, added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY u_identifier (identifier) );
Comprobación del lado del servidor (oxmysql)
-- Requires oxmysql. Add to fxmanifest: '@oxmysql/lib/MySQL.lua'
AddEventHandler('playerConnecting', function(name, setKickReason, deferrals)
local src = source
deferrals.defer()
deferrals.update('Verifying whitelist...')
local ids = {}
for _, id in ipairs(GetPlayerIdentifiers(src)) do table.insert(ids, id) end
-- Single scalar: any identifier approved?
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('Access denied. Apply at discord.gg/yourinvite')
end
end)
Comandos de calidad de vida del administrador (ejemplo)
RegisterCommand('wladd', function(src, args)
if src ~= 0 then return end -- console only for simplicity
local identifier = args[1]
if not identifier or not identifier:find(':') then
print('Usage: wladd identifierType:identifierValue')
return
end
local ok = MySQL.prepare.await('INSERT IGNORE INTO whitelist (identifier,note,added_by) VALUES (?, ?, ?)', {
identifier, 'manual add', 'console'
})
print(ok and ('Whitelisted: %s'):format(identifier) or 'Failed to add')
end, true)
RegisterCommand('wlrm', function(src, args)
if src ~= 0 then return end
local identifier = args[1]
local ok = MySQL.prepare.await('DELETE FROM whitelist WHERE identifier = ?', { identifier })
print(ok and ('Removed: %s'):format(identifier) or 'Failed to remove')
end, true)
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
identifier(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
license/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,
@Whitelisted). - Mantener Licencia Aprobada como segunda puerta si quieres ambas condiciones.
Mejores prácticas: mantener una #whitelist-requests 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
discord rolea 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
steam:. Preferirlicense:. - Falta el ID de Discord:El usuario debe tener Discord ejecutándose y su servidor debe estar configurado para leer
discord:; verificar la integración de Discord. licensecontralicense2: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
deferrals.update(...)mientras espera a DB; responda dentro de ~10–15 segundos. - Formato de identificador no coincidente:Asegúrate de pegar
type:valueexactamente (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 license: 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 steam: 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 identifierType:identifier (p.ej, license:...).
Mensajes de rechazo de copiar y pegar (use su marca)
- Basado en colas:
You’re not whitelisted yet. Apply in #whitelist-requests → discord.gg/yourinvite - Controlado por roles:
Your Discord account doesn’t have @Whitelisted. Join discord.gg/yourinvite and request access. - Mantenimiento:
Server is in Admin‑only mode for maintenance. Please try again later.
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
local whitelist = {
["steam:110000132456789"] = true,
["license:abc123def456789"] = true,
["discord:123456789012345678"] = true
}
AddEventHandler("playerConnecting", function(name, setKickReason, deferrals)
local player = source
local identifiers = GetPlayerIdentifiers(player)
local whitelisted = false
deferrals.defer()
for _, id in pairs(identifiers) do
if whitelist[id] then
whitelisted = true
break
end
end
if not whitelisted then
deferrals.done("Not whitelisted. Apply at: your-discord.gg/invite")
else
deferrals.done()
end
end)
