60 lines
3.1 KiB
Markdown
60 lines
3.1 KiB
Markdown
# Einheiten: backend/tft/sim/economy.py
|
|
stand: f41ac76b5789
|
|
|
|
## 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 `None` zurü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
|