Files
tft/.planer/einheiten/backend__tft__model__statsheet.py.md
2026-07-24 11:24:24 +02:00

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 _fraction normalisiert, 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_KEYS definiert 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 None als „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_KEYS zusammengefasst. 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 * 100 auf 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_MULT bzw. AD_STAR_MULT je 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_CAP gedeckelt, um Ausreißer zu verhindern. beleg: "CAST_RATE_CAP,"
  • Spell-DPS ist auf SPELL_AUTO_CAP mal eigene Auto-DPS begrenzt, mit optionalem Floor. beleg: "limit = SPELL_AUTO_CAP * auto_dps"
  • Team-Buffs und Item-Effekte werden in _empty_acc zusammengefü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