From 88eda493ff8eb62626ea934a4c25122cc926583f Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 21 May 2026 11:01:41 +0200 Subject: [PATCH] =?UTF-8?q?Verbessere=20Logik=20zur=20Berechnung=20von=20R?= =?UTF-8?q?eputation=20und=20Ehezufriedenheit:=20Aktualisiere=20die=20Kate?= =?UTF-8?q?gorien=20und=20t=C3=A4glichen=20Deltas=20f=C3=BCr=20Reputation?= =?UTF-8?q?=20und=20Ehezufriedenheit=20basierend=20auf=20Standsgruppen,=20?= =?UTF-8?q?um=20die=20Auswirkungen=20von=20Liebschaften=20pr=C3=A4ziser=20?= =?UTF-8?q?darzustellen.=20F=C3=BCge=20Dokumentation=20zu=20Standsgruppen?= =?UTF-8?q?=20und=20deren=20Effekten=20hinzu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/LOVER_STAND_EFFECTS.md | 90 +++++++++++++++++++++++++++++++++++ src/worker/falukant_family.rs | 44 +++++++---------- 2 files changed, 107 insertions(+), 27 deletions(-) create mode 100644 docs/LOVER_STAND_EFFECTS.md diff --git a/docs/LOVER_STAND_EFFECTS.md b/docs/LOVER_STAND_EFFECTS.md new file mode 100644 index 0000000..3571aa2 --- /dev/null +++ b/docs/LOVER_STAND_EFFECTS.md @@ -0,0 +1,90 @@ +# Standsabhängige Liebschaften - Frontend Übersicht + +## Title Groups (Standsgruppen) + +Die Standsgruppe wird aus dem **höchsten Titel beider Partner** bestimmt: + +| Stand | Titel | Anzahl | +|-------|-------|--------| +| **0 - Niedrig** | noncivil, civil, sir | 3 | +| **1 - Mittel** | townlord, by, landlord | 3 | +| **2 - Hoch** | knight, baron, count, palsgrave, margrave, landgrave | 6 | +| **3 - Höchst** | ruler, elector, imperial-prince, duke, grand-duke, prince-regent, king | 7 | + +--- + +## Auswirkungen auf Reputation (täglich) + +Die Reputation der **beiden Liebhaber** wird täglich angepasst: + +### Stand 0 - Niedrig +- **Heimlich** (Diskretheit ≥ 75): **±0.0** (neutral) +- **Öffentlich** (Sichtbarkeit ≥ 60): **-0.5** (täglich Reputationsverlust) + +### Stand 1 - Mittel +- **Heimlich** (Diskretheit ≥ 75): **+0.3** (täglich Reputationsgewinn) +- **Öffentlich** (Sichtbarkeit ≥ 60): **-0.4** (täglich Reputationsverlust - Skandal!) + +### Stand 2 - Hoch +- **Jederzeit**: **+0.5** (täglich Reputationsgewinn, unabhängig von Sichtbarkeit/Diskretheit) + +### Stand 3 - Höchst +- **Jederzeit**: **+0.75** (täglich Reputationsgewinn, unabhängig von Sichtbarkeit/Diskretheit) + +--- + +## Auswirkungen auf Ehe-Zufriedenheit (täglich) + +Die Zufriedenheit der **Ehe des Liebhabers** wird täglich angepasst, wenn eine Liebschaft existiert: + +### Stand 0 - Niedrig +- **Heimlich**: **±0** (neutral, keine Auswirkung) +- **Öffentlich**: **-1** (täglich Ehe-Schaden) + +### Stand 1 - Mittel +- **Heimlich**: **±0** (neutral - heimliche Affären sind akzeptabel) +- **Öffentlich**: **-2** (täglich Ehe-Schaden - großer Skandal!) + +### Stand 2 - Hoch +- **Jederzeit**: **+1** (täglich Ehe-Gewinn - gesellschaftlich akzeptiert/bewundert) + +### Stand 3 - Höchst +- **Jederzeit**: **+2** (täglich Ehe-Gewinn - sehr gesellschaftlich akzeptiert) + +--- + +## Sichtbarkeit vs. Diskretheit + +| Eigenschaft | Beschreibung | Schwelle für "Öffentlich" | +|------------|-------------|--------------------------| +| **Sichtbarkeit** | Wie öffentlich bekannt ist die Liebschaft? | ≥ 60 | +| **Diskretheit** | Wie gut versteckt ist die Liebschaft? | ≥ 75 | + +- Sichtbarkeit wird durch **Unterhaltsniveau, Zuneigung, Ehe-Konflikt, Bedieneten-Diskretheit** erhöht +- Diskretheit wird durch **hohes Unterhaltsniveau** erhöht und durch **hohe Sichtbarkeit** gesenkt + +--- + +## Fazit für UI-Anzeige + +**Bei höchstem Stand (3):** +- ✅ "Diese Liebschaft ist für diese Position prestigeträchtig" +- ✅ Reputation steigt stärker (+0.75/Tag) +- ✅ Ehe profitiert besonders (Zufriedenheit +2/Tag) + +**Bei hohem Stand (2):** +- ✅ "Diese Liebschaft ist gesellschaftlich akzeptiert" +- ✅ Reputation steigt (+0.5/Tag) +- ✅ Ehe profitiert (Zufriedenheit +1/Tag) + +**Bei mittlerem Stand (1):** +- ⚠️ "Diese Liebschaft muss diskret bleiben" +- ✅ Reputation steigt WENN geheim (+0.3/Tag) +- ⚠️ "Öffentliche Liebschaft würde massiven Skandal verursachen (-0.4 Rep/Tag, -2 Ehe-Zuf./Tag)" +- ✅ Ehe unbeeinflusst WENN geheim + +**Bei niedrigem Stand (0):** +- ❌ "Diese Liebschaft ist gesellschaftlich unerwünscht" +- ❌ Reputation sinkt bei öffentlicher Affäre (-0.5/Tag) +- ⚠️ Ehe beschädigt bei öffentlicher Affäre (-1/Tag) +- ✅ Wenn geheim: nur neutral, kein Schaden diff --git a/src/worker/falukant_family.rs b/src/worker/falukant_family.rs index e462619..87f4cff 100644 --- a/src/worker/falukant_family.rs +++ b/src/worker/falukant_family.rs @@ -1332,33 +1332,24 @@ fn visibility_young_penalty(min_age_years: i32, visibility: i32) -> f64 { fn lover_status_category(title1: &str, title2: &str) -> u8 { let t1 = title_group(title1); let t2 = title_group(title2); - let max_group = t1.max(t2); - // Vereinfacht: 0 -> "niedrig", 1 -> "mittel", 2+ -> "hoch" - if max_group >= 2 { - 2 // hoch (knight, baron, count, ruler, etc.) - } else if max_group == 1 { - 1 // mittel (townlord, by, landlord) - } else { - 0 // niedrig (noncivil, civil, sir) - } + t1.max(t2) // 0 = niedrig, 1 = mittel, 2 = hoch, 3 = höchst } /// Berechnet tägl. Reputations-Delta basierend auf Stand, Sichtbarkeit und Status der Liebschaft. /// Regel: -/// - Hoher Stand: +Reputation (unabhängig von Sichtbarkeit) -/// - Mittlerer Stand: +Reputation wenn heimlich/diskret, -Reputation wenn öffentlich -/// - Niedriger Stand: neutral wenn heimlich, -Reputation wenn öffentlich +/// - Stand 3 (Höchst): +0.75/Tag (sehr positiv) +/// - Stand 2 (Hoch): +0.5/Tag (positiv) +/// - Stand 1 (Mittel): +0.3 wenn heimlich, -0.4 wenn öffentlich +/// - Stand 0 (Niedrig): 0 wenn heimlich, -0.5 wenn öffentlich fn calculate_lover_reputation_delta(l: &LoverData) -> f64 { let category = lover_status_category(&l.title1_tr, &l.title2_tr); let is_public = l.visibility >= 60; // öffentlich wenn hohe Sichtbarkeit match category { - 2 => { - // Hoher Stand: immer +0,5 pro Tag (positiv) - 0.5 - } + 3 => 0.75, // Höchst: sehr positiv + 2 => 0.5, // Hoch: positiv 1 => { - // Mittlerer Stand: heimlich +0,3, öffentlich -0,4 + // Mittel: heimlich +0,3, öffentlich -0,4 if is_public { -0.4 } else { @@ -1366,7 +1357,7 @@ fn calculate_lover_reputation_delta(l: &LoverData) -> f64 { } } _ => { - // Niedriger Stand: heimlich/diskret 0, öffentlich -0,5 + // Niedrig: heimlich/diskret 0, öffentlich -0,5 if is_public { -0.5 } else { @@ -1378,20 +1369,19 @@ fn calculate_lover_reputation_delta(l: &LoverData) -> f64 { /// Berechnet tägl. Ehezufriedenheits-Delta für Ehe-Partner, wenn dieser eine Liebschaft hat. /// Regel: -/// - Hoher Stand: +Zufriedenheit (sogar öffentliche Liebschaften sind akzeptabel) -/// - Mittlerer Stand: +Zufriedenheit wenn heimlich, -Zufriedenheit wenn öffentlich -/// - Niedriger Stand: neutral wenn heimlich, -Zufriedenheit wenn öffentlich +/// - Stand 3 (Höchst): +2/Tag (sehr gesellschaftlich akzeptiert) +/// - Stand 2 (Hoch): +1/Tag (gesellschaftlich akzeptiert) +/// - Stand 1 (Mittel): 0 wenn heimlich, -2 wenn öffentlich +/// - Stand 0 (Niedrig): 0 wenn heimlich, -1 wenn öffentlich fn calculate_lover_marriage_satisfaction_delta(l: &LoverData) -> i32 { let category = lover_status_category(&l.title1_tr, &l.title2_tr); let is_public = l.visibility >= 60; match category { - 2 => { - // Hoher Stand: +1 pro Tag (Liebschaft ist gesellschaftlich akzeptabel/vorteilhaft) - 1 - } + 3 => 2, // Höchst: +2 pro Tag (sehr positiv) + 2 => 1, // Hoch: +1 pro Tag 1 => { - // Mittlerer Stand: +0 wenn heimlich, -2 wenn öffentlich (Skandal) + // Mittel: +0 wenn heimlich, -2 wenn öffentlich (Skandal) if is_public { -2 } else { @@ -1399,7 +1389,7 @@ fn calculate_lover_marriage_satisfaction_delta(l: &LoverData) -> i32 { } } _ => { - // Niedriger Stand: 0 wenn heimlich, -1 wenn öffentlich + // Niedrig: 0 wenn heimlich, -1 wenn öffentlich if is_public { -1 } else {