3.1 KiB
Einheiten: backend/tft/sim/economy.py
stand: f41ac76b57
backend/tft/sim/economy.py::interest
beschreibung: Berechnet die passiven Zinserträge auf Basis des aktuellen Goldstands.
input: aktueller Goldstand gold und die Konfiguration cfg
output: gekappter Zinsbetrag gemäß Konfigurationsobergrenze
entscheidungen:
- Der Zins wird in 10er-Schritten gewährt und auf einen Maximalwert gedeckelt. beleg: "min(gold // 10 * g["interest_per_10"], g["interest_cap"])" kanten:
- wird-genutzt-von: backend/tft/sim/economy.py::round_income
backend/tft/sim/economy.py::streak_gold
beschreibung: Liefert den Streak-Bonus auf Basis der absoluten Streaklänge aus einer gestaffelten Konfigurationstabelle.
input: aktuelle Streaklänge streak und die Konfiguration cfg
output: höchster anwendbarer Streak-Bonuswert (oder 0)
entscheidungen:
- Es wird der größte passende Schwellenwert verwendet, da spätere Iterationen frühere überschreiben. beleg: "if abs(streak) >= min_streak:"
- Streaks werden symmetrisch auf ihre Länge betrachtet, sodass Sieg- und Niederlagenserien gleichbehandelt werden. beleg: "if abs(streak) >= min_streak:" kanten:
- wird-genutzt-von: backend/tft/sim/economy.py::round_income
backend/tft/sim/economy.py::round_income
beschreibung: Aggregiert die gesamten Goldeinnahmen einer Runde aus Grundeinkommen, Zinsen, Streak-Bonus und Siegbonus.
input: Goldstand gold, Streak streak, Siegstatus won, Rundenlabel round_label und Konfiguration cfg
output: Gesamtes Goldeinkommen dieser Runde als Summe aller Komponenten
entscheidungen:
- Frühe Runden erhalten ein spezielles Grundeinkommen, andere fallen auf den Standardwert zurück. beleg: "g["early_income"].get(round_label, g["base_income"])"
- Nur bei einem Rundensieg wird der Siegbonus addiert. beleg: "if won:" kanten:
- ruft-auf: backend/tft/sim/economy.py::interest
- ruft-auf: backend/tft/sim/economy.py::streak_gold
backend/tft/sim/economy.py::xp_to_next
beschreibung: Liefert die XP-Schwelle bis zum nächsten Level oder signalisiert das Erreichen des Maximallevels.
input: aktuelles Level level und die Konfiguration cfg
output: benötigte XP für das nächste Level, oder None am Maximallevel
entscheidungen:
- Am oder über dem Maximallevel wird
Nonezurückgegeben, um einen weiteren Aufstieg zu verhindern. beleg: "if level >= xp["max_level"]:" kanten: - wird-genutzt-von: backend/tft/sim/economy.py::apply_xp
backend/tft/sim/economy.py::apply_xp
beschreibung: Wendet gewonnene XP auf einen Spieler an und levelt ihn automatisch so weit wie möglich auf.
input: aktuelles Level level, aktuelle XP xp, hinzugewonnene XP gained und Konfiguration cfg
output: aktualisiertes Level und verbleibende XP nach möglichen Levelaufstiegen
entscheidungen:
- Mehrere Levelaufstiege werden in einer Schleife konsumiert, solange XP reicht und das Maximallevel nicht erreicht ist. beleg: "while (need := xp_to_next(level, cfg)) is not None and xp >= need:"
- Beim Erreichen des Maximallevels werden verbleibende XP verworfen, um Überlauf zu vermeiden. beleg: "if level >= cfg["xp"]["max_level"]:" kanten:
- ruft-auf: backend/tft/sim/economy.py::xp_to_next