# XAseco XAseco ist ein Server-Controller für TrackMania Nations Forever. Er verwaltet lokale Rekorde, Dedimania-Weltrekorde, Karma/Votes, eine Track-Jukebox und vieles mehr direkt im Spielchat. Im Container wird die modifizierte Version **XAseco 1.16** verwendet, die für PHP 7.x angepasst wurde (Patches von Bueddel, Xymph, undef.de und reaby). ## Funktionsweise XAseco verbindet sich über XML-RPC mit dem TrackMania-Server und reagiert auf Spielereignisse (neue Rekorde, Spieler-Connects, Chat-Befehle usw.). Die Daten werden in einer eigenen MySQL-Datenbank gespeichert. ## TeamSpeak 3 Integration XAseco enthält ein Plugin (`plugin.teamspeak3.php`), das im Spiel ein Widget mit den aktuell verbundenen TeamSpeak-3-Nutzern anzeigt. Das Plugin ist **standardmäßig aktiviert** und verwendet ein eigenes Gateway, das im Container mitgeliefert wird (das Original-Gateway des Plugin-Entwicklers ist nicht mehr verfügbar). ### TS3-Server konfigurieren Die Konfiguration erfolgt über die Datei `data/xaseco/teamspeak3.xml`. Dort kann der eigene TeamSpeak-3-Server eingetragen werden: ```xml ts3.techniverse.net 1 9987 10011 30 http://assets.techniverse.net/tm/ts3gateway/gateway3.html http://assets.techniverse.net/tm/ts3gateway/ts3logo.jpg -64 45 ``` | Feld | Beschreibung | |------|-------------| | `server` | Hostname oder IP des TS3-Servers | | `serverid` | Virtuelle-Server-ID (meist `1`) | | `serverport` | Voice-Port des TS3-Servers (Standard: `9987`) | | `queryport` | ServerQuery-Port (Standard: `10011`) | | `defaultchannel` | Standard-Channel (leer = Server-Default) | | `subchannel` | Sub-Channel (optional) | | `channelpassword` | Channel-Passwort (optional) | | `update_interval` | Aktualisierungsintervall in Sekunden | | `helperURL` | URL zur Gateway-HTML-Seite (nicht ändern) | | `logoURL` | URL zum TS3-Logo im Widget (nicht ändern) | | `posx` / `posy` | Widget-Position im Spiel | > **Hinweis:** Standardmäßig ist der TS3-Server `ts3.techniverse.net` vorkonfiguriert. Zum Anpassen einfach nach dem ersten Start die Datei `data/xaseco/teamspeak3.xml` bearbeiten. Die Felder `helperURL` und `logoURL` verweisen auf das mitgelieferte Gateway und sollten nicht geändert werden. ## Konfiguration Die Konfiguration erfolgt ausschließlich über Umgebungsvariablen in der `.env`-Datei. Beim **ersten Start** (leeres XAseco-Volume) werden die Werte automatisch in die XML-Konfigurationsdateien eingetragen. ### Erforderliche Variablen | Variable | Beschreibung | Standard | |----------|-------------|----------| | `XASECO_MASTERADMIN_LOGIN` | Dein Spieler-Login (MasterAdmin mit allen Rechten) | *(muss gesetzt werden)* | | `XASECO_DB_PASSWORD` | Passwort für die XAseco-Datenbank | *(muss gesetzt werden)* | ### Optionale Variablen | Variable | Beschreibung | Standard | |----------|-------------|----------| | `XASECO_ENABLED` | XAseco aktivieren/deaktivieren | `true` | | `XASECO_DB_HOST` | Hostname des Datenbankservers | `mariadb` | | `XASECO_DB_NAME` | Name der XAseco-Datenbank | `xaseco` | | `XASECO_DB_USER` | Datenbank-Benutzername | `xaseco` | | `XASECO_DEDIMANIA_NATION` | Dedimania-Nation ([IOC-Code](https://en.wikipedia.org/wiki/List_of_IOC_country_codes), z.B. `DEU`, `AUT`, `CHE`) | `DEU` | | `XASECO_HEALTHCHECK` | Automatische Überwachung und Neustart bei Absturz | `true` | | `XASECO_HEALTHCHECK_INTERVAL` | Prüfintervall des Healthchecks in Sekunden | `60` | ### Automatisch übernommene Variablen Diese Werte werden aus der bestehenden Server-Konfiguration übernommen und müssen **nicht** separat gesetzt werden: | Quelle | Verwendung in XAseco | |--------|---------------------| | `SERVER_SA_PASSWORD` | SuperAdmin-Passwort für die XML-RPC-Verbindung | | `SERVER_XMLRPC_PORT` | XML-RPC-Port für die Verbindung zum TM-Server | | `SERVER_LOGIN` | Dedimania Server-Login | | `SERVER_LOGIN_PASSWORD` | Dedimania Server-Passwort | ## Datenbank XAseco verwendet eine **eigene Datenbank** im selben MariaDB-Container. Die Datenbank und der Benutzer werden beim ersten Start des MariaDB-Containers automatisch erstellt (über ein Init-Script). Das Datenbankschema (drei Tabellen-Dateien) wird beim ersten Start des tmserver-Containers automatisch importiert. ### Manueller Zugriff Falls nötig, kann die XAseco-Datenbank über den MariaDB-Root-Zugang administriert werden: ```bash docker exec -it tmserver-mariadb mysql -u root -p ``` ### Nachträgliche Installation (bestehende MariaDB) Das Init-Script (`assets/db/init-xaseco-db.sh`) wird von MariaDB nur beim **allerersten Start** (leeres `data/mariadb/`-Volume) ausgeführt. Wenn der MariaDB-Container bereits Daten enthält (z.B. weil er zuvor ohne XAseco lief), muss die Datenbank **einmalig manuell** erstellt werden: ```bash docker exec -it tmserver-mariadb mysql -u root -p -e " CREATE DATABASE IF NOT EXISTS xaseco CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS 'xaseco'@'%' IDENTIFIED BY 'DEIN_XASECO_DB_PASSWORT'; GRANT ALL PRIVILEGES ON xaseco.* TO 'xaseco'@'%'; FLUSH PRIVILEGES;" ``` Ersetze `DEIN_XASECO_DB_PASSWORT` durch den Wert von `XASECO_DB_PASSWORD` aus der `.env`-Datei. Das Tabellen-Schema wird anschließend beim nächsten Container-Start automatisch importiert, sofern das XAseco-Volume noch leer ist. ## Admin-System XAseco kennt drei Berechtigungsstufen: | Stufe | Beschreibung | |-------|-------------| | **MasterAdmin** | Volle Kontrolle (wird über `XASECO_MASTERADMIN_LOGIN` gesetzt) | | **Admin** | Erweiterte Befehle (ebenfalls über `XASECO_MASTERADMIN_LOGIN` gesetzt) | | **Operator** | Eingeschränkte Moderationsbefehle | Weitere Admins/Operatoren können nach dem ersten Start manuell in `data/xaseco/adminops.xml` eingetragen werden. ## Persistente Daten Alle XAseco-Daten werden im Volume `./data/xaseco/` gespeichert: - Konfigurationsdateien (`config.xml`, `localdatabase.xml`, `dedimania.xml`, ...) - Log-Datei (`aseco.log`) - Admin-/Operator-Listen (`adminops.xml`) ## Deaktivieren XAseco kann über die `.env`-Datei deaktiviert werden: ```env XASECO_ENABLED=false ``` Der TrackMania-Server läuft dann ohne Server-Controller. ## Healthcheck / Watchdog XAseco wird automatisch durch einen Watchdog-Prozess überwacht. Dieser erkennt Abstürze und verlorene Verbindungen (z.B. wenn das Overlay im Spiel verschwindet) und startet XAseco selbstständig neu. ### Funktionsweise Der Watchdog prüft regelmäßig (Standard: alle 60 Sekunden): 1. **PID-Check:** Läuft der XAseco-PHP-Prozess noch? 2. **Log-Check:** Enthält das XAseco-Log fatale Fehler oder Verbindungsabbrüche? 3. **XMLRPC-Check:** Ist der TM-Server noch erreichbar? Bei erkannten Problemen wird XAseco automatisch beendet und neu gestartet. Crash-Logs werden zur Fehleranalyse unter `data/xaseco/aseco_crash_.log` gesichert (max. 5 Dateien). ### Konfiguration | Variable | Beschreibung | Standard | |----------|-------------|----------| | `XASECO_HEALTHCHECK` | Watchdog aktivieren/deaktivieren | `true` | | `XASECO_HEALTHCHECK_INTERVAL` | Prüfintervall in Sekunden | `60` | ```env # Healthcheck deaktivieren XASECO_HEALTHCHECK=false # Prüfintervall auf 30 Sekunden verkürzen XASECO_HEALTHCHECK_INTERVAL=30 ``` > **Hinweis:** Der Watchdog ist standardmäßig aktiviert und erfordert keine zusätzliche Konfiguration. Bei bestehenden Installationen wird er nach dem nächsten Image-Update automatisch aktiv. ## Logs Die XAseco-Logdatei befindet sich unter: ``` ./data/xaseco/aseco.log ``` Bei Problemen ist dies die erste Anlaufstelle für die Fehlersuche. > **Hinweis:** Die XAseco-Logdatei wird automatisch per logrotate rotiert (max. 10 MB pro Datei, 5 rotierte Dateien). Alte Logs werden komprimiert als `aseco.log.1.gz`, `aseco.log.2.gz` usw. aufbewahrt. Siehe [Konfiguration – Log-Rotation](konfiguration.md#log-rotation). ## Chat-Befehle Nachfolgend eine Übersicht der wichtigsten Befehle, die im Spielchat verfügbar sind. Eine vollständige Liste aller Befehle findest du in der offiziellen Dokumentation unter: https://docs.xaseco.org/commands.php ### Hilfe & Info | Befehl | Beschreibung | |--------|-------------| | `/help` | Zeigt alle verfügbaren Befehle | | `/helpall` | Zeigt ausführliche Hilfe zu allen Befehlen | | `/xaseco` | Zeigt Infos über die XAseco-Version | | `/server` | Zeigt Infos über den Server | | `/plugins` | Zeigt Liste der aktiven Plugins | | `/time` | Zeigt aktuelle Serverzeit und Datum | ### Rekorde & Statistiken | Befehl | Beschreibung | |--------|-------------| | `/recs` | Zeigt alle lokalen Rekorde auf der aktuellen Strecke | | `/recs pb` | Zeigt deine persönliche Bestzeit | | `/recs new` | Zeigt neu gefahrene Rekorde | | `/recs live` | Zeigt Rekorde der Online-Spieler | | `/pb` | Zeigt deine persönliche Bestzeit auf der aktuellen Strecke | | `/dedirecs` | Zeigt Dedimania-Rekorde auf der aktuellen Strecke | | `/dedipb` | Zeigt deine persönliche Dedimania-Bestzeit | | `/dedistats` | Zeigt Dedimania-Streckenstatistiken | | `/best` | Zeigt deine besten Rekorde | | `/worst` | Zeigt deine schlechtesten Rekorde | | `/summary` | Zeigt eine Zusammenfassung aller deiner Rekorde | | `/stats` | Zeigt Statistiken des aktuellen Spielers | | `/wins` | Zeigt Siege des aktuellen Spielers | ### Rankings & Toplisten | Befehl | Beschreibung | |--------|-------------| | `/rank` | Zeigt deinen aktuellen Serverrang | | `/nextrank` | Zeigt den nächst besser platzierten Spieler | | `/top10` | Zeigt die 10 bestplatzierten Spieler | | `/top100` | Zeigt die 100 bestplatzierten Spieler | | `/topwins` | Zeigt die 100 siegreichsten Spieler | | `/toprecs` | Zeigt Top 100 der Rekord-Halter | | `/topsums` | Zeigt Top 100 der Top-3-Rekord-Halter | | `/active` | Zeigt die 100 aktivsten Spieler | | `/topclans` | Zeigt die 10 bestplatzierten Clans | ### Strecken & Jukebox | Befehl | Beschreibung | |--------|-------------| | `/track` | Zeigt Infos über die aktuelle Strecke | | `/nextmap` | Zeigt den Namen der nächsten Strecke | | `/playtime` | Zeigt, wie lange die aktuelle Strecke läuft | | `/list` | Listet Strecken auf dem Server (siehe `/list help`) | | `/list nofinish` | Strecken, auf denen du keinen Rang hast | | `/list newest` | Die neuesten Strecken | | `/list ` | Suche nach Strecken- oder Autorennamen | | `/jukebox` | Track-Jukebox (siehe `/jukebox help`) | | `/jukebox list` | Zeigt kommende Strecken | | `/jukebox <#>` | Fügt Strecke Nr. `<#>` aus `/list` hinzu | | `/jukebox drop` | Entfernt deine hinzugefügte Strecke | | `/add ` | Fügt eine Strecke direkt von TMX hinzu | | `/history` | Zeigt die 10 zuletzt gespielten Strecken | ### Karma & Voting | Befehl | Beschreibung | |--------|-------------| | `/karma` | Zeigt Karma der aktuellen Strecke | | `/++` | Positive Bewertung für die aktuelle Strecke | | `/--` | Negative Bewertung für die aktuelle Strecke | | `/helpvote` | Zeigt Infos zum Chat-Voting-System | | `/endround` | Startet Vote zum Beenden der aktuellen Runde | | `/replay` | Startet Vote zum Wiederholen der Strecke | | `/skip` | Startet Vote zum Überspringen der Strecke | | `/kick` | Startet Vote zum Kicken eines Spielers | | `/y` | Stimmt mit Ja bei einem laufenden Vote | | `/cancel` | Bricht deinen aktuellen Vote ab | ### Kommunikation | Befehl | Beschreibung | |--------|-------------| | `/pm ` | Sendet eine private Nachricht | | `/pmlog` | Zeigt Verlauf deiner privaten Nachrichten | | `/chatlog` | Zeigt Verlauf der letzten Chat-Nachrichten | | `/me` | Drückt eine Aktion/Emotion aus | | `/hi` | Sendet eine Hallo-Nachricht an alle | | `/bye` | Sendet eine Tschüss-Nachricht an alle | | `/gg` | Sendet "Good Game" an alle | | `/n1` | Sendet "Nice One" an alle | | `/brb` | Sendet "Be Right Back" an alle | | `/afk` | Sendet "Away From Keyboard" an alle | ### Spieleroptionen | Befehl | Beschreibung | |--------|-------------| | `/settings` | Zeigt deine persönlichen Einstellungen | | `/cps` | Setzt Checkpoint-Tracking für lokale Rekorde | | `/dedicps` | Setzt Checkpoint-Tracking für Dedimania-Rekorde | | `/mute ` | Chat eines Spielers stummschalten | | `/unmute ` | Stummschaltung aufheben | | `/mutelist` | Zeigt Liste der stummgeschalteten Spieler | | `/players` | Zeigt aktuelle Spieler-Liste (Nicks/Logins) | | `/ranks` | Zeigt Liste der Online-Ränge | | `/bootme` | Kickt dich selbst vom Server | ### Admin-Befehle (`/admin`) Diese Befehle sind nur für Admins und MasterAdmins verfügbar. | Befehl | Beschreibung | |--------|-------------| | `/admin help` | Zeigt alle Admin-Befehle | | `/admin helpall` | Zeigt ausführliche Hilfe zu allen Admin-Befehlen | **Server-Einstellungen:** | Befehl | Beschreibung | |--------|-------------| | `/admin setservername ` | Ändert den Servernamen | | `/admin setpwd ` | Ändert das Spieler-Passwort | | `/admin setspecpwd ` | Ändert das Zuschauer-Passwort | | `/admin setmaxplayers <#>` | Setzt maximale Spieleranzahl | | `/admin setmaxspecs <#>` | Setzt maximale Zuschauerzahl | | `/admin setgamemode ` | Setzt Spielmodus (ta/rounds/team/laps/stunts/cup) | **Strecken-Verwaltung:** | Befehl | Beschreibung | |--------|-------------| | `/admin nextmap` | Erzwingt nächste Strecke | | `/admin restartmap` | Startet aktuelle Strecke neu | | `/admin replaymap` | Wiederholt aktuelle Strecke (via Jukebox) | | `/admin endround` | Erzwingt Ende der aktuellen Runde | | `/admin add ` | Fügt Strecke von TMX hinzu | | `/admin addlocal ` | Fügt lokale Strecke hinzu | | `/admin remove <#>` | Entfernt Strecke aus der Rotation | | `/admin erasethis` | Entfernt aktuelle Strecke und löscht Datei | | `/admin shuffle` | Mischt die Streckenliste zufällig | | `/admin writetracklist` | Speichert aktuelle Streckenliste | | `/admin readtracklist` | Lädt Streckenliste aus Datei | **Jukebox:** | Befehl | Beschreibung | |--------|-------------| | `/admin dropjukebox <#>` | Entfernt eine Strecke aus der Jukebox | | `/admin clearjukebox` | Leert die gesamte Jukebox | | `/admin pass` | Genehmigt einen laufenden Vote | | `/admin cancel` | Bricht einen laufenden Vote ab | **Spieler-Moderation:** | Befehl | Beschreibung | |--------|-------------| | `/admin warn ` | Sendet eine Warnung an einen Spieler | | `/admin kick ` | Kickt einen Spieler vom Server | | `/admin kickghost ` | Kickt einen Ghost-Spieler | | `/admin ban ` | Bannt einen Spieler | | `/admin unban ` | Entbannt einen Spieler | | `/admin black ` | Setzt einen Spieler auf die Blacklist | | `/admin unblack ` | Entfernt einen Spieler von der Blacklist | | `/admin mute ` | Schaltet einen Spieler global stumm | | `/admin unmute ` | Hebt globale Stummschaltung auf | | `/admin forcespec ` | Erzwingt Zuschauer-Modus | | `/admin forceteam ` | Erzwingt Team-Zuordnung (Blue/Red) | **Admin-Verwaltung:** | Befehl | Beschreibung | |--------|-------------| | `/admin addadmin ` | Fügt einen neuen Admin hinzu | | `/admin removeadmin ` | Entfernt einen Admin | | `/admin addop ` | Fügt einen neuen Operator hinzu | | `/admin removeop ` | Entfernt einen Operator | | `/admin listmasters` | Zeigt MasterAdmin-Liste | | `/admin listadmins` | Zeigt Admin-Liste | | `/admin listops` | Zeigt Operator-Liste | **Rekorde & System:** | Befehl | Beschreibung | |--------|-------------| | `/admin delrec <#>` | Löscht einen bestimmten Rekord auf der aktuellen Strecke | | `/admin wall ` | Zeigt Popup-Nachricht für alle Spieler | | `/admin pm ` | Sendet private Nachricht an alle Admins | | `/admin server` | Zeigt detaillierte Server-Einstellungen | | `/admin shutdown` | Fährt XAseco herunter | | `/admin shutdownall` | Fährt Server und XAseco herunter | > **Tipp:** Eine vollständige Referenz aller Befehle (inkl. `/jfreu`-Befehle für erweiterte Moderation) findest du unter: https://docs.xaseco.org/commands.php