openwf/Tools/generate_enemy_name_overrides.py

72 lines
2.8 KiB
Python
Raw 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.

import json
import os
import argparse
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
EXPORT_ENEMIES = os.path.join(ROOT, 'warframe-public-export-plus', 'ExportEnemies.json')
DICT_DIR = os.path.join(ROOT, 'warframe-public-export-plus')
OUTPUT = os.path.join(ROOT, 'Scripts', 'EnemyNameOverrides.pluto')
# 解析命令行:选择语言(默认 zh
parser = argparse.ArgumentParser(description='生成 Agent 路径到本地化名称的覆盖表Pluto 模块)')
parser.add_argument('--lang', default='zh', help='语言代码,如 zh/en/ko/ja 等;默认 zh')
args = parser.parse_args()
dict_path = os.path.join(DICT_DIR, f'dict.{args.lang}.json')
if not os.path.exists(dict_path):
fallback = os.path.join(DICT_DIR, 'dict.en.json')
if not os.path.exists(fallback):
raise SystemExit(f'找不到语言文件 {dict_path},且英文回退 {fallback} 也不存在。')
print(f'警告:{dict_path} 不存在,改用 {fallback}')
dict_path = fallback
# 读取导出文件与语言字典
with open(EXPORT_ENEMIES, 'r', encoding='utf-8') as f:
enemies = json.load(f)
with open(dict_path, 'r', encoding='utf-8') as f:
dict_lang = json.load(f)
# 构建映射:本地化名称 -> Agent 路径
name_to_path = {}
agents = enemies.get('agents') or {}
avatars = enemies.get('avatars') or {}
for agent_path, agent_def in agents.items():
if not isinstance(agent_def, dict):
continue
avatar_types = agent_def.get('avatarTypes') or {}
avatar_path = avatar_types.get('STANDARD')
if not avatar_path:
continue
# Find avatar entry to get name locTag
avatar_def = avatars.get(avatar_path)
if not isinstance(avatar_def, dict):
continue
loc_tag = avatar_def.get('name')
if not isinstance(loc_tag, str):
continue
name = dict_lang.get(loc_tag) or loc_tag
if name not in name_to_path: # 避免重名覆盖
name_to_path[name] = agent_path
# 输出 Pluto 表:键=名称,值=路径
lines = []
lines.append(f"-- 由 Tools/generate_enemy_name_overrides.py 自动生成(语言: {os.path.basename(dict_path)}\n")
lines.append("-- 键本地化名称Agent 路径\n")
lines.append("return {\n")
sorted_names = sorted(name_to_path.keys())
for i, name in enumerate(sorted_names):
k = str(name).replace('\\', '\\\\').replace('"', '\\"').replace('\n', ' ').replace('\r', '')
v = str(name_to_path[name]).replace('\\', '\\\\').replace('"', '\\"')
# 最后一项不加逗号
comma = "," if i < len(sorted_names) - 1 else ""
lines.append(f' ["{k}"] = "{v}"{comma}\n')
lines.append("}\n")
os.makedirs(os.path.dirname(OUTPUT), exist_ok=True)
with open(OUTPUT, 'w', encoding='utf-8') as f:
f.writelines(lines)
print(f"已写入 {len(name_to_path)} 条到 {OUTPUT}")