Ship item nicknames, Tiny fear override, and ensure-match API.
Add 冰眼/蛇矛 aliases, correct Tiny fears to Hydra's Breath, and fix production match detail POST 405. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
"""Fetch shop item descriptions and mechanism tags into data/items_meta.json.
|
||||
|
||||
Also merges Chinese nicknames from data/item_alias_overrides.json → aliases.
|
||||
|
||||
Sources:
|
||||
- OpenDota items.json (structure, EN ability text)
|
||||
- Valve itemlist / itemdata (schinese names + descriptions)
|
||||
@@ -43,6 +45,7 @@ ICON_URL = (
|
||||
)
|
||||
OUT = DATA / "items_meta.json"
|
||||
OVERRIDES = DATA / "item_tag_overrides.json"
|
||||
ALIAS_OVERRIDES = DATA / "item_alias_overrides.json"
|
||||
|
||||
MIN_CREATED_COST = 1400
|
||||
ALWAYS_CORE = frozenset({"blink", "aghanims_shard", "gem", "dust", "ghost"})
|
||||
@@ -262,6 +265,38 @@ def apply_overrides(key: str, tags: list[str], overrides: dict[str, dict]) -> li
|
||||
return merge_tag_overrides(tags, overrides.get(key), TAG_ORDER)
|
||||
|
||||
|
||||
def load_alias_overrides() -> dict[str, list[str]]:
|
||||
"""key → Chinese nicknames (冰眼 / 蛇矛); empty if file missing."""
|
||||
if not ALIAS_OVERRIDES.is_file():
|
||||
return {}
|
||||
try:
|
||||
raw = json.loads(ALIAS_OVERRIDES.read_text(encoding="utf-8"))
|
||||
except (OSError, json.JSONDecodeError):
|
||||
return {}
|
||||
out: dict[str, list[str]] = {}
|
||||
for key, aliases in (raw.get("items") or {}).items():
|
||||
if not isinstance(aliases, list):
|
||||
continue
|
||||
clean = [str(a).strip() for a in aliases if str(a).strip()]
|
||||
if clean:
|
||||
out[str(key)] = list(dict.fromkeys(clean))
|
||||
return out
|
||||
|
||||
|
||||
def apply_alias_overrides(items_out: dict[str, dict], aliases: dict[str, list[str]]) -> None:
|
||||
for row in items_out.values():
|
||||
if not isinstance(row, dict):
|
||||
continue
|
||||
key = str(row.get("key") or "")
|
||||
if not key:
|
||||
continue
|
||||
nick = aliases.get(key)
|
||||
if nick:
|
||||
row["aliases"] = list(nick)
|
||||
else:
|
||||
row.pop("aliases", None)
|
||||
|
||||
|
||||
def main() -> None:
|
||||
ap = argparse.ArgumentParser(description=__doc__)
|
||||
ap.add_argument("--delay", type=float, default=0.15)
|
||||
@@ -301,6 +336,7 @@ def main() -> None:
|
||||
pass
|
||||
|
||||
overrides = load_overrides()
|
||||
alias_overrides = load_alias_overrides()
|
||||
items_out: dict[str, dict] = {}
|
||||
pending = []
|
||||
for iid in sorted(candidates):
|
||||
@@ -408,6 +444,7 @@ def main() -> None:
|
||||
}
|
||||
write_json_atomic(args.out, payload)
|
||||
|
||||
apply_alias_overrides(items_out, alias_overrides)
|
||||
payload = {
|
||||
"meta": {
|
||||
"source": "valve+opendota",
|
||||
|
||||
Reference in New Issue
Block a user