78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
import json
|
|
import os
|
|
import sys
|
|
|
|
|
|
def _fail(message: str) -> None:
|
|
print(json.dumps({'error': message}, ensure_ascii=False))
|
|
sys.exit(1)
|
|
|
|
|
|
def _parse_args() -> tuple[str, str, str, str]:
|
|
if len(sys.argv) < 5:
|
|
_fail('usage: python_bridge.py <project_root> <command> <alter> <equ_version>')
|
|
project_root = sys.argv[1]
|
|
command = sys.argv[2]
|
|
alter = sys.argv[3]
|
|
equ_version = sys.argv[4]
|
|
return project_root, command, alter, equ_version
|
|
|
|
|
|
def _ensure_path(project_root: str) -> None:
|
|
if project_root not in sys.path:
|
|
sys.path.insert(0, project_root)
|
|
sys.argv[0] = os.path.join(project_root, 'main.py')
|
|
os.chdir(project_root)
|
|
|
|
|
|
def _load_character(alter: str, equ_version: str):
|
|
from core.basic.character import createCharacter
|
|
|
|
character = createCharacter(alter, equ_version or '0')
|
|
if character is None:
|
|
raise RuntimeError(f'failed to create character for {alter}')
|
|
return character
|
|
|
|
|
|
def _character_info(alter: str, equ_version: str):
|
|
character = _load_character(alter, equ_version)
|
|
return character.getInfo()
|
|
|
|
|
|
def _character_skills(alter: str, equ_version: str):
|
|
info = _character_info(alter, equ_version)
|
|
skills = info.get('skills', [])
|
|
return [
|
|
{
|
|
'id': str(skill.get('id', '')),
|
|
'name': skill.get('name', ''),
|
|
'type': skill.get('type', ''),
|
|
'learnLv': int(skill.get('learnLv', 0)),
|
|
'maxLearnLv': int(skill.get('maxLearnLv', 0)),
|
|
'hasVP': bool(skill.get('hasVP', False)),
|
|
'hasUP': bool(skill.get('hasUP', False)),
|
|
'uuid': skill.get('uuid', ''),
|
|
}
|
|
for skill in skills
|
|
]
|
|
|
|
|
|
def main() -> None:
|
|
project_root, command, alter, equ_version = _parse_args()
|
|
_ensure_path(project_root)
|
|
|
|
try:
|
|
if command == 'character-info':
|
|
data = _character_info(alter, equ_version)
|
|
elif command == 'character-skills':
|
|
data = _character_skills(alter, equ_version)
|
|
else:
|
|
_fail(f'unknown command: {command}')
|
|
print(json.dumps(data, ensure_ascii=False))
|
|
except Exception as ex:
|
|
_fail(str(ex))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|