FiveM-Whitelist – Vollständige Anleitung (txAdmin, Skripte, DB)
Eine Whitelist in FiveM ist ein Zugriffskontrollmechanismus, der den Serverzugriff auf vorab genehmigte Spieler beschränkt, die anhand ihrer eindeutigen Kennungen (Rockstar-Lizenz, Steam-ID, Discord-ID usw.) zugeordnet sind. Nachfolgend finden Sie eine produktionsreife Anleitung mit Informationen zur integrierten Whitelist von txAdmin, Skriptmustern, Datenbankspeicherung und Zuverlässigkeitshinweisen.
TL;DR Optionsmatrix
| Modus | Wo einstellen | Was wird geprüft | Am besten für | Hinweise |
|---|---|---|---|---|
| Genehmigte Lizenz | txAdmin → Einstellungen → Spielerverwaltung → Whitelist-Modus | Lizenz: (Rockstar) | Die meisten Server | Einfach, zuverlässig; manuelle Genehmigungen oder Vorabgenehmigungen werden unterstützt |
| Discord-Mitglied | txAdmin (Discord verknüpft) | Zwietracht: ist Gildenmitglied | Gemeinschaften mit Schwerpunkt auf Zwietracht | Nicht-Discord-Benutzer blockiert |
| Discord-Rolle | txAdmin (Discord verknüpft) | Zwietracht: hat eine besondere Rolle | Rollenbasierter Zugriff (Spender, Mitarbeiter) | Kombinieren Sie mit Rollenautomatisierungen |
| Nur Administratoren | txAdmin | Nur Administratoren | Wartungs-/Entwicklungsnächte | Sperrt den Server effektiv, nicht empfohlen |
| Benutzerdefiniertes Skript | Lua/JS-Ressource | Alle gewünschten Kennungen | Granulare Regeln und UX | Benötigt Code + Wartung |
Empfehlung: Verwenden Genehmigte Lizenz für die Basislinie (jeder hat eine Rockstar-Lizenz), dann fügen Sie hinzu Discord-Rolle als zusätzliches Tor für Sonderebenen.
So aktivieren und bedienen Sie die Whitelist in txAdmin
Voraussetzungen
- txAdmin läuft (im Lieferumfang von FXServer enthalten).
- Für Discord-Modi: Discord-Integration konfiguriert (Bot eingeladen, Gilde/Rolle ausgewählt).
Whitelist aktivieren
- Offen txAdmin → Einstellungen → Player-Manager.
- Satz Whitelist-Modus zu einem von: Genehmigte Lizenz, Discord-Mitglied, Discord-Rolle, oder Nur Administratoren.
- Legen Sie eine Ablehnungsnachricht, zB:
Nicht auf der Whitelist. Bewerben Sie sich unter discord.gg/yourinvite - Speichern.
Spieler genehmigen (zwei Flows)
- Passiv (Warteschlange): Wenn ein nicht zugelassener Spieler versucht, beizutreten, erscheint eine Anfrage unter Whitelist. Mit einem Klick genehmigen/ablehnen.
- Aktiv (vorab genehmigt): Gehe zu Whitelist → Genehmigung hinzufügen und fügen Sie eine Kennung in das Formular ein
Typ:Wert, zBLizenz:110000112345678Dampf:11000010abcdef0Zwietracht:123456789012345678
Widerrufen
- Offen Spieler oder Whitelist und klicken Sie auf Widerrufen neben der Genehmigung.
Tipps
- Bevorzugen Lizenz Kennungen für den Basiszugriff (universell vorhanden).
- Behalten Sie Ihre Ablehnungsnachricht umsetzbar (Discord-Link + Grundregeln + Ticket-CTA).
- Für Mitarbeiter/Entwickler, Stapelanforderungen: zB muss sein
Lizenz+Discord-Rolle.
Details zur technischen Implementierung
Whitelists laufen während der Verbindungsaufschub Phase. Der Server überprüft den Kennungssatz des Spielers und akzeptiert oder lehnt ihn ab, bevor die Ressourcen geladen werden. Dadurch wird die Auslastung gering gehalten und nicht zugelassene Spieler frühzeitig blockiert.
Kennungstypen (Zuverlässigkeit)
Lizenz:(Rockstar) — stabil, an den Kauf des Spiels gebunden; empfohlener Primärschlüssel.Dampf:– nur vorhanden, wenn Steam ausgeführt wird; kann fehlen, wenn Spieler Steam nicht verwenden.Zwietracht:– nur vorhanden, wenn Discord ausgeführt wird und Ihr Server es liest.IP-Adresse:– dynamisch; für Telemetrie/Ratenbegrenzung verwenden, nicht für Identität.
Minimales Whitelist-Skript (UX-Aufschub + 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)
Verwenden Verzögerungen.Update um Fortschrittsmeldungen anzuzeigen, während Sie IDs und/oder eine Datenbank überprüfen. Dies reduziert falsche „Timeout“-Berichte.
Datenbankgesteuerte Whitelist (oxmysql, produktionsbereit)
Schema
CREATE TABLE IF NOT EXISTS Whitelist (ID INT UNSIGNED NOT NULL AUTO_INCREMENT, Kennung VARCHAR(64) NOT NULL, Hinweis VARCHAR(120) NULL, hinzugefügt_von VARCHAR(64) NULL, hinzugefügt_um TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (ID), UNIQUE KEY u_identifier (Kennung));
Serverseitige Prüfung (oxmysql)
-- Erfordert oxmysql. Zu fxmanifest hinzufügen: '@oxmysql/lib/MySQL.lua' AddEventHandler('playerConnecting', function(name, setKickReason, deferrals) local src = source deferrals.defer() deferrals.update('Whitelist wird überprüft...') local ids = {} for _, id in ipairs(GetPlayerIdentifiers(src)) do table.insert(ids, id) end -- Einzelner Skalar: Ist ein beliebiger Bezeichner genehmigt? 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('Zugriff verweigert. Bewerben Sie sich unter discord.gg/yourinvite') end end)
Admin-QoL-Befehle (Beispiel)
RegisterCommand('wladd', Funktion(src, args) wenn src ~= 0 dann returniere Ende -- der Einfachheit halber nur Konsole lokaler Bezeichner = args[1] wenn kein Bezeichner oder kein Bezeichner:find(':') dann drucke('Verwendung: wladd Bezeichnertyp:Bezeichnerwert') returniere Ende lokal ok = MySQL.prepare.await('INSERT IGNORE INTO whitelist (Bezeichner, Hinweis, hinzugefügt von) VALUES (?, ?, ?)', { Bezeichner, 'manuell hinzufügen', 'Konsole' }) drucke(ok und ('Whitelisted: %s'):format(Bezeichner) oder 'Hinzufügen fehlgeschlagen') Ende, true) RegisterCommand('wlrm', Funktion(src, args) wenn src ~= 0 dann returniere Ende lokaler Bezeichner = args[1] lokal ok = MySQL.prepare.await('DELETE FROM whitelist WHERE Kennung = ?‘, {Kennung}) drucken (ok und (‘Entfernt: %s’):format(Kennung) oder ‘Entfernen fehlgeschlagen’) Ende, wahr)
Für mysql-async, ersetzen
MySQL.scalar.awaitmitMySQL.Async.fetchScalarund der Parameterstil mit@param/?. Bevorzugen oxmysql für Leistung und warte auf Unterstützung.
Leistung
- Behalten Sie eine EINZIGARTIGER Index An
Kennung(siehe Schema). - Optional Aufwärmen eines Speichercaches beim Start und bei Änderungen; DB nur bei Cache-Fehlern treffen.
- Begrenzen Sie die Rate wiederholter fehlgeschlagener Verbindungsversuche um
Lizenz/IP.
Regeln für mehrere Kennungen
Einige Server erfordern mehrere IDs (z. B. sowohl Steam als auch Discord) für Mitarbeiterstufen. Beispielmuster:
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
Discord als Whitelist verwenden (kein benutzerdefinierter Code)
Wenn Ihre Community auf Discord läuft, verwenden Sie txAdmins Discord-Mitglied oder Discord-Rolle Modi:
- Verknüpfen Sie txAdmin mit Ihrer Discord-Gilde.
- Wählen Discord-Mitglied jedem Gildenmitglied zu erlauben, oder Discord-Rolle durch eine bestimmte Rolle zu sperren (zB
@Whitelisted). - Halten Genehmigte Lizenz als zweites Tor, wenn Sie beide Bedingungen wünschen.
Bewährte Methode: pflegen eine #Whitelist-Anfragen Kanal + leichtes Formular. Automatisieren Sie die Rollenzuweisung nach der Genehmigung über einen Bot oder Moderationsfluss.
FAXES: Ein Discord-Whitelist-System für FiveM
Integrationsideen
- Discord-Bots: Automatische Genehmigung, wenn ein Benutzer eine Bewerbung abschließt, Boosts durchführt oder sich anmeldet.
- Web-Panel: Mitarbeiter können Kennungen hinzufügen/entfernen, mit Prüfpfad.
- Bezahlte Stufen: gewähren
Discord-Rolleüber Ihren Shop (Tebex/Patreon) und lassen Sie den Zugriff über den Rollenmodus txAdmin erzwingen.
Fehlerbehebung und Fallstricke
- Der Player wird in den txAdmin-Anfragen nicht angezeigt: Stellen Sie sicher, dass die Whitelist im richtigen Profil aktiviert ist. Überprüfen Sie, ob der Player tatsächlich die Zurückstellungsphase erreicht hat (sehen Sie sich die Live-Konsole von txAdmin an).
- Steam-ID fehlt: Steam muss laufen; geben Sie Ihre Whitelist nicht ausschließlich auf
Dampf:. BevorzugenLizenz:. - Discord-ID fehlt: Der Benutzer muss Discord laufen haben und Ihr Server muss zum Lesen eingerichtet sein
Zwietracht:; Discord-Integration überprüfen. LizenzgegenLizenz2: Einige Frameworks zeichnen zwei Lizenzfelder auf. Stellen Sie sicher, dass Ihre Migrations-/DB-Abfragen beim Verschieben von Daten beide berücksichtigen.- Verzögerungszeitüberschreitungen: Immer anrufen
Verzögerungen.Update(...)während Sie auf DB warten; antworten Sie innerhalb von ca. 10–15 Sekunden. - Nicht übereinstimmendes Kennungsformat: Stellen Sie sicher, dass Sie einfügen
Typ:Wertgenau (Kleinbuchstaben, Doppelpunkt als Trennzeichen). - Hohe Verkehrsspitzen: Whitelist im Speicher zwischenspeichern, beim Start vorwärmen und DB-Aufrufe entprellen.
SEO-FAQ (Schema-fähiger Inhalt)
Was ist der beste Identifikator für die FiveM-Whitelist?
Der Rockstar Lizenz: ist der universellste und zuverlässigste; verwenden Sie ihn als Primärschlüssel.
Kann ich mich bei Discord ohne Codierung auf die Whitelist setzen lassen?
Ja. txAdmin unterstützt Discord-Mitglied Und Discord-Rolle Whitelist-Modi, sobald Discord verknüpft ist.
Benötige ich Steam für die Whitelist?
Nein. Viele Spieler nutzen Steam nicht. Vermeiden Sie es, Dampf: für den Basiszugriff obligatorisch.
Kann ich mehrere Prüfungen kombinieren (z. B. Lizenz + Discord-Rolle)?
Ja. Verwenden Sie den txAdmin-Rollenmodus Und Behalten Sie eine Lizenzprüfung in Ihrem benutzerdefinierten Skript oder Zulassungsablauf bei.
Wie kann ich Spieler vorab genehmigen?
txAdmin → Whitelist → Genehmigung hinzufügen, Paste identifierType:Kennung (z.B, Lizenz:...).
Kopieren und Einfügen von Ablehnungsnachrichten (verwenden Sie Ihre Marke)
- Warteschlangenbasiert:
Du bist noch nicht auf der Whitelist. Bewirb dich in #whitelist-requests → discord.gg/yourinvite - Rollenbegrenzt:
Ihr Discord-Konto steht nicht auf der @Whitelisted. Treten Sie discord.gg/yourinvite bei und fordern Sie Zugriff an. - Wartung:
Der Server befindet sich zur Wartung im Nur-Administrator-Modus. Bitte versuchen Sie es später erneut.
Abschluss
Eine FiveM-Whitelist validiert Spielerkennungen während der Verbindungsverzögerungsphase und blockiert nicht zugelassene Benutzer, bevor die Ressourcen geladen werden. Aktivieren Sie für die meisten Server Genehmigte Lizenz in txAdmin, optional Layer Discord-Rolle für Community Gating und verwenden Sie eine DB-gestützt Liste mit Caching für die Skalierung.
Anhang: Originales Minimalbeispiel (als Referenz)
-- server.lua lokale Whitelist = { ["steam:110000132456789"] = true, ["license:abc123def456789"] = true, ["discord:123456789012345678"] = true } AddEventHandler("playerConnecting", Funktion(Name, setKickReason, Verzögerungen) lokaler Spieler = Quelle lokale Kennungen = GetPlayerIdentifiers(Spieler) lokale Whiteliste = false Verzögerungen.defer() für _, ID in Paaren(Kennungen) mache wenn Whitelist[ID] dann Whitelisted = true unterbrechen Ende Ende wenn nicht Whitelisted dann Verzögerungen.done("Nicht Whitelisted. Bewerben Sie sich unter: your-discord.gg/invite") sonst Verzögerungen.done() Ende Ende)






