Voraussetzungen
- Node.js 22 oder neuer
- Git
- Für einen eigenen Spielserver zusätzlich: ein FXServer-Artifact, ein kostenloser Cfx.re-License-Key und optional eine PostgreSQL- oder MySQL/MariaDB-Datenbank
Bauen und testen
Im Repository-Root:
npm install
npm run build # baut zuerst gta5os-core, dann alle übrigen Workspaces
npm test # Smoke-Tests aller Workspaces
Wer nur Ergebnis und Fehlerzeilen sehen möchte, nutzt die gefilterten Varianten npm run build:q und npm run test:q.
Weitere nützliche Skripte:
| Skript | Zweck |
|---|---|
npm run phase1:smoke |
Smoke-Tests aller Workspaces |
npm run phase5:load |
Deterministische Lastsimulation des Cores |
npm run phase5:backup |
Probe für Backup und Wiederherstellung |
npm run phase6:compat-esxqb |
Smoke-Tests der ESX-/QBCore-Kompatibilität |
Die Pakete liegen als npm-Workspaces unter packages/; die ausgelieferte Resource unter server/server-data/resources/[local]/gta5os_core.
Einen lokalen Server aufsetzen
Der Ordner server/ ist ein vollständiger FXServer-Workspace mit Startskripten.
- Lizenzschlüssel besorgen: bei Cfx.re (Keymaster) einen kostenlosen Server-License-Key erstellen.
- Vorlagen kopieren:
secrets.example.cfgnachsecrets.cfgundserver.example.cfgnachserver.cfg(beide im Ordnerserver/server-data/). Den Schlüssel trägst du nur in deiner lokalensecrets.cfgein. - Starten: unter Windows
start-local.cmd, unter Git Bash./start-local.sh, auf Linuxstart-linux.sh.
Die Startskripte bauen vor jedem Start Pakete und Resource. Schlägt der Build fehl, startet der Server bewusst nicht, denn ein Server mit altem Code würde einen falschen Testbefund liefern. Wer ohne Codeänderung schnell neu startet, kann den Build mit GTA5OS_SKIP_BUILD=1 überspringen.
Wichtig:
secrets.cfgund die persönlicheserver.cfggehören nie ins Repository. Beide sind per.gitignoreausgeschlossen.
Stimme im Spiel
Proximity-Voice läuft über YaCA und TeamSpeak 3. Spieler brauchen den TeamSpeak-3-Client mit dem YaCA-Plugin; der Server braucht einen TeamSpeak-Server mit Ingame-Channel. Die Zugangsdaten dafür liegen in einer lokalen, nicht versionierten Datei.
Datenbank
Ohne Datenbank läuft die Resource mit einem In-Memory-Speicher: alle Daten sind nach jedem Neustart weg. Für echte Persistenz verbindet man den SqlDataStore über Konvars:
set gta5os_db_dialect "postgres" # oder "mysql" (Standard)
set gta5os_db_host "127.0.0.1"
set gta5os_db_port "5432"
set gta5os_db_user "gta5os"
set gta5os_db_database "gta5os"
Das Passwort gehört in die nicht versionierte secrets.cfg. Bleibt gta5os_db_host leer, fällt die Resource automatisch auf den In-Memory-Speicher zurück.
Der Standard-Speichermodus cached lädt die Tabelle einmal beim Start in den Speicher und schreibt Änderungen gebündelt zurück. Wichtig dabei: Die Tabelle darf nicht von außen verändert werden, während der Server läuft, weil der Server solche Änderungen nicht kennt. Der Rückfallmodus heißt legacy und wird mit set gta5os_db_mode "legacy" gewählt.
Weiterlesen
- Architektur und Plugin-System, um die Struktur zu verstehen
- Pakete, um das passende Paket für eine Änderung zu finden
- Konventionen und Qualität vor dem ersten Beitrag