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

3.4 KiB
Raw Permalink Blame History

Einheiten: backend/tft/model/score.py

stand: f41ac76b57

backend/tft/model/score.py::active_trait_tiers

beschreibung: Ermittelt zu jedem Trait einer Board-Aufstellung den erreichten Breakpoint und gibt nur die aktiven Stufen zurück. input: board_units (Liste mit Unit-Dicts), static_traits (Trait-Definitionen), static_units (Unit-Definitionen) output: dict trait_api_name → erreichte Breakpoint-Ordnung (1-basiert), nur aktive Traits entscheidungen:

  • Nur Traits mit einem Treffer in static_traits werden berücksichtigt, Unbekannte stillschweigend übersprungen. beleg: "if not info:"
  • Der höchste Breakpoint, dessen min_units erreicht ist, gewinnt — Iteration über alle Breakpoints mit laufender Aktualisierung. beleg: "for i, bp in enumerate(info["breakpoints"], start=1):"
  • Traits, die keinen Breakpoint erreichen, erscheinen gar nicht im Ergebnis (ordinal == 0). beleg: "if ordinal:" kanten:
  • wird-genutzt-von: backend/tft/model/score.py::score_board

backend/tft/model/score.py::unit_profile

beschreibung: Baut das Kampfprofil einer einzelnen Board-Unit aus DPS, eHP, Defensive-Flag und Unit-Bezug. input: u (Board-Unit-Dict), artifact (gesamtes Artifact mit static-Daten, Rollen, Spell-DPS-Cap) output: dict mit "off", "def", "defensive", "unit" oder None bei unbekannter Unit entscheidungen:

  • Unbekannte Units (fehlend in static.units) führen zu None, statt einen Fehler zu werfen. beleg: "if not unit:"
  • Rollen werden bevorzugt aus dem Artifact gelesen, sonst via baseline.classify_role bestimmt. beleg: "artifact.get("roles", {}).get(u["api_name"]) or baseline.classify_role(unit)"
  • Defensive-Status gilt ausschließlich für Rollen "frontline" und "utility" — Cast-Rollen steuern nur die Zielreihenfolge. beleg: ""defensive": role in ("frontline", "utility")" kanten:
  • ruft-auf: backend/tft/model/baseline.py::classify_role
  • nutzt: backend/tft/model/statsheet.py::unit_stats
  • wird-genutzt-von: backend/tft/model/score.py::board_profiles

backend/tft/model/score.py::board_profiles

beschreibung: Liefert die Kampfprofile aller Units eines Boards, wobei Units ohne Profil herausgefiltert werden. input: board_units (Liste mit Unit-Dicts), artifact (gesamtes Artifact) output: Liste der Profile (None-Einträge aus unit_profile werden übersprungen) entscheidungen:

  • Die Filterung erfolgt inline per walrus-Operator, sodass kein zweiter Durchlauf nötig ist. beleg: "if (p := unit_profile(u, artifact))" kanten:
  • ruft-auf: backend/tft/model/score.py::unit_profile
  • wird-genutzt-von: backend/tft/model/score.py::score_board

backend/tft/model/score.py::score_board

beschreibung: Berechnet den Board-Score als Quadratwurzel aus (Σoff · Σdef), skaliert durch 100. input: board_units (Liste mit Unit-Dicts), augments (Signatur-Kompatibilität, ungenutzt), artifact (gesamtes Artifact) output: float — der Board-Score für Vergleiche entscheidungen:

  • Die Formel ist sqrt(Σoff × Σdef); sie kombiniert Offensiv- und Defensiv-Summen multiplikativ unter einer Wurzel. beleg: "return (off * dfn) ** 0.5 / 100"
  • Augments bleiben bewusst ungenutzt, nur die Signatur bleibt für Aufrufer kompatibel. beleg: "augments bleibt nur für Signatur-Kompatibilität."
  • Die Division durch 100 dient nur der Anzeige-Skalierung und ist für Vergleiche irrelevant. beleg: "/100: nur Anzeige-Skalierung, für Vergleiche irrelevant." kanten:
  • ruft-auf: backend/tft/model/score.py::board_profiles