GenshinUID/tools/panle_to_json.py
2022-08-29 23:12:44 +08:00

145 lines
4.5 KiB
Python

import json
import asyncio
from pathlib import Path
import openpyxl
from utils.minigg_api.get_minigg_data import get_misc_info
version = '2.7.0'
version_old = '2.6.0'
R_PATH = Path(__file__).parent
DATA_PATH = R_PATH / 'blue_data'
ETC_PATH = Path(__file__).parents[1] / 'genshinuid_enka' / 'etc'
async def getEquipName(name: str) -> str:
r = await get_misc_info('artifacts', name)
re = r['name']
return re
async def panle2Json() -> None:
"""
:说明:
访问DATA_PATH并转换数据为dmgMap.json。
"""
wb = openpyxl.load_workbook(
str(DATA_PATH / '参考面板2.7(上).xlsx'), data_only=True
)
sheet = wb.active
result = {}
char_result = []
char_temp = ''
for row in range(9, 300):
temp = {}
char_name = sheet.cell(row, 1).value
if char_name and char_name != '角色':
weapon = str(sheet.cell(row, 2).value)
equip_set = str(sheet.cell(row, 3).value)
if '4' in equip_set:
equip_set = equip_set.replace('4', '')
equip_set = await getEquipName(equip_set)
elif '2' in equip_set:
equip_set_list = equip_set[1:].split('2')
equip_set = ''
for i in equip_set_list:
equip_set += await getEquipName(i)
else:
print('error')
equip_main = str(sheet.cell(row, 4).value)
g_atk = sheet.cell(row, 8).value
other = sheet.cell(row, 9).value
other2 = sheet.cell(row, 10).value
crit_rate = sheet.cell(row, 13).value
if equip_main[1] in ['']:
key = '血量'
elif equip_main[1] in ['']:
key = '元素精通'
elif equip_main[1] in ['']:
key = '防御力'
else:
key = '攻击力'
if char_name == '夜兰':
key = '血量'
elif char_name == '五郎':
key = '防御力'
dmgBouns = sheet.cell(row, 15).value
defArea = sheet.cell(row, 16).value
resArea = sheet.cell(row, 17).value
power = sheet.cell(row, 18).value
if char_name == '七七':
power = '153+1174'
elif power == '/' or power == 0:
if char_name == '托马':
power = '14.40+4829'
elif char_name == '班尼特':
power = '12.75+1587.82'
elif char_name == '芭芭拉':
power = '35.2+4335'
elif char_name == '早柚':
power = '159.74+1280'
elif char_name == '':
power = '452.16+3389'
elif char_name == '申鹤':
power = '攻击力'
elif char_name == '五郎':
power = '防御力'
elif char_name == '云堇':
power = '防御力'
else:
power = 'any'
action = str(sheet.cell(row, 19).value)
if sheet.cell(row, 20).value != 'any':
val = float('{:.2f}'.format(float(sheet.cell(row, 20).value))) # type: ignore
else:
val = 'any'
if char_name == '辛焱' and '' in action:
power = '2.88 + 1773'
# temp['name'] = char_name
weapon = weapon.replace('试做', '试作')
temp['seq'] = '{}|{}|{}'.format(weapon, equip_set, equip_main)
temp['action'] = action
temp['crit_rate'] = crit_rate
temp['atk'] = g_atk
temp['dmgBouns'] = dmgBouns
temp['defArea'] = defArea
temp['resArea'] = resArea
temp['other'] = other
temp['other2'] = other2
temp['key'] = key
temp['power'] = power
temp['val'] = val
if char_temp:
if char_name == char_temp:
pass
else:
result[char_temp] = char_result
char_result = []
char_temp = char_name
else:
char_temp = char_name
char_result.append(temp)
if row == 263:
print('ok!')
result[char_temp] = char_result
with open(DATA_PATH / 'dmgMap.json', 'w', encoding='UTF-8') as file:
json.dump(result, file, ensure_ascii=False)
async def main():
await panle2Json()
asyncio.run(main())