181 lines
4.3 KiB
Markdown
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
|