5.6 KiB
Einheiten: backend/tft/model/statsheet.py
stand: f41ac76b57
backend/tft/model/statsheet.py::_empty_acc
beschreibung: Liefert ein frisches Sammel-Dictionary mit allen bekannten Stat-Buff-Akkumulatoren auf 0.0 initialisiert.
input: keine Argumente
output: ein dict mit 12 numerischen Stat-Feldern (z. B. ad_pct, ap_flat, hp_pct).
entscheidungen:
- Alle Felder werden explizit auf 0.0 gesetzt, damit Akkumulatoren ohne Vorbelastung starten. beleg: "{"ad_pct": 0.0, "ap_flat": 0.0, "as_pct": 0.0, "hp_flat": 0.0,"
- Es wird genau ein gemeinsames Akkumulator-Schema für Items und Trait-Buffs verwendet. beleg: "return {"ad_pct": 0.0, "ap_flat": 0.0, "as_pct": 0.0, "hp_flat": 0.0," kanten:
- wird-genutzt-von: backend/tft/model/statsheet.py::_apply_item_effects
- wird-genutzt-von: backend/tft/model/statsheet.py::trait_buffs
- wird-genutzt-von: backend/tft/model/statsheet.py::unit_stats
backend/tft/model/statsheet.py::_apply_item_effects
beschreibung: Überträgt die modellierten Item-Effekte aus dem Datenkatalog in den Stat-Akkumulator und normalisiert Werteinheiten.
input: item_apis (zu applizierende Item-IDs), static_items (Item-Katalog), acc (Stat-Akkumulator)
output: keine Rückgabe; acc wird in-place um Item-Boni angereichert.
entscheidungen:
- Unbekannte oder
None-Effekte werden bewusst ignoriert, um bespoke Mechanik nicht zu modellieren. beleg: "if val is None:" - Roh-Listenwerte werden via
_fractionnormalisiert, während flache Skalierungen direkt addiert werden. beleg: "elif key in ("BonusDamage", "DamageAmp"):" - Prozent-Keys (
AS,CritChance) werden durch 100 geteilt, weil sie als Prozentzahl geliefert werden. beleg: "elif key == "AS":" MAPPED_ITEM_KEYSdefiniert die Menge der modellierten Effekte als vertragliche Whitelist. beleg: "MAPPED_ITEM_KEYS = ("AD", "AP", "AS", "CritChance", "Health", "Armor"," kanten:- nutzt: backend/tft/model/statsheet.py::_fraction
- wird-genutzt-von: backend/tft/model/statsheet.py::unit_stats
backend/tft/model/statsheet.py::item_is_modeled
beschreibung: Entscheidet anhand der modellierten Effekt-Whitelist, ob ein Item überhaupt in die Berechnung einfließt.
input: item_info (Item-Datensatz mit effects)
output: bool, True sobald mindestens ein modellierter Key einen Nicht-None-Wert hat.
entscheidungen:
- Nur Werte != None zählen, da
Noneals „nicht angegeben" interpretiert wird. beleg: "return any(effects.get(k) is not None for k in MAPPED_ITEM_KEYS)" - Die modellierten Keys sind als Modul-Konstante
MAPPED_ITEM_KEYSzusammengefasst. beleg: "MAPPED_ITEM_KEYS = ("AD", "AP", "AS", "CritChance", "Health", "Armor"," kanten: - nutzt: backend/tft/model/statsheet.py::_apply_item_effects
backend/tft/model/statsheet.py::_fraction
beschreibung: Normalisiert cdragon-Werte, die mal als Fraction (0.15) und mal als Prozentzahl (15.0) vorliegen, auf einen einheitlichen Bruch.
input: value (float)
output: float im Bereich [0, 1] (Fraction).
entscheidungen:
- Schwellwert 1.0 entscheidet, ob ein Wert als bereits normalisierte Fraction gilt. beleg: "return value if abs(value) <= 1.0 else value / 100"
- Beträge werden verglichen, damit auch negative Fraktionen korrekt behandelt werden. beleg: "return value if abs(value) <= 1.0 else value / 100" kanten:
- wird-genutzt-von: backend/tft/model/statsheet.py::_apply_item_effects
- wird-genutzt-von: backend/tft/model/statsheet.py::trait_buffs
backend/tft/model/statsheet.py::trait_buffs
beschreibung: Zerlegt Trait-Variablennamen in Tokens und leitet daraus teamweite Stat-Buffs sowie die Liste der erkannten Traits ab.
input: active_tiers (aktive Trait-Breakpoints), static_traits (Trait-Katalog)
output: Tupel (buffs, recognized) mit Akkumulator-Dictionary und Set erkannter Trait-IDs.
entscheidungen:
- Mechanik-Parameter werden über eine Token-Blacklist früh aussortiert. beleg: "if tokens & _SKIP_TOKENS or name.startswith("{"):"
ap-Tokens werden mit* 100auf den flachen AP-Konventionen aufsummiert. beleg: "elif "ap" in tokens:"- Variablen ohne numerischen Wert werden übersprungen, um Token-Mismatches zu vermeiden. beleg: "if value is None or not isinstance(value, (int, float)):"
- Nur Traits, bei denen mindestens eine Variable als Buff gemappt wurde, landen in
recognized. beleg: "if matched:" kanten: - nutzt: backend/tft/model/statsheet.py::_empty_acc
- nutzt: backend/tft/model/statsheet.py::_fraction
- nutzt: backend/tft/model/statsheet.py::_TOKEN_RE
backend/tft/model/statsheet.py::unit_stats
beschreibung: Berechnet das effektive Kampfprofil (eHP, Gesamt-DPS, Spell-DPS) einer Unit aus Basiswerten, Sternenmultiplikatoren, Team-Buffs und Items.
input: unit (Champion-Daten), stars, item_apis, static_items, team_buffs, role, optional spell_cap
output: dict mit den Schlüsseln ehp, dps und spell_dps.
entscheidungen:
- HP und AD skalieren über
HP_STAR_MULTbzw.AD_STAR_MULTje nach Sternenlevel. beleg: "hp = (stats.get("hp") or 0) * HP_STAR_MULT ** (stars - 1)" - eHP kombiniert Rüstung/MR und Schadensreduktion multiplikativ. beleg: "ehp = hp * (1 + (armor + mr) / 200) * (1 + acc["dr"])"
- Die Cast-Rate wird durch
CAST_RATE_CAPgedeckelt, um Ausreißer zu verhindern. beleg: "CAST_RATE_CAP," - Spell-DPS ist auf
SPELL_AUTO_CAPmal eigene Auto-DPS begrenzt, mit optionalem Floor. beleg: "limit = SPELL_AUTO_CAP * auto_dps" - Team-Buffs und Item-Effekte werden in
_empty_acczusammengeführt, um Bonus-Stats konsistent anzureichern. beleg: "acc = _empty_acc()" kanten: - nutzt: backend/tft/model/statsheet.py::_empty_acc
- nutzt: backend/tft/model/statsheet.py::_apply_item_effects