4.8 KiB
Einheiten: backend/tft/staticdata/parse.py
stand: f41ac76b57
backend/tft/staticdata/parse.py::augment_tier
beschreibung: Leitet die Augment-Stufe (I/II/III) aus dem Suffix des Icon-Dateinamens ab. input: icon_path — optionaler Pfad zum Augment-Icon. output: Ganzzahl 1–3 für die erkannte Stufe oder None bei fehlendem Pfad. entscheidungen:
- Tier wird aus einem Römisch-Zahl-Suffix vor dem Punkt ermittelt, unabhängig von Groß-/Kleinschreibung. beleg: "AUGMENT_TIER_RE = re.compile(r"-_.", re.I)"
- Rückgabe ist die Länge der gematchten Römisch-Zahl, nicht ihr numerischer Wert. beleg: "return len(m.group(1)) if m else None" kanten:
- wird-genutzt-von: backend/tft/staticdata/parse.py::parse
backend/tft/staticdata/parse.py::render_desc
beschreibung: Füllt Platzhalter in einem Tooltip-Text mit Effekt-Werten und entfernt übriges Markup. input: desc — Tooltip-Text mit @…@-Platzhaltern; effects — Dict mit numerischen Effekt-Werten. output: Bereinigter, einsatzfertiger Beschreibungstext. entscheidungen:
- Unbekannte Platzhalter werden als "?" dargestellt, statt den Text zu verwerfen. beleg: "return "?""
- HTML-Tags und %i:…%-Blöcke werden per Regex entfernt, bevor Mehrfach-Whitespace kollabiert wird. beleg: "text = re.sub(r"<[^>]+>", " ", text)"
- Ganze Zahlen werden ohne Dezimalstellen ausgegeben, andere auf eine Nachkommastelle gerundet. beleg: "str(int(value)) if float(value).is_integer() else str(round(value, 1))" kanten:
- wird-genutzt-von: backend/tft/staticdata/parse.py::parse
backend/tft/staticdata/parse.py::resolve_spell
beschreibung: Ermittelt Schadens-Array, Schadenstyp und Skalierung einer Champion-Fähigkeit aus dem Desc-Markup. input: ability — Dict mit Desc-Text, Variablen und Schadens-Tags. output: Dict mit spell_damage, spell_damage_type und spell_scaling. entscheidungen:
- Erstes im Desc gefundenes Schadens-Tag gewinnt; zugehöriger Variablenname wird gegen "Modified"-Variante geprüft. beleg: "array = get(name) or get(name.removeprefix("Modified"))"
- Ohne expliziten Tag wird ADDamage+APDamage kombiniert, sonst greift die Fallback-Liste in festgelegter Reihenfolge. beleg: "for name in DAMAGE_FALLBACKS:"
- Skalierung wird aus %i:scaleAP% / %i:scaleAD%-Markern im Desc abgeleitet, nicht aus Variablen. beleg: "has_ap = "%i:scaleAP%" in desc" kanten:
- wird-genutzt-von: backend/tft/staticdata/parse.py::parse
backend/tft/staticdata/parse.py::icon_url
beschreibung: Wandelt einen Community-Dragon-Asset-Pfad in eine URL zum PNG-Abbild um. input: asset_path — interner Asset-Pfad mit Endung .tex oder .dds. output: URL auf raw.communitydragon.org mit .png-Endung. entscheidungen:
- Endungen werden case-insensitive ersetzt, sodass .TEX und .DDS ebenfalls zu .png werden. beleg: "p = asset_path.lower()"
- Basis-URL wird als Modul-Konstante gehalten, nicht pro Aufruf neu gebaut. beleg: "return f"{CDRAGON_GAME}/{p}"" kanten:
- wird-genutzt-von: backend/tft/staticdata/parse.py::parse
backend/tft/staticdata/parse.py::detect_set
beschreibung: Wählt aus dem Rohtext die höchste Set-Nummer, die Champion-Daten enthält. input: raw — vollständiges cdragon-JSON mit einem sets-Dict. output: Integer der gewählten Set-Nummer. entscheidungen:
- Nur Sets mit tatsächlichen Champions werden als Kandidaten zugelassen. beleg: "if v.get("champions")"
- Ohne Kandidat wird hart ein ValueError geworfen, statt zu raten. beleg: "raise ValueError("no set with champions found in cdragon data")" kanten:
- wird-genutzt-von: backend/tft/staticdata/parse.py::parse
backend/tft/staticdata/parse.py::parse
beschreibung: Normalisiert das Rohtext-JSON in flache Tabellen für Units, Traits, Items und Augments. input: raw — cdragon-Gesamtdaten; set_override — optionale Set-Nummer. output: Dict mit meta, units, traits, items und augments. entscheidungen:
- Minions und Beschwörungen werden über apiName bzw. leere Trait-Listen ausgefiltert, nicht über eine eigene Allowlist. beleg: "if not c["traits"] or "Minion" in c["apiName"]:"
- Trait-Anzeigenamen werden nachträglich auf api-Namen gemappt, damit die Unit-Tabelle konsistente Identifier führt. beleg: "u["traits"] = [trait_name_to_api[name] for name in u["traits"]]"
- Augments werden anhand von Präfix oder apiName-Inhalt gefiltert und um Shop-/Tooltip-Müll bereinigt. beleg: "if "MarketOffering" in api or "@" in (i["name"] or "")"
- Set-Nummer kann per Parameter überschrieben werden, sonst fällt parse auf detect_set zurück. beleg: "set_number = set_override if set_override is not None else detect_set(raw)" kanten:
- ruft-auf: backend/tft/staticdata/parse.py::detect_set
- ruft-auf: backend/tft/staticdata/parse.py::icon_url
- ruft-auf: backend/tft/staticdata/parse.py::resolve_spell
- ruft-auf: backend/tft/staticdata/parse.py::augment_tier
- ruft-auf: backend/tft/staticdata/parse.py::render_desc