This commit is contained in:
team3
2026-07-24 11:24:24 +02:00
parent f41ac76b57
commit 848c8ea1aa
41 changed files with 1776 additions and 15 deletions

View File

@@ -0,0 +1,86 @@
# 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