Speichere individuelle Haar- und Augenfarben je Charakter
All checks were successful
Deploy to production / deploy (push) Successful in 2m24s

This commit is contained in:
Torsten Schulz (local)
2026-11-04 16:54:33 +01:00
parent dd409a6a6a
commit bc7a0cb67a
10 changed files with 250 additions and 15 deletions

View File

@@ -0,0 +1,38 @@
# Dauerhafte Charakterfarben
`falukant_data.character` enthält `hair_color` und `eye_color` als `VARCHAR(7)`.
Die Sequelize- und API-Felder heißen `hairColor` und `eyeColor`.
Erlaubt sind sechsstellige Hex-Farben einschließlich `#`, z. B. `#69432d`.
Migration: `20261104000001-add-character-appearance.cjs`.
Im Backend-Verzeichnis mit `npm run db:migrate` ausführen, bevor der neue
Backend-Code startet. Die Migration wird hier nur in einer isolierten
Testdatenbank ausgeführt; die produktive Datenbank wird nicht verändert.
Die Migration vergibt für bestehende Charaktere einmalig Farben aus einer
Palette mit sieben Haar- und sechs Augenfarben. Bereits vorhandene Werte
bleiben erhalten, auch beim erneuten Ausführen der Migration. Ein separater
DB-Trigger vergibt Farben für neue Charaktere, einschließlich roher INSERTs
des Rust-Daemons für NPCs und Neugeborene. NULL-Werte bei Updates behalten die
bisherige Farbe. Andere explizite, gültige Hex-Farben sind ebenfalls zulässig.
Die Farben ändern sich beim Altern nicht automatisch. Vererbung und Ergrauen
sind noch nicht implementiert; die aktuelle Palette ist eine Spielverteilung.
Familie (Partner, Kinder, Liebschaften), Taufliste, Direktoren sowie politische
und kirchliche Amtsträger liefern die Farben an die vorhandene 3D-Anzeige.
Die Spielerdaten und das Dashboard liefern sie ebenfalls. Die 3D-Komponenten
verwenden die gespeicherten Farben nur in den markierten Haar-/Irisflächen.
Unmarkierte Altersmodelle und die 2D-Porträts behalten ihre Originaltexturen.
Der Modell-Editor bleibt eine Vorschau ohne Schreibzugriff auf Charakterdaten.
Prüfung mit einer ausdrücklich bereitgestellten, wegwerfbaren Datenbank:
```bash
TEST_DATABASE_URL='postgresql://…/yourpart_development_test' \
node --test tools/characterAppearance.test.mjs
```
Der Integrationstest prüft Bestandsdaten, wiederholte und teilweise manuell
vorbereitete Migrationen, beide DB-Trigger zusammen, rohe INSERTs,
Sequelize-Erstellung/-Updates, Farbvalidierung und Rollback. Er verwirft
das Schema `falukant_data` ausschließlich in `yourpart_development_test`.