72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
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}")
|