Huge Rewrite!
This commit is contained in:
52
Standalone/Script_GenerateMusicDB.py
Normal file
52
Standalone/Script_GenerateMusicDB.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# 感谢伟大的 Diving-Fish 让我被迫直面恐惧写这个逼玩意
|
||||
|
||||
import xml.dom.minidom as minidom
|
||||
from pathlib import Path
|
||||
import json
|
||||
from loguru import logger
|
||||
|
||||
def makeMusicDBJson():
|
||||
'''
|
||||
从 HDD 的文件来生成 music_db.json
|
||||
推荐的是如果要国服用 那就用国际服的文件来生成
|
||||
免得国服每次更新还要重新生成太麻烦
|
||||
'''
|
||||
# 记得改
|
||||
A000_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets\A000')
|
||||
OPTION_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets')
|
||||
|
||||
music_db: dict[str, dict[str, str | int]] = {}
|
||||
DEST_PATH = Path('../Data/musicDB.json')
|
||||
|
||||
music_folders = [f for f in (A000_DIR / 'music').iterdir() if f.is_dir()]
|
||||
for option_dir in OPTION_DIR.iterdir():
|
||||
if (option_dir / 'music').exists():
|
||||
music_folders.extend([f for f in (option_dir / 'music').iterdir() if f.is_dir()])
|
||||
|
||||
for folder in music_folders:
|
||||
xml_path = (folder / 'Music.xml')
|
||||
if xml_path.exists():
|
||||
xml = minidom.parse(xml_path.as_posix())
|
||||
data = xml.getElementsByTagName('MusicData')[0]
|
||||
music_id = data.getElementsByTagName('name')[0].getElementsByTagName('id')[0].firstChild.data
|
||||
music_name = data.getElementsByTagName('name')[0].getElementsByTagName('str')[0].firstChild.data
|
||||
music_version = data.getElementsByTagName('AddVersion')[0].getElementsByTagName('id')[0].firstChild.data
|
||||
music_db[music_id] = {
|
||||
"name": music_name,
|
||||
"version": int(music_version)
|
||||
}
|
||||
logger.debug(f'Found {len(music_db)} music data')
|
||||
serialized = '{\n'
|
||||
sorted_keys = sorted(music_db.keys(), key=lambda x: int(x))
|
||||
for key in sorted_keys:
|
||||
value = music_db[key]
|
||||
serialized += f' "{key}": {json.dumps(value, ensure_ascii=False)},\n'
|
||||
serialized = serialized[:-2] + '\n}'
|
||||
|
||||
with open(DEST_PATH, 'w', encoding='utf-8') as f:
|
||||
f.write(serialized)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
makeMusicDBJson()
|
||||
print('Done.')
|
||||
Reference in New Issue
Block a user