6.7 KiB
Falukant: Übergabedokument für den externen Daemon
Zweck
Dieses Dokument ist die technische Übergabe an den externen Daemon, der nicht Teil dieses Projekts ist.
Es beschreibt:
- welche Daten der Daemon lesen muss
- welche Regeln er anwenden soll
- welche Felder er zurückschreiben muss
- welche Ereignisse und Nebenwirkungen erwartet werden
Die fachlichen Regeln selbst stehen in:
Die lokale technische Datenbasis dieses Projekts steht in:
Architekturgrenze
Wichtig:
- dieses Backend hält die Datenstruktur und liefert Family-/UI-Daten
- der eigentliche Tick-Lauf für Kosten, Ansehen, Ehezufriedenheit und Kinder passiert im externen Daemon
- der externe Daemon ist damit zuständig für die periodische Spiellogik
Dieses Projekt ist nicht zuständig für:
- die Scheduler-Ausführung
- Tick-Zeitpunkte
- operative Daemon-Laufzeit
Datenquelle
Der externe Daemon arbeitet auf folgenden Tabellen:
falukant_data.relationshipfalukant_data.relationship_statefalukant_data.characterfalukant_data.child_relationfalukant_data.falukant_userfalukant_type.relationshipfalukant_type.title
Optional später:
- Notification-Tabellen
- Frömmigkeits- oder Kirchen-bezogene Tabellen
Mindestdatensatz pro Tick
Für jede aktive Liebschaft muss der Daemon laden:
relationship.idrelationship.character1_idrelationship.character2_idrelationship_type.trrelationship_state.lover_rolerelationship_state.affectionrelationship_state.visibilityrelationship_state.discretionrelationship_state.maintenance_levelrelationship_state.status_fitrelationship_state.monthly_base_costrelationship_state.months_underfundedrelationship_state.activerelationship_state.acknowledgedrelationship_state.last_daily_processed_atrelationship_state.last_monthly_processed_at
Zusätzlich pro beteiligter Figur:
character.idcharacter.user_idcharacter.gendercharacter.birthdatecharacter.reputationcharacter.title_of_nobility
Zusätzlich für Geld:
falukant_user.idfalukant_user.money
Zusätzlich für Ehekontext:
- aktive Beziehung vom Typ
married,engagedoderwooing relationship_state.marriage_satisfaction
Zusätzlich für Kinderprüfung:
- bestehende
child_relationfür dieselben Eltern
Pflichtlogik Daily Tick
Der externe Daemon muss täglich:
- Sichtbarkeit anpassen
- Diskretion anpassen
- Ehezufriedenheit anpassen
- Ansehen anpassen
- Skandalchance prüfen
- Zustände speichern
- optionale Benachrichtigung oder Log-Einträge erzeugen
Daily Input
- alle aktiven
lover-Beziehungen - zugehörige Ehebeziehung, falls vorhanden
- Standesgruppe
- das jüngere Alter der beiden Beteiligten
minAge
Daily Output
Rückzuschreiben:
relationship_state.visibilityrelationship_state.discretionrelationship_state.marriage_satisfactionder Ehebeziehungcharacter.reputationrelationship_state.last_daily_processed_at
Optional:
- Notification
- Ereignislog
Pflichtlogik Monthly Tick
Der externe Daemon muss monatlich:
- Monatskosten berechnen
- Geld abbuchen
- Unterversorgung behandeln
- Kinderchance prüfen
- ggf. Kind anlegen
- Folgen auf Ansehen und Ehe anwenden
- Zustände speichern
Monthly Output
Rückzuschreiben:
falukant_user.money- Geldfluss-Log
relationship_state.months_underfundedrelationship_state.affectionrelationship_state.discretionrelationship_state.visibilityrelationship_state.last_monthly_processed_at- ggf.
child_relation - ggf. neuer Kind-Charakter
Formeln
Die verbindlichen Regeln und Formeln kommen aus:
Der externe Daemon soll insbesondere exakt übernehmen:
- Standesgruppen
- Monatskostenformel
- Unterversorgungsfolgen
- Ehezufriedenheitslogik
- Reputationslogik
- Altersmalus bei zu jungen Liebschaften
- Sichtbarkeits- und Diskretionslogik
- Skandalchance
- Kinderwahrscheinlichkeit
Idempotenz
Der externe Daemon muss idempotent arbeiten.
Pflicht:
- Daily Tick nie zweimal für denselben Ingame-Tag auf dieselbe Beziehung anwenden
- Monthly Tick nie zweimal für denselben Ingame-Monat auf dieselbe Beziehung anwenden
Pflichtfelder dafür:
last_daily_processed_atlast_monthly_processed_at
Transaktionsanforderungen
Folgende Monthly-Vorgänge müssen atomar laufen:
- Geldabbuchung
- Statusänderung der Liebschaft
- Kind-Erzeugung
- Folgeänderung an Ansehen oder Ehe
Empfehlung:
- pro verarbeiteter Beziehung eine DB-Transaktion
Kind-Erzeugung
Bei erfolgreicher Monatsprüfung auf Kind:
- neues Kind in
falukant_data.characteranlegen - neue
child_relationanlegen - Felder setzen:
birth_context = loverlegitimacy = hidden_bastardpublic_known = false
Wenn der Daemon Kinder nicht selbst anlegen soll, muss er stattdessen ein klar definiertes Create-Event an dieses Backend oder an ein anderes Backend-Modul senden. Standardempfehlung ist aber direkte DB-Erzeugung im Daemon.
Gleichbehandlung der Geschlechter
Der externe Daemon muss dieselben Regeln für männliche und weibliche Spielfiguren anwenden.
Das betrifft:
- Kosten
- Reputationswirkung
- Ehezufriedenheit
- Skandalrisiko
- Status- und Sichtbarkeitslogik
Unterschiedlich ist nur die biologische Kinderentstehung im aktuellen Modell.
Was dieses Backend dafür bereitstellt
Dieses Projekt stellt aktuell bereit:
- Datenstruktur für
relationship_state - Datenstruktur für
child_relation-Erweiterungen - Family-API mit lesbaren Zuständen
Später kann dieses Backend zusätzlich bereitstellen:
- Komfort-Endpunkte für Lover-Aktionen
- Admin-/Debug-Ansichten
- eventuelle Helper-Endpoints für den Daemon
Erwartete externe Deliverables
Damit die externe Daemon-Umsetzung vollständig ist, werden dort mindestens benötigt:
- Daily-Tick-Job
- Monthly-Tick-Job
- SQL- oder ORM-Zugriff auf die Falukant-Tabellen
- saubere Transaktionslogik
- Schutz gegen doppelte Verarbeitung
- Logging oder Monitoring für Tick-Fehler
Definition of Done für die Übergabe
Die Übergabe an den externen Daemon gilt als vollständig, wenn:
- Datenfelder und Tabellen eindeutig definiert sind
- Daily- und Monthly-Inputs beschrieben sind
- Daily- und Monthly-Outputs beschrieben sind
- die verbindliche Fachlogik referenziert ist
- Idempotenz- und Transaktionsanforderungen klar sind
- Kinder aus Liebschaften technisch beschrieben sind