diff --git a/tools/maimai_convert.py b/tools/maimai_convert.py index bae4ec4e..01ae48f3 100644 --- a/tools/maimai_convert.py +++ b/tools/maimai_convert.py @@ -66,6 +66,38 @@ def add_migration(f_name: str, mysql: str): (migration_path / 'sqlite' / f_name).write_text(';\n'.join(sqlite) + ';\n') +class Character(NamedTuple): + id: int # CharaData.name.id + name: str # CharaData.name.str + color_id: int # CharaData.color.id + color_name: str # CharaData.color.str + genre_id: int # CharaData.genre.id + genre_name: str # CharaData.genre.str + is_copyright: bool # CharaData.isCopyright + disable: bool # CharaData.disable + + +def parse_bool(s: str) -> bool: + if s == 'true' or s == '1': + return True + if s == 'false' or s == '0': + return False + raise ValueError(f'Invalid boolean value: {s}') + + +def parse_character(d: dict) -> Character: + return Character( + id=int(d['CharaData']['name']['id']), + name=d['CharaData']['name']['str'], + color_id=int(d['CharaData']['color']['id']), + color_name=d['CharaData']['color']['str'], + genre_id=int(d['CharaData']['genre']['id']), + genre_name=d['CharaData']['genre']['str'], + is_copyright=parse_bool(d['CharaData']['isCopyright']), + disable=parse_bool(d['CharaData']['disable']) + ) + + if __name__ == '__main__': agupa = argparse.ArgumentParser(description='Convert maimai data to csv') agupa.add_argument('path', type=Path, help='Path to A000 data folder') @@ -77,6 +109,8 @@ if __name__ == '__main__': events = read_list('event', '*/Event.xml', parse_event) + characters = read_list('chara', '*/Chara.xml', parse_character) + # Write incremental sql # ids = [int(v.split(",")[0]) for v in (Path(__file__).parent / 'maimai2_game_event.csv').read_text().splitlines()] # new_events = [e for e in events if e.id not in ids] @@ -108,4 +142,3 @@ CREATE TABLE `maimai2_game_ticket` ( sql += ";\n" add_migration(f"V{last_sql_version + 1}__maimai2_tickets.sql", sql) -