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

87 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Einheiten: backend/tft/staticdata/parse.py
stand: f41ac76b5789
## 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 13 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\"[-_](I{1,3})\.\", 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