9.5 KiB
Falukant: Schuldturm und Pfändung - Daemon-Spezifikation
Dieses Dokument beschreibt die Umsetzung des Schuldturm-Systems im externen Daemon.
Wichtig:
- Die projektseitigen DB-Felder, API-Erweiterungen, UI-Warnungen und Aktionssperren sind bereits umgesetzt.
- Der Daemon ist die führende Quelle für:
- Verzugstage
- Eintritt in den Schuldturm
- Pfändung und Verwertung
- soziale Folgen
- Freilassung
1. Bereits vorhandene Datenbasis
Bereits im Projekt vorhanden:
falukant_data.creditfalukant_data.debtors_prismfalukant_data.user_house- inkl.
household_tension_score - inkl.
household_tension_reasons_json
- inkl.
- Familien-/Liebschaftsdaten in:
falukant_data.relationshipfalukant_data.relationship_statefalukant_data.child_relation
Bereits erweitert:
debtors_prism.statusdebtors_prism.entered_atdebtors_prism.released_atdebtors_prism.debt_at_entrydebtors_prism.remaining_debtdebtors_prism.days_overduedebtors_prism.reasondebtors_prism.creditworthiness_penaltydebtors_prism.next_forced_actiondebtors_prism.assets_seized_jsondebtors_prism.public_known
Es sind für den Daemon derzeit keine weiteren DB-Änderungen nötig.
2. Grundregel
Ein Charakter kommt in den Schuldturm, wenn:
- mindestens ein aktiver Kredit offen ist
- fällige Kreditbedienung ausbleibt
- und
days_overdue >= 3
Der Daemon prüft dies im Daily-Tick.
3. Zustände
debtors_prism.status verwendet mindestens:
delinquentimprisonedreleased
Bedeutung:
delinquent: Kreditverzug, aber noch nicht im Schuldturmimprisoned: im Schuldturm, Verwertung läuftreleased: historischer abgeschlossener Fall
4. Daily-Tick
Der Daily-Tick prüft pro Falukant-Nutzer:
- aktive Kredite
- verbleibende Schuld
- geleistete Bedienung seit letztem Tick
- neue Verzugstage
- Schuldturm-Eintritt
- laufende soziale Folgen
- Verwertungsschritt
4.1 Verzugstage
Regel:
- wenn offene Schuld vorhanden und fällige Bedienung ausbleibt:
days_overdue += 1
- wenn Kreditpflicht erfüllt wurde:
days_overdue = 0- falls nicht im Schuldturm
Wenn noch kein aktiver debtors_prism-Eintrag existiert:
- bei erstem Verzug
debtors_prismanlegen mitstatus = 'delinquent'days_overdue = 1remaining_debt = aktuelle offene Schuldnext_forced_action = 'reminder'
4.2 Warnstufen
Bei Verzug:
- Tag 1:
next_forced_action = 'reminder'- Event
falukantUpdateDebtmitreason: 'delinquency'
- Tag 2:
next_forced_action = 'final_warning'- Event
falukantUpdateDebtmitreason: 'delinquency'
- Tag 3:
- Schuldturm-Eintritt
Für Warnstufen senden:
falukantUpdateDebt- zusätzlich
falukantUpdateStatus
5. Eintritt in den Schuldturm
Bei days_overdue >= 3:
status = 'imprisoned'entered_at = now()released_at = nulldebt_at_entry = aktuelle offene Schuldremaining_debt = aktuelle offene Schuldreason = 'credit_default'creditworthiness_penalty += 45next_forced_action = 'asset_seizure'public_known = true
5.1 Sofortfolgen bei Eintritt
Einmalig anwenden:
- Reputation deutlich senken
- Empfehlung:
-12
- Empfehlung:
marriage_satisfactionsenken- Empfehlung:
-10
- Empfehlung:
household_tension_scoreerhöhen- Empfehlung:
+15
- Empfehlung:
household_tension_reasons_jsonumdebtorsPrisonergänzen
Zusätzlich:
- aktive Liebhaber/Mätressen sichtbar destabilisieren
- mindestens
affection -= 4
- mindestens
- Kreditaufnahme und aktive Falukant-Aktionen bleiben projektseitig bereits gesperrt
Bei Eintritt senden:
falukantUpdateDebtreason: 'debtors_prison_entered'
falukantUpdateStatusfalukantUpdateFamilyreason: 'daily'
falukantHouseUpdatefalukantBranchUpdate
6. Verwertung / Pfändung
Die Verwertung läuft nicht alles auf einmal, sondern schrittweise pro Tick.
Reihenfolge:
- freies Geld
- Fahrzeuge
- Waren / Lagerbestände
- Haus
- Niederlassungen
Ziel:
remaining_debtschrittweise senken- Fortschritt im UI sichtbar machen
6.1 Geld
Wenn falukant_user.money > 0:
- direkt zur Schuld tilgen
remaining_debt -= eingezogener_betrag
Events:
falukantUpdateDebtreason: 'asset_seizure'
falukantUpdateStatus
6.2 Fahrzeuge
Verkaufe zuerst:
- freie Fahrzeuge
- dann weniger wertvolle Typen
- keine Fahrzeuge in aktiven Transporten im selben Tick anfassen, falls technisch problematisch
Erlös:
- Empfehlung:
vehicle_type.cost * condition_factor * 0.55
Zusätzlich in assets_seized_json protokollieren:
- Typ
- Anzahl
- Erlös
Events:
falukantUpdateDebtreason: 'vehicle_liquidation'
falukantUpdateStatus
6.3 Waren / Lager
Verwertbare Güter:
- Lagerbestände
- Inventar
- handelbare Waren
Erlös:
- Empfehlung: Marktwert mit Abschlag von
35% bis 50%
Events:
falukantUpdateDebtreason: 'asset_seizure'
falukantUpdateStatusfalukantBranchUpdate
6.4 Haus
Wenn Restschuld nach Geld/Fahrzeugen/Waren weiter hoch ist:
- Haus pfänden
- Spieler auf niedrigeres Haus oder Minimalhaus zurücksetzen
- Dienerschaft reduzieren
household_ordersenken
Events:
falukantUpdateDebtreason: 'house_seizure'
falukantHouseUpdatefalukantUpdateStatusfalukantUpdateFamilyreason: 'daily'
6.5 Niederlassungen
Wenn weiter nicht gedeckt:
- Niederlassungen schließen
- zuerst niedrige Stufe / niedriger Wert
- Hauptniederlassung nur als letzter Schritt
Events:
falukantUpdateDebtreason: 'branch_closure'
falukantBranchUpdatefalukantUpdateStatus
7. Laufende soziale Folgen im Schuldturm
Solange status = 'imprisoned':
- täglicher Reputationsmalus
- Empfehlung:
-2
- Empfehlung:
- zusätzliche
creditworthiness_penalty += 1pro Tag marriage_satisfaction -= 1household_tension_score += 2
Wenn aktive Liebschaften bestehen:
affection -= 2- bei niedriger Zuneigung oder hoher Sichtbarkeit kann Beziehung enden
Empfohlene Absprungregel:
- wenn
affection <= 30odermonths_underfunded >= 2- Chance auf Beziehungsende prüfen
- bei repräsentativen Beziehungen zusätzlich höhere Absprungchance, wenn
public_known = true
Events bei sozialen Folgewirkungen:
falukantUpdateFamilyreason: 'daily'
- zusätzlich
falukantUpdateStatus
8. Kreditwürdigkeit
Die UI rechnet bereits aus creditworthiness_penalty und Status einen sichtbaren Wert.
Der Daemon muss pflegen:
creditworthiness_penaltystatusdays_overdue
Empfehlung:
- Eintritt Schuldturm:
+45 - pro weiterem Hafttag:
+1 - Hauspfändung: zusätzlich
+10 - Niederlassungsschließung: zusätzlich
+8
9. Freilassung
Freilassung, wenn:
- keine relevante Restschuld mehr offen ist oder
- ein definierter Restwert unterschritten wird, falls ihr einen Bagatellgrenzwert wollt
Dann:
status = 'released'released_at = now()next_forced_action = nulldays_overdue = 0remaining_debt = 0
Events:
falukantUpdateDebtreason: 'debtors_prison_released'
falukantUpdateStatusfalukantUpdateFamilyreason: 'daily'
falukantHouseUpdatefalukantBranchUpdate
Keine automatische vollständige soziale Heilung:
- Reputation bleibt reduziert
- Kreditwürdigkeit bleibt reduziert
- Familie/Haus bleiben in Folgezuständen
10. Event-Kommunikation zur UI
Der Daemon sendet als Primärevent:
{
"event": "falukantUpdateDebt",
"user_id": 123,
"reason": "delinquency"
}
Mögliche reason:
delinquencydebtors_prison_enteredasset_seizurevehicle_liquidationhouse_seizurebranch_closuredebtors_prison_released
10.1 Begleitevents
Je nach Folge zusätzlich:
falukantUpdateStatusfalukantHouseUpdatefalukantBranchUpdatefalukantUpdateFamily
10.2 Empfohlene Minimalregeln
delinquency:falukantUpdateDebtfalukantUpdateStatus
debtors_prison_entered:falukantUpdateDebtfalukantUpdateStatusfalukantUpdateFamilyfalukantHouseUpdatefalukantBranchUpdate
asset_seizure:falukantUpdateDebtfalukantUpdateStatus- optional
falukantBranchUpdate
vehicle_liquidation:falukantUpdateDebtfalukantUpdateStatus
house_seizure:falukantUpdateDebtfalukantUpdateStatusfalukantHouseUpdatefalukantUpdateFamily
branch_closure:falukantUpdateDebtfalukantUpdateStatusfalukantBranchUpdate
debtors_prison_released:falukantUpdateDebtfalukantUpdateStatusfalukantUpdateFamilyfalukantHouseUpdatefalukantBranchUpdate
11. Idempotenz
Der Worker muss idempotent arbeiten.
Wichtig:
- Eintritt in den Schuldturm nicht mehrfach für denselben aktiven Fall auslösen
- Verwertungsschritte nur einmal je Asset anwenden
releasednicht erneut freisetzen
Empfehlung:
- pro Tick Transaktion
- pro Nutzer eine klare Reihenfolge
- Änderungen in
assets_seized_jsonprotokollieren
12. Mindestumsetzung für Version 1
Pflicht:
- Verzugstage pflegen
- Eintritt nach 3 Tagen
- Status und Penalty schreiben
- Geld zuerst einziehen
- danach Fahrzeuge
- Events senden
Danach:
- Hauspfändung
- Niederlassungsschließung
- volle Familienfolgen
13. Hinweis an den Daemon
Die projektseitigen Grundlagen sind bereits umgesetzt:
debtors_prismist erweitert- Bank-/Haus-/Familien-/Übersichts-UI reagiert auf den Status
- aktive Falukant-Aktionen werden im Backend bereits gesperrt, sobald
inDebtorsPrison = true
Der Daemon muss daher vor allem die Zustände und Folgen zuverlässig schreiben und die dokumentierten Events senden.