add custom game data overrides
build container / build (push) Failing after 5m13s

This commit is contained in:
2026-11-01 16:18:38 +01:00
parent ea8e76a6b7
commit 1ccf4a760b
7 changed files with 459 additions and 1 deletions
+46
View File
@@ -135,6 +135,52 @@ https://adventure.land. Die Texte liegen in `docker/attribution/en.js` und
Auch dieser Patch bricht den Build ab, wenn die Upstream-Vorlage nicht mehr
passt.
`docker/patch-custom-game.js` hakt den Loader für `files/custom/game.js` in
Backend und Game-Server ein und macht die Lone-Wolf-Raten datengetrieben (siehe
„Spieldaten anpassen“). Fehlt ein Anker, bricht der Build ebenfalls ab.
## Spieldaten anpassen (`files/custom/game.js`)
Werte bestehender Elemente und neue Elemente lassen sich ohne Quelltextänderung
über `files/custom/game.js` setzen. Die Datei wird in beide Spielcontainer als
`/app/custom/game.js` gemountet und beim Start gelesen; Änderungen brauchen nur
einen Neustart, keinen Rebuild:
```sh
docker compose restart al-backend al-game
```
Aufbau (alle Angaben optional):
- `items`, `monsters`, `npcs`, `maps`, `sets`, `craft`, `skills`, `conditions`,
`classes`, `levels`, `upgrades`, `compounds`, `multipliers`, `titles`,
`tokens`, `dismantle`: Objekte werden tief zusammengeführt, Arrays ersetzt.
Neue IDs sind erlaubt, wenn sie eine vorhandene Grafik aus
`design/dimensions.js` nutzen (Items und Monster brauchen ein `skin`).
Neue Karten gehen nicht: ihre Geometrie liegt in MongoDB (`MP_*`).
- `drops`: `{ main: [[0.001, "item_id"]] }` hängt Zeilen an die Tabelle an.
- `gold`: überschreibt `drops.gold`, z. B. `{ base: 0.8 }`.
- `phrases`: überschreibt Anzeigetexte. `"*"` gilt für alle Sprachen, ein
Sprachcode (`de`, `en`, ...) hat Vorrang. Nötig, wenn sich Zahlen in einem
Tooltip ändern.
- `apply(game)`: Funktion für Sonderfälle, läuft nach dem Zusammenführen.
Beim Start loggen beide Container `custom-game: loaded ...`; neue IDs stehen
als `(new: ...)` dabei. Unbekannte Top-Level-Schlüssel, unbekannte Drop-Tabellen,
fehlende Items und fehlende Grafiken brechen den Start mit einer klaren Meldung
ab, statt das Spiel halb gepatcht zu starten.
Enthaltenes Beispiel: Der Buff „Lone Wolf“ gibt 10× XP statt 3×. Die
Multiplikatoren liest der Game-Server aus der Condition-Definition (Patch in
`docker/patch-custom-game.js`), der Tooltip-Text kommt aus `phrases`. Die Datei
ist versioniert (`files/custom/`), `files/db` bleibt von Git ausgenommen.
Grenzen: Alles, was in `design/*.js` als Datum steht, ist überschreibbar.
Konstanten, die im Code stehen (z. B. andere Encouragement-Raten), brauchen
weiterhin einen Patch wie den für Lone Wolf. Endet ein Season-Event zur
Laufzeit, können eventmodifizierte Monsterfelder auf den Stand vor der
Custom-Datei zurückgesetzt werden; dann den Game-Server neu starten.
## Gut zu wissen
- **E-Mail-Verifizierung:** AWS SES ist nicht konfiguriert. Beim Registrieren