SourceMod bietet die Unterstützung an, Admins per SQL zu laden und zu verwalten. Zur Zeit wird MySQL und SQLite unterstützt. Das kann bei einer großen Anzahl von Admins sehr vorteilhaft sein, um sie mit externen Tools zu verwalten oder um die Admins auf mehreren Servern zu teilen.
Dieser Artikel beschreibt, wie man einen Server einrichtet um Admins per SQL zu nutzen. Es wird kein Wissen über SQL für die einfache Administration benötigt. Jedoch bei Verwendung dieser Funktion, stellt Sourcemod keine einfache Funktionalität für die volle SQL-Steuerung zur Verfügung. Sie benötigen eine zusätzliche Software oder sie müssen SQL lernen, wenn sie eine größere Funktionalität benötigen.
Verständlicher: Der Funktionsumfang für die Verwaltung von Admins ist minimal. Selbst Mani hat einen größern Umfang von Befehlen angeboten.
Benötigt:
Wenn noch keine Datenbank für den Zugriff existiert, sollte jetzt eine angelegt werden.
Das SQL-Script im Verzeichnis configs/sql-init-scripts/mysql/create_admin.sql
muss ausgeführt werden. Hierfür eignet sich phpMyAdmin sehr gut.
Als nächstes muss die Datei configs/databases.cfg
bearbeitet werden. Es existiert bereits eine Sektion „default“. Diese kann bearbeitet werden oder wenn nötig können Admins mit der Sektion „admins“ separiert werden. Dadurch können Plugins eine andere Datenbank nutzen als die Adminverwaltung.
Ausgefüllt werden müssen die Felder: „driver“, „database“, „user“ und „pass“.
Beispiel: Code: "default" { "driver" "mysql" "host" "localhost" "database" "sourcemod" "user" "myaccount" "pass" "mypassword" }
Sourcemod vertreibt eine vorgefertigte Datenkank mit allen erstellten Admin-Tabellen. Wenn sie die Datenbank manuell erstellen oder Tabellen zu einer bereits existierenden Datenbank hinzufügen möchten, verwenden sie den Inhalt vom „configs/sql-init-scripts/sqlite/create_admins.sql“ Script.
Kopieren sie die ausführbare Datei configs/sql-init-scripts/admins-sqlite.sq3
des Sourcemod-Pakets auf den Server in das Verzeichnis data/sqlite
. Dann fügen sie eine Sektion zur Datei configs/databases.cfg
wie folgt hinzu:
"admins" { "driver" "sqlite" "database" "admins-sqlite" }
Sie können sich aussuchen die Datenbank-Datei umzubenennen oder anstelle eine Datei als Standard-Datenbank zu nutzen.
Standardmäßig sind alle SQL-Plugins im Verzeichnis „plugins/disabled“ enthalten. Sie werden Standardmäßig nicht geladen. Um Plugins zu aktivieren, verschieben sie sie in das übergeordnete Verzeichnis „plugins“.
Sie können gewöhnlich das Plugin „sql-admin-manager.smx“ immer aktivieren. Dieses Plugin fügt ein paar nützliche Befehle für eine sehr einfache Admin-Verwaltung hinzu.
Es kann jedoch nur eins dieser beiden Plugins aktiviert werden.
Dieses Plugin ist Ideal für kleine und mittelgroße Datenbanken ohne große Verbindungsverzögerung. Es lädt die komplette Admin-Datenbank beim laden einer Map oder wann immer eine Aktualisierung angefordert wird. Wenn sie jedoch eine ernste Datenbankverzögerung haben oder sie in der Lage sein wollen Admins hinzuzufügen, bearbeiten und zu entfernen ohne auf den anderen Servern einen Mapchange oder eine manuelle Aktualisierung zu machen, ist dieses Plugin nichts für sie.
Pro: Ein sehr einfaches Plugin ohne eine großen Umfang.
Kontra: Gameserver werden blockiert, wenn der Chache aktualisiert wird (Mapladen oder bei Verwendung von „sm_reloadadmins“). Beim bearbeiten, hinzufügen oder entfernen sind Änderungen solange nicht sichtbar, bis der Cache aktualisiert wurde.
Das Plugin ist komplett „threaded“ und viel mehr komplex. Deswegen ist es experimentell, auch wenn es schon gut funktioniert. Es speichert alle Gruppen und Außerkraftsetzungs-Informationen „override information“ zwischen. Admin-Abfragen sind dynamisch.
Pro: Eine langsame bzw. fehlerhafte Datenbankverbindung blockiert nie den Server. Beim Hinzufügen, Entfernen und Bearbeiten von Admins treten die Veränderungen in Kraft, wenn der Spieler den Server betritt.
Kontra: Es ist sehr komplex und daher nicht belanglos für Benutzerdefinierte Veränderungen. Es hat auch ein unerwartetes Verhalten (z.B. „sm_reloadadmins“ wird eine leichte Verzögerung haben, weil das Plugin „multi-threaded“ ist).
Alle Befehle setzen den „root admin flag“ voraus. Folgende Schlüssel werden werden verwendet:
Anmerkung: Werte, die Leerzeichen enthalten müssen mit Anführungszeichen eingeschlossen werden. Kommt ein Doppelpunkt vor (SteamID), muss dieser Wert auch mit Anführungszeichen eingeschlossen werden.
Befehl: sm_sql_addadmin
Format: <alias> <authtype> <identity> <flags> [password]
Beschreibung: Fügt einen neuen Eintrag in die Tabelle sm_admins hinzu. Der alias kann irgend ein Wert sein, um den Spieler zuordnen zu können.
Befehl: sm_sql_deladmin
Format: <authtype> <identity>
Entfernt einen Admin.
Befehl: sm_sql_addgroup
Format: <name> <flags> [immunity]
Beschreibung: Fügt eine neue Gruppe mit spezifizierten „Flags“ und Immunität hinzu.
Befehl: sm_sql_delgroup
Format: <name>
Beschreibung: Entfernt eine Gruppe. Anführungszeichen sind Optional, solange der Name gleiche Zeichen hat.
Befehl: sm_sql_setadmingroups
Format: <authtype> <identity> [group1] … [group N]
Beschreibung: Legt die Gruppe des Admins fest. Die Vertretungsreihenfolge ist die Reihenfolge der spezifizierten Gruppen.
Beispiel: sm_sql_setadmingroups steam „STEAM_X:X:XXXXXX“ „Full Admins“
Q: Can I use admin-sql and admin-flatfile at the same time? A: Yes. The data will be merged together in SourceMod's cache.
Q: Can I use both the threaded and prefetch SQL plugins at the same time? A: No.
Q: Can duplicate groups/admins be in the flat files and the SQL database? A: Yup. They will be merged safely.
Frage: Kann ich admin-sql und admin-flatfile zur gleichen Zeit nutzen? Antwort: Ja, die Daten werden im Zwischenspeicher von Sourcemod zusammengefügt.
Frage: Kann ich beide Plugins (threaded Plugin und prefetch SQL Plugin) zur gleichen Zeit nutzen? Antwort: Nein
Frage: Können Duplikate von Gruppen/Admins in der Admin-Flat-File und der SQL-Datenbank sein? Antwort: Ja, sie werden vorsichtig zusammengefügt.
Anfangs hatte ich mit der Einrichtung so meine Probleme. Ich konnte keine Verbindung zur Datenbank aufbauen.
Konsole:
[SM] Could not connect to the database.
Error-Log:
Could not connect to database "default": [2002]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Ich habe dann einfach einen symbolischen Link erzeugt:
ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
Wo sich die Datei mysqld.sock befindet, kann man in der Datei /etc/mysql/my.cnf nachsehen. Nachdem ich den Link erzeugt habe, klappte auch die Verbindung zur Datenbank.