Files
yourpart3/docs/FALUKANT_UNDERGROUND_AFFAIR_DAEMON_HANDOFF.md

181 lines
4.3 KiB
Markdown

# Falukant: Daemon-Handoff für `investigate_affair`
## Zweck
Dieses Dokument beschreibt die Auswertung der Untergrundaktivität `investigate_affair` im externen Daemon.
Es ergänzt:
- [FALUKANT_UNDERGROUND_AFFAIR_PLAN.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_UNDERGROUND_AFFAIR_PLAN.md)
- [FALUKANT_LOVERS_DAEMON_SPEC.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_SPEC.md)
- [FALUKANT_LOVERS_DAEMON_HANDOFF.md](/mnt/share/torsten/Programs/YourPart3/docs/FALUKANT_LOVERS_DAEMON_HANDOFF.md)
## Betroffene Daten
Der externe Daemon liest:
- `falukant_data.underground`
- `falukant_type.underground`
- `falukant_data.relationship`
- `falukant_data.relationship_state`
- `falukant_data.character`
- optional `falukant_data.child_relation`
Relevant ist jeweils:
- Untergrundaktivität vom Typ `investigate_affair`
- `performer_id`
- `victim_id`
- `parameters.goal`
- `expose`
- `blackmail`
- `result`
## Erwarteter Input
Eine Aktivität ist für den Daemon verarbeitbar, wenn:
- `underground_type.tr = investigate_affair`
- `result.status = pending`
Der Daemon soll dann beim Opfer prüfen:
- aktive Liebschaften
- Sichtbarkeit und Diskretion dieser Liebschaften
- evtl. bekannte uneheliche Kinder
- Stand und Ansehen des Opfers
## Ergebnis-Schema in `underground.result`
Der Daemon schreibt nach der Auswertung ein JSON mit folgender Struktur:
```json
{
"status": "resolved",
"outcome": "success",
"discoveries": {
"relationshipId": 123,
"loverRole": "secret_affair",
"visibility": 42,
"acknowledged": false,
"publicKnownChild": false
},
"visibilityDelta": 12,
"reputationDelta": -3,
"blackmailAmount": 1500,
"notes": "Affair was uncovered and partially exposed."
}
```
Erlaubte Werte:
- `status`
- `pending`
- `resolved`
- `failed`
- `outcome`
- `success`
- `partial`
- `failure`
## Auswertung: `goal = expose`
Ziel:
- Liebschaft öffentlich machen
- Sichtbarkeit stark erhöhen
- ggf. Skandal auslösen
Empfohlene Wirkung:
- `relationship_state.visibility +10..25`
- optional `relationship_state.discretion -5..15`
- sofortiger Reputationsschaden beim Opfer
- bei sehr sichtbarer oder junger Beziehung zusätzliche Skandalchance
Zusätzliche Empfehlung:
- wenn die Beziehung bereits fast öffentlich war, darf `outcome = partial` gesetzt werden statt voller Erfolg
## Auswertung: `goal = blackmail`
Ziel:
- belastendes Wissen gewinnen
- keinen sofortigen vollen öffentlichen Effekt erzeugen
- ein Erpressungspotenzial vorbereiten
Empfohlene Wirkung:
- `relationship_state.visibility +3..10`
- `blackmailAmount` setzen
- kleiner oder kein sofortiger Reputationsschaden
- optional separates Log oder spätere Forderung
Wenn ihr noch kein echtes Erpressungssystem habt:
- `blackmailAmount` trotzdem setzen
- `notes` befüllen
- UI zeigt den Vorgang als abgeschlossen mit Erpressungssumme
## Mindestregeln für Erfolg
Erfolgswahrscheinlichkeit sollte steigen bei:
- hoher vorhandener Sichtbarkeit
- niedriger Diskretion
- mehreren aktiven Liebschaften
- bereits bekannten unehelichen Kindern
Erfolgswahrscheinlichkeit sollte sinken bei:
- hoher Diskretion
- niedriger Sichtbarkeit
- standesgemäß geführter Mätresse/Favorit auf hohem Rang
## Folgewirkungen auf Lovers-System
Bei Erfolg darf der Daemon auslösen:
- `falukant_family_scandal_hint`
- `falukantUpdateFamily` mit `reason = scandal`
- zusätzlich normale Status-Updates
Wenn `goal = expose`, sollte mindestens eine dieser Wirkungen eintreten:
- Sichtbarkeit steigt
- Ruf sinkt
- Skandalwahrscheinlichkeit steigt
Wenn `goal = blackmail`, sollte mindestens eine dieser Wirkungen eintreten:
- `blackmailAmount > 0`
- kleiner Sichtbarkeitsanstieg
- interner Merker für spätere Forderung
## UI-Erwartung
Das Frontend dieses Projekts erwartet derzeit:
- `type`
- `goal`
- `status`
- `additionalInfo.blackmailAmount`
Optional nutzbar später:
- `discoveries`
- `visibilityDelta`
- `reputationDelta`
- `notes`
## Definition of Done
Die externe Umsetzung gilt als ausreichend, wenn:
1. `investigate_affair`-Einträge mit `status = pending` verarbeitet werden
2. `result.status` danach nicht mehr `pending` ist
3. `goal = expose` und `goal = blackmail` verschieden behandelt werden
4. mindestens Sichtbarkeit oder Reputationswirkung zurückgeschrieben wird
5. `blackmailAmount` bei Erpressung gesetzt werden kann