Risparmia oggi con 20% Usa il codice WELCOME al pagamento. WELCOME

FiveM Whitelist — Guida completa (txAdmin, script, DB)

Testare uno script gratuito?

Gli script gratuiti vanno bene per controlli rapidi. Per server in produzione, confronta pacchetti server completi o script a pagamento mantenuti, in base al framework e al caso d'uso.

Una whitelist in FiveM è un meccanismo di controllo degli accessi che limita l'accesso al server ai giocatori pre-approvati, identificati tramite i loro identificativi univoci (licenza Rockstar, ID Steam, ID Discord, ecc.). Di seguito è riportata una guida pronta per la produzione che copre la whitelist integrata di txAdmin, i pattern di script, l'archiviazione del database e le note sull'affidabilità.


TL;DR Matrice delle opzioni

ModalitàDove impostareCosa controllaIdeale perNote
Licenza approvatatxAdmin → Impostazioni → Gestione giocatori → Modalità whitelistlicenza: (Rockstar)La maggior parte dei serverSemplice, affidabile; supporta approvazioni manuali o pre-approvazioni
Membro di DiscordtxAdmin (collegato a Discord)discordia: è membro della gildaComunità incentrate su DiscordiaUtenti non Discord bloccati
Ruolo di DiscordtxAdmin (collegato a Discord)discordia: ha un ruolo specificoAccesso basato sui ruoli (donatore, personale)Combina con le automazioni dei ruoli
Solo amministratoretxAdminSolo amministratoriNotti di manutenzione/sviluppoBlocca efficacemente il server, non consigliato
Script personalizzatoRisorsa Lua/JSTutti gli identificatori che desideriRegole granulari e UXNecessita di codice + manutenzione

Raccomandazione: Utilizzo Licenza approvata per la base (tutti hanno una licenza Rockstar), quindi aggiungi Ruolo di Discord come cancello aggiuntivo per livelli speciali.


Come abilitare e utilizzare la whitelist in txAdmin

Prerequisiti

  • txAdmin in esecuzione (fornito con FXServer).
  • Per le modalità Discord: integrazione Discord configurata (bot invitato, gilda/ruolo selezionato).

Abilita la whitelist

  1. Aprire txAdmin → Impostazioni → Gestione giocatori.
  2. Impostato Modalità Whitelist a uno di: Licenza approvata, Membro di Discord, Ruolo di Discord, O Solo amministratore.
  3. Imposta un Messaggio di rifiuto, per esempio:
    Non nella whitelist. Fai domanda su discord.gg/yourinvite
  4. Salva.

Approva i giocatori (due flussi)

  • Passivo (coda): Quando un giocatore non approvato tenta di unirsi, viene visualizzata una richiesta sotto Lista biancaApprova/rifiuta con un clic.
  • Attivo (pre-approvazione): Vai a Whitelist → Aggiungi approvazione e incolla un identificatore nel modulo tipo:valore, per esempio
    • licenza:110000112345678
    • vapore:11000010abcdef0
    • discordia:123456789012345678

Revocare

  • Aprire Giocatori O Lista bianca e clicca Revocare accanto all'approvazione.

Suggerimenti

  • Prefer licenza identificatori per l'accesso di base (universalmente presenti).
  • Mantieni il tuo messaggio di rifiuto attuabile (link Discord + regole di base + CTA del ticket).
  • Per il personale/sviluppatori, requisiti di stack: ad esempio, deve essere licenza + ruolo di discordia.

Dettagli di implementazione tecnica

Le whitelist vengono eseguite durante differimento della connessione Fase. Il server esamina l'identificativo del giocatore e accetta o rifiuta prima del caricamento delle risorse. Questo mantiene basso il carico e blocca in anticipo i giocatori non approvati.

Tipi di identificatori (affidabilità)

  • licenza: (Rockstar) — stabile, legato all'acquisto del gioco; chiave primaria consigliata.
  • vapore: — presente solo se Steam è in esecuzione; può mancare se i giocatori non utilizzano Steam.
  • discordia: — presente solo se Discord è in esecuzione e il tuo server lo legge.
  • indirizzo IP: — dinamico; da utilizzare per telemetria/limite di velocità, non per l'identità.

Script minimo di whitelist (differimenti 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)

Utilizzo rinvii.aggiornamento per mostrare messaggi di avanzamento durante il controllo degli ID e/o di un database. Questo riduce i falsi report di "timeout".


Whitelist basata su database (oxmysql, pronta per la produzione)

Schema

CREA TABELLA SE NON ESISTE 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) );

Controllo lato server (oxmysql)

-- Richiede oxmysql. Aggiungi a fxmanifest: '@oxmysql/lib/MySQL.lua' AddEventHandler('playerConnecting', function(name, setKickReason, deferrals) local src = source deferrals.defer() deferrals.update('Verifica whitelist...') local ids = {} for _, id in ipairs(GetPlayerIdentifiers(src)) do table.insert(ids, id) end -- Singolo scalare: qualsiasi identificatore approvato? 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('Accesso negato. Candidati su discord.gg/yourinvite') end end)

Comandi di amministrazione QoL (esempio)

RegisterCommand('wladd', function(src, args) if src ~= 0 then return end -- solo console per semplicità local identifier = args[1] if not identifier or not identifier:find(':') then print('Utilizzo: 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 ('Inserito nella whitelist: %s'):format(identifier) or 'Impossibile aggiungere') 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 DOVE identificatore = ?', { identificatore }) print(ok and ('Rimosso: %s'):format(identificatore) or 'Impossibile rimuovere') end, true)

Per mysql-asincrono, sostituire MySQL.scalar.await con MySQL.Async.fetchScalar e lo stile del parametro con @param/?Preferire oxmysql per le prestazioni e attendere il supporto.

Prestazione

  • Mantieni un Indice UNICO SU identificatore (vedi schema).
  • Facoltativamente riscaldare una cache di memoria all'avvio e in caso di modifica; colpisce il DB solo in caso di cache miss.
  • Limita la frequenza dei tentativi di connessione ripetuti e falliti da parte di licenza/IP.

Regole multi-identificatore

Alcuni server richiedono più ID (ad esempio, sia Steam che Discord) per i livelli dello staff. Esempio di schema:

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

Utilizzo di Discord come Whitelist (nessun codice personalizzato)

Se la tua community funziona su Discord, usa txAdmin Membro di Discord O Ruolo di Discord modalità:

  • Collega txAdmin alla tua gilda Discord.
  • Scegliere Membro di Discord per consentire a qualsiasi membro della gilda, o Ruolo di Discord per assegnare un ruolo specifico (ad esempio, @Inserita nella whitelist).
  • Mantenere Licenza approvata come seconda porta se si desiderano entrambe le condizioni.

Buone pratiche: mantenere un #richieste di whitelist Canale + modulo leggero. Automatizza l'assegnazione dei ruoli dopo l'approvazione tramite un bot o un flusso di moderazione.

FAX: un sistema di whitelist Discord per FiveM


Idee di integrazione

  • Bot Discord: approvazione automatica quando un utente completa una domanda, aumenta la popolarità o si abbona.
  • Pannello web: il personale aggiunge/rimuove gli identificatori, con traccia di controllo.
  • Livelli a pagamento: concessione ruolo di discordia tramite il tuo negozio (Tebex/Patreon) e lascia che la modalità ruolo txAdmin imponga l'accesso.

Risoluzione dei problemi e insidie

  • Il lettore non viene visualizzato nelle richieste txAdmin: Assicurati che la whitelist sia abilitata nel profilo corretto; controlla che il giocatore abbia effettivamente raggiunto la fase di rinvio (guarda la console live di txAdmin).
  • ID Steam mancante: Steam deve essere in esecuzione; non impostare la tua whitelist esclusivamente su vapore:Preferire licenza:.
  • ID Discord mancante: L'utente deve avere Discord in esecuzione e il tuo server deve essere configurato per la lettura discordia:; verifica l'integrazione con Discord.
  • licenza contro licenza2: Alcuni framework registrano due campi di licenza; assicurati che le tue query di migrazione/DB prendano in considerazione entrambi quando sposti i dati.
  • Timeout di rinvio: Chiama sempre rinvii.aggiornamento(...) mentre attendi DB; rispondi entro circa 10–15 secondi.
  • Formato identificativo non corrispondente: Assicurati di incollare tipo:valore esattamente (carattere minuscolo, separatore due punti).
  • picchi di traffico elevati: Cache whitelist in memoria, preriscaldamento all'avvio e chiamate DB anti-rimbalzo.

FAQ SEO (contenuto pronto per Schema)

Qual è il miglior identificatore per la whitelist FiveM?
La rockstar licenza: è il più universale e affidabile; usalo come chiave primaria.

Posso inserire Discord nella whitelist senza dover scrivere codice?
Sì. txAdmin supporta Membro di Discord E Ruolo di Discord modalità nella whitelist una volta collegato Discord.

Ho bisogno di Steam per la whitelist?
No. Molti giocatori non usano Steam; evita di farlo vapore: obbligatorio per l'accesso di base.

Posso combinare più controlli (ad esempio, licenza + ruolo Discord)?
Sì. Utilizza la modalità ruolo txAdmin E conserva un controllo della licenza nel tuo script personalizzato o nel flusso di ammissione.

Come posso pre-approvare i giocatori?
txAdmin → Whitelist → Aggiungi approvazione, impasto identificatoreType:identificatore (per esempio, licenza:...).


Copia e incolla i messaggi di rifiuto (usa il tuo marchio)

  • Basato su coda: Non sei ancora nella whitelist. Fai domanda in #whitelist-requests → discord.gg/yourinvite
  • Ruolo-gated: Il tuo account Discord non è abilitato all'accesso tramite @Whitelist. Iscriviti a discord.gg/yourinvite e richiedi l'accesso.
  • Manutenzione: Il server è in modalità solo amministratore per manutenzione. Riprova più tardi.

Conclusione

Una whitelist FiveM convalida gli identificativi dei giocatori durante la fase di rinvio della connessione e blocca gli utenti non approvati prima del caricamento delle risorse. Per la maggior parte dei server, abilitare Licenza approvata in txAdmin, facoltativamente strato Ruolo di Discord per l'accesso alla comunità e utilizzare un Supportato da DB elenco con memorizzazione nella cache per la scalabilità.


Appendice: Esempio minimo originale (per riferimento)

-- 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("Non whitelisted. Candidati su: your-discord.gg/invite") else deferrals.done() end end)
Luca
Luca

Mi chiamo Luke, sono un giocatore e amo scrivere di FiveM, GTA e giochi di ruolo. Gestisco una community di gioco di ruolo e ho circa 10 anni di esperienza nell'amministrazione di server.

Articoli: 436

Lascia una risposta