改进的毕业度计算

This commit is contained in:
KimgiaiiWuyi 2022-09-04 01:21:44 +08:00
parent 5b2703fa24
commit 2262798ade
7 changed files with 202 additions and 450 deletions

File diff suppressed because one or more lines are too long

View File

@ -32,13 +32,109 @@ with open(DMG_PATH / 'char_talent_effect.json', "r", encoding='UTF-8') as f:
with open(DMG_PATH / 'char_skill_effect.json', "r", encoding='UTF-8') as f:
char_skill_effect_map = json.load(f)
with open(DMG_PATH / 'dmgMap.json', "r", encoding='UTF-8') as f:
dmgMap = json.load(f)
dmgBar_1 = Image.open(DMG_TEXT_PATH / 'dmgBar_1.png')
dmgBar_2 = Image.open(DMG_TEXT_PATH / 'dmgBar_2.png')
async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
with open(DMG_PATH / 'char_action.json', "r", encoding='UTF-8') as f:
char_action = json.load(f)
async def get_first_main(mainName: str) -> str:
if '伤害加成' in mainName:
equipMain = mainName[0]
elif '元素' in mainName:
equipMain = mainName[2]
elif '百分比' in mainName:
if '血量' in mainName:
equipMain = ''
else:
equipMain = mainName[3]
else:
equipMain = mainName[0]
return equipMain
async def get_char_percent(raw_data: dict, prop: dict, char_name: str) -> str:
# print(prop)
percent = '0.0%'
weaponName = raw_data['weaponInfo']['weaponName']
equipMain = ''
for aritifact in raw_data['equipList']:
mainName = aritifact['reliquaryMainstat']['statName']
artifactsPos = aritifact['aritifactPieceName']
if artifactsPos == '时之沙':
equipMain += await get_first_main(mainName)
elif artifactsPos == '空之杯':
equipMain += await get_first_main(mainName)
elif artifactsPos == '理之冠':
equipMain += await get_first_main(mainName)
if 'equipSets' in raw_data:
equipSets = raw_data['equipSets']
else:
artifact_set_list = []
for i in raw_data['equipList']:
artifact_set_list.append(i['aritifactSetsName'])
equipSetList = set(artifact_set_list)
equipSets = {'type': '', 'set': ''}
for equip in equipSetList:
if artifact_set_list.count(equip) >= 4:
equipSets['type'] = '4'
equipSets['set'] = equip
break
elif artifact_set_list.count(equip) == 1:
pass
elif artifact_set_list.count(equip) >= 2:
equipSets['type'] += '2'
equipSets['set'] += equip
if equipSets['type'] in ['2', '']:
seq = ''
else:
seq = '{}|{}|{}'.format(
weaponName.replace('', '').replace('', ''),
equipSets['set'],
equipMain,
)
print(seq)
std_prop = dmgMap[char_name]
for std_seq in std_prop:
if std_seq['seq'] == seq:
std = std_seq
break
else:
std = dmgMap[char_name][0]
print(std)
f = []
c = 0.83
if std['critRate'] != 'any':
crate = (prop['critrate'] - std['critRate']) / 2
c = c * (crate + 1)
if char_name == '珊瑚宫心海':
c = 0.83
else:
if std['critDmg'] != 'any':
f.append(float(prop['critdmg'] / std['critDmg']))
if std['atk'] != 'any':
f.append(float(prop['attack'] / std['atk']))
for i in std['other']:
if '生命' in i:
f.append(float(prop['hp'] / std['other'][i]))
elif '充能' in i:
f.append(float(prop['ce'] / std['other'][i]))
elif '精通' in i:
f.append(float(prop['em'] / std['other'][i]))
elif '防御' in i:
f.append(float(prop['defense'] / std['other'][i]))
else:
f.append(1)
print(f)
percent = '{:.2f}'.format(c * (float(sum(f) / len(f)) * 100))
return percent
async def calc_prop(raw_data: dict, power_list: dict) -> dict:
# 获取值
char_name = raw_data['avatarName']
char_level = int(raw_data['avatarLevel'])
@ -47,15 +143,11 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
weaponAffix = raw_data['weaponInfo']['weaponAffix']
skillList = raw_data['avatarSkill']
# a_skill_name = skillList[0]['skillName'].replace('普通攻击·', '')
prop = {}
prop['A_skill_level'] = skillList[0]['skillLevel']
# e_skill_name = skillList[1]['skillName']
prop['E_skill_level'] = skillList[1]['skillLevel']
# q_skill_name = skillList[-1]['skillName']
prop['Q_skill_level'] = skillList[-1]['skillLevel']
enemy_level = char_level
skill_add = avatarName2SkillAdd[char_name]
for skillAdd_index in range(0, 2):
if len(raw_data['talentList']) >= 3 + skillAdd_index * 2:
@ -83,14 +175,6 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
prop['healBouns'] = fight_prop['healBonus']
prop['shieldBouns'] = 0
# 无action情况兜底
if char_name not in char_action:
faild_img = Image.new('RGBA', (950, 1))
return faild_img, 0
# 拿到倍率表
power_list = char_action[char_name]
# 给每个技能 分别添加上属性
for prop_attr in [
'attack',
@ -108,6 +192,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
'ignoreDef',
'shieldBouns',
'physicalDmgBonus',
'healBouns',
]:
if prop_attr in ['addDmg', 'd', 'r', 'ignoreDef']:
prop['{}'.format(prop_attr)] = 0
@ -121,6 +206,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
'ce',
'hp',
'physicalDmgBonus',
'healBouns',
]:
prop[f'{prop_limit}_{prop_attr}'] = prop[prop_attr]
else:
@ -270,7 +356,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
del power_list['effect']
# 特殊效果,目前有雷神满愿力
extra_effect = {}
prop['extra_effect'] = {}
if 'extra' in power_list:
if char_name == '雷电将军':
extra_value = (
@ -293,7 +379,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
f'Q高空下落伤害:attack+{60*extra_value2}'
)
)
extra_effect = {'Q梦想一刀基础伤害(满愿力)': extra_value}
prop['extra_effect'] = {'Q梦想一刀基础伤害(满愿力)': extra_value}
del power_list['extra']
# 在计算buff前, 引入特殊效果
@ -302,7 +388,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
elif char_name == '钟离':
all_effect.append('r+-20')
sp = []
prop['sp'] = []
# 计算全部的buff添加入属性
print(all_effect)
if all_effect:
@ -393,7 +479,7 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
if effect_limit:
# 如果限制条件为中文,则为特殊label才生效
if '\u4e00' <= effect_limit[-1] <= '\u9fff':
sp.append(
prop['sp'].append(
{
'effect_name': effect_limit,
'effect_attr': effect_attr,
@ -415,6 +501,19 @@ async def draw_dmgCacl_img(raw_data: dict) -> Tuple[Image.Image, int]:
for attr in ['A', 'B', 'C', 'E', 'Q']:
prop[f'{attr}_{effect_attr}'] += effect_value
prop[f'{effect_attr}'] += effect_value
return prop
async def draw_dmgCacl_img(
raw_data: dict, power_list: dict, prop: dict
) -> Tuple[Image.Image, int]:
# 获取值
char_name = raw_data['avatarName']
char_level = int(raw_data['avatarLevel'])
enemy_level = char_level
extra_effect = prop['extra_effect']
sp = prop['sp']
# 计算伤害计算部分图片长宽值
w = 950

View File

@ -11,7 +11,13 @@ from PIL import Image, ImageDraw, ImageChops
from ..utils.db_operation.db_operation import config_check
from ..utils.draw_image_tools.send_image_tool import convert_img
from ..utils.genshin_fonts.genshin_fonts import genshin_font_origin
from .dmgCalc.dmg_calc import draw_dmgCacl_img, avatarName2SkillAdd
from .dmgCalc.dmg_calc import (
DMG_PATH,
calc_prop,
draw_dmgCacl_img,
get_char_percent,
avatarName2SkillAdd,
)
R_PATH = Path(__file__).parent
RESOURCE_PATH = Path(__file__).parents[1] / 'resource'
@ -159,345 +165,6 @@ async def get_all_artifacts_value(
return artifactsValue
async def get_first_main(mainName: str) -> str:
if '伤害加成' in mainName:
equipMain = mainName[0]
elif '元素' in mainName:
equipMain = mainName[2]
elif '百分比' in mainName:
if '血量' in mainName:
equipMain = ''
else:
equipMain = mainName[3]
else:
equipMain = mainName[0]
return equipMain
async def get_char_percent(raw_data: dict) -> str:
percent = '0.0'
char_name = raw_data['avatarName']
weaponName = raw_data['weaponInfo']['weaponName']
weaponType = raw_data['weaponInfo']['weaponType']
fight_prop = raw_data['avatarFightProp']
hp = fight_prop['hp']
attack = fight_prop['atk']
defense = fight_prop['def']
em = fight_prop['elementalMastery']
critrate = fight_prop['critRate']
critdmg = fight_prop['critDmg']
ce = fight_prop['energyRecharge']
dmgBonus = (
fight_prop['dmgBonus']
if fight_prop['physicalDmgBonus'] <= fight_prop['dmgBonus']
else fight_prop['physicalDmgBonus']
)
healBouns = fight_prop['healBonus']
# hp_green = fight_prop['addHp']
# attack_green = fight_prop['addAtk']
# defense_green = fight_prop['addDef']
r = 0.9
equipMain = ''
for aritifact in raw_data['equipList']:
mainName = aritifact['reliquaryMainstat']['statName']
artifactsPos = aritifact['aritifactPieceName']
if artifactsPos == '时之沙':
equipMain += await get_first_main(mainName)
elif artifactsPos == '空之杯':
equipMain += await get_first_main(mainName)
elif artifactsPos == '理之冠':
equipMain += await get_first_main(mainName)
if 'equipSets' in raw_data:
equipSets = raw_data['equipSets']
else:
artifact_set_list = []
for i in raw_data['equipList']:
artifact_set_list.append(i['aritifactSetsName'])
equipSetList = set(artifact_set_list)
equipSets = {'type': '', 'set': ''}
for equip in equipSetList:
if artifact_set_list.count(equip) >= 4:
equipSets['type'] = '4'
equipSets['set'] = equip
break
elif artifact_set_list.count(equip) == 1:
pass
elif artifact_set_list.count(equip) >= 2:
equipSets['type'] += '2'
equipSets['set'] += equip
if equipSets['type'] in ['2', '']:
seq = ''
else:
seq = '{}|{}|{}'.format(
weaponName.replace('', '').replace('', ''),
equipSets['set'],
equipMain,
)
if char_name in dmgMap:
for action in dmgMap[char_name]:
if action['seq'] == seq:
cal = action
break
else:
if '钟离' in char_name:
cal = dmgMap[char_name][-1]
else:
cal = dmgMap[char_name][0]
print(seq)
print(cal)
if cal['action'] == 'E刹那之花':
effect_prop = defense
elif cal['key'] == '攻击力':
effect_prop = attack
elif cal['key'] == '防御力':
effect_prop = defense
elif cal['key'] == '血量':
effect_prop = hp
else:
effect_prop = attack
dmgBonus_value_cal = 0
dmgBonus_cal = dmgBonus
em_cal = em
if '夜兰' in char_name:
effect_prop = hp
elif '胡桃' in char_name:
effect_prop += (
0.4 * hp
if 0.4 * hp <= fight_prop['baseAtk'] * 4
else fight_prop['baseAtk'] * 4
)
elif '一斗' in char_name:
effect_prop += 0.9792 * defense
dmgBonus_value_cal += 0.35 * defense
elif '诺艾尔' in char_name:
effect_prop = attack
effect_prop += 1.3 * defense
elif '烟绯' in char_name:
dmgBonus_value_cal += 0.6 + 0.2
elif '优菈' in char_name:
r = 1.065
elif '钟离' in char_name:
r = 1.05
elif '辛焱' in char_name:
r = 1.025
if '踩班' in cal['action']:
effect_prop += 1202
effect_prop += fight_prop['baseAtk'] * 0.25
if '雾切' in weaponName:
dmgBonus_cal += 0.28
elif '弓藏' in weaponName and (
'' in cal['action']
or '' in cal['action']
or '两段' in cal['action']
):
dmgBonus_cal += 0.8
elif '飞雷' in weaponName and (
'' in cal['action']
or '' in cal['action']
or '两段' in cal['action']
):
dmgBonus_cal += 0.4
elif '阿莫斯' in weaponName:
dmgBonus_cal += 0.52
elif '破魔' in weaponName:
dmgBonus_cal += 0.18 * 2
elif '赤角石溃杵' in weaponName and (
'' in cal['action']
or '' in cal['action']
or '两段' in cal['action']
):
dmgBonus_value_cal += 0.4 * defense
elif '螭骨剑' in weaponName:
dmgBonus_cal += 0.4
elif '松籁响起之时' in weaponName:
effect_prop += fight_prop['baseAtk'] * 0.2
elif '试作澹月' in weaponName:
effect_prop += fight_prop['baseAtk'] * 0.72
elif '流浪乐章' in weaponName and '烟绯' in char_name:
em_cal += 480
elif '冬极' in weaponName:
effect_prop += fight_prop['baseAtk'] * 0.48
dmgBonus_cal += 0.12
if '蒸发' in cal['action'] or '融化' in cal['action']:
k = 0
if '蒸发' in cal['action']:
if raw_data['avatarElement'] == 'Pyro':
k = 1.5
else:
k = 2
elif '融化' in cal['action']:
if raw_data['avatarElement'] == 'Pyro':
k = 2
else:
k = 1.5
if equipSets['type'] in ['2', '']:
a = 0
else:
if '魔女' in equipSets['set']:
a = 0.15
else:
a = 0
add_dmg = k * (1 + (2.78 * em_cal) / (em_cal + 1400) + a)
else:
add_dmg = 1
if equipSets['type'] in ['2', '', '22']:
pass
else:
if '追忆' in equipSets['set']:
dmgBonus_cal += 0.5
elif '绝缘' in equipSets['set']:
Bouns = ce * 0.25 if ce * 0.25 <= 0.75 else 0.75
dmgBonus_cal += Bouns
elif '乐团' in equipSets['set']:
if weaponType in ['法器', '']:
dmgBonus_cal += 0.35
elif '华馆' in equipSets['set']:
if raw_data['avatarElement'] == 'Geo':
effect_prop += 0.24 * defense
dmgBonus_cal += 0.24
critdmg_cal = critdmg
healBouns_cal = healBouns
if '' in char_name:
dmgBonus_cal += 0.906
elif '绫华' in char_name:
dmgBonus_cal += 0.18
elif '宵宫' in char_name:
dmgBonus_cal += 0.5
elif '九条' in char_name:
effect_prop += 0.9129 * fight_prop['baseAtk']
critdmg_cal += 0.6
if '治疗' in cal['action']:
if equipSets['type'] in ['2', '']:
healBouns_cal += 0
else:
if '少女' in equipSets['set']:
healBouns_cal += 0.2
if cal['action'] == '扩散':
dmg = 868 * 1.15 * (1 + 0.6 + (16 * em_cal) / (em_cal + 2000))
elif '霄宫' in char_name:
dmg = (
effect_prop
* cal['power']
* (1 + critdmg_cal)
* (1 + dmgBonus_cal)
* 0.5
* r
* add_dmg
* 1.5879
)
elif '班尼特' in char_name and 'Q治疗' in cal['action']:
power = cal['power'].split('+')
dmg = (effect_prop * float(power[0]) / 100 + float(power[1])) * (
1 + healBouns_cal
)
elif '心海' in char_name and cal['action'] == '开Q普攻':
dmg = (
(attack * cal['power'] + hp * (0.0971 + 0.15 * healBouns_cal))
* (1 + dmgBonus_cal)
* 0.5
* r
* add_dmg
)
elif '心海' in char_name and cal['action'] == '水母回血':
dmg = (862 + 0.0748 * hp) * (1 + healBouns_cal)
elif char_name in ['芭芭拉', '早柚', '', '七七']:
power = cal['power'].split('+')
dmg = (effect_prop * float(power[0]) / 100 + float(power[1])) * (
1 + healBouns_cal
)
elif '绫人' in char_name:
dmg = (
(effect_prop * cal['power'] + 0.0222 * hp)
* (1 + critdmg_cal)
* (1 + dmgBonus_cal)
* 0.5
* r
* add_dmg
* 1.5879
)
elif char_name in ['荒泷一斗', '诺艾尔']:
dmg = (
(effect_prop * cal['power'] + dmgBonus_value_cal)
* (1 + critdmg_cal)
* (1 + dmgBonus_cal)
* 0.5
* r
)
elif '迪奥娜' in char_name:
dmg = (effect_prop * cal['power'] + 1905) * 1.9
elif '钟离' in char_name and 'E实际盾值' in cal['action']:
dmg = (2506 + hp * cal['power']) * 1.5 * 1.3
elif cal['action'] == 'Q开盾天星':
effect_prop = attack
dmg = (
(effect_prop * cal['power'] + 0.33 * hp)
* (1 + critdmg_cal)
* (1 + dmgBonus_cal)
* 0.5
* r
* add_dmg
)
elif '凝光' in char_name:
dmg = (
effect_prop
* cal['power']
* (1 + critdmg_cal * critrate)
* (1 + dmgBonus_cal)
* 0.5
* r
* add_dmg
)
elif isinstance(cal['power'], str):
if cal['power'] == '攻击力':
dmg = attack
elif cal['power'] == '防御力':
dmg = defense
else:
power = cal['power'].split('+')
dmg = effect_prop * float(power[0]) / 100 + float(power[1])
elif cal['val'] != 'any':
dmg = (
effect_prop
* cal['power']
* (1 + critdmg_cal)
* (1 + dmgBonus_cal)
* 0.5
* r
* add_dmg
)
else:
dmg = attack
print(dmg)
if cal['val'] != 'any':
percent = '{:.2f}'.format(dmg / cal['val'] * 100)
elif cal['power'] == '攻击力':
percent = '{:.2f}'.format(dmg / cal['atk'] * 100)
elif '云堇' in char_name:
percent = '{:.2f}'.format(dmg / cal['other2'] * 100)
elif cal['power'] == '防御力':
percent = '{:.2f}'.format(dmg / cal['other'] * 100)
return percent
async def draw_char_img(
raw_data: dict, charUrl: Optional[str] = None
) -> bytes:
@ -560,7 +227,17 @@ async def draw_char_img(
y2 = new_h / 2 + based_new_h / 2 - offset_y / 2
char_img = bg_img2.crop((x1, y1, x2, y2)) # type: ignore
dmg_img, dmg_len = await draw_dmgCacl_img(raw_data)
with open(DMG_PATH / 'char_action.json', "r", encoding='UTF-8') as f:
char_action = json.load(f)
# 拿到倍率表
power_list = char_action[char_name]
new_prop = await calc_prop(raw_data, power_list)
if char_name not in char_action:
dmg_img, dmg_len = Image.new('RGBA', (950, 1)), 0
else:
dmg_img, dmg_len = await draw_dmgCacl_img(
raw_data, power_list, new_prop
)
img_w, img_h = 950, 1850 + dmg_len * 40
overlay = Image.open(TEXT_PATH / 'overlay.png')
overlay_w, overlay_h = overlay.size
@ -1053,7 +730,7 @@ async def draw_char_img(
genshin_font_origin(50),
anchor='mm',
)
percent = await get_char_percent(raw_data)
percent = await get_char_percent(raw_data, new_prop, char_name)
img_text.text(
(768, 1690),
f'{str(percent)+"%"}',
@ -1088,19 +765,18 @@ async def draw_single_card(
'RGBA', overlay.size, COLOR_MAP[char['avatarElement']]
)
img_base = ImageChops.overlay(color_img, overlay)
'''
if char['char_name'] in avatarCardOffsetMap:
offset_x, offset_y = (
avatarCardOffsetMap[char['char_name']][0],
avatarCardOffsetMap[char['char_name']][1],
)
else:
offset_x, offset_y = 200, 0
'''
offset_x, offset_y = 0, 0
char_img = Image.open(GACHA_PATH / f'{char["char_name"]}.png')
char_img_raw = Image.open(STAND_PATH / f'{char["id"]}.png')
char_img = char_img_raw.resize(
(round(char_img_raw.size[0] * 0.5), round(char_img_raw.size[1] * 0.5))
).convert('RGBA')
img_base.paste(char_img, (-760 + offset_x, 110 + offset_y), char_img)
offset_x, offset_y = 0, 0
if char['char_name'] == '八重神子':
offset_x = -100
elif char['char_name'] == '早柚':
offset_x = 50
img_base.paste(char_img, (-380 + offset_x, 200 + offset_y), char_img)
img_card.paste(img_base, (-25, -260), char_card_mask)
img_card = Image.alpha_composite(img_card, char_card_1)
# img_card.paste(img_card, (0, 0), img_card)
@ -1189,6 +865,8 @@ async def draw_cahrcard_list(uid: str, limit: int = 24) -> Union[str, bytes]:
return '你还没有已缓存的角色!\n请先使用【强制刷新】进行刷新!'
char_done_list = []
with open(DMG_PATH / 'char_action.json', "r", encoding='UTF-8') as f:
char_action = json.load(f)
for char_name in char_list:
temp = {}
with open(uid_fold / f'{char_name}.json', 'r', encoding='UTF-8') as f:
@ -1198,9 +876,13 @@ async def draw_cahrcard_list(uid: str, limit: int = 24) -> Union[str, bytes]:
skillList = raw_data['avatarSkill']
temp['char_name'] = char_name
temp['id'] = raw_data['avatarId']
temp['avatarEnName'] = raw_data['avatarEnName']
temp['avatarElement'] = raw_data['avatarElement']
temp['percent'] = await get_char_percent(raw_data)
# 拿到倍率表
power_list = char_action[char_name]
new_prop = await calc_prop(raw_data, power_list)
temp['percent'] = await get_char_percent(raw_data, new_prop, char_name)
temp['critrate'] = fight_prop['critRate']
temp['critdmg'] = fight_prop['critDmg']
baseHp = fight_prop['baseHp']

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -2,16 +2,27 @@ import json
import asyncio
from pathlib import Path
import httpx
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'
ETC_PATH = Path(__file__).parents[1] / 'genshinuid_enka' / 'dmgCalc'
async def get_misc_info(mode: str, name: str):
"""
:说明:
一些杂项信息
:参数:
* name (str): 'enemies', 'foods', 'artifacts'
* name (str): 参数
:返回:
* data (str): 获取数据信息
"""
url = 'https://info.minigg.cn/{}'.format(mode)
req = httpx.get(url=url, params={'query': name})
return req.json()
async def getEquipName(name: str) -> str:
@ -26,13 +37,14 @@ async def panle2Json() -> None:
访问DATA_PATH并转换数据为dmgMap.json
"""
wb = openpyxl.load_workbook(
str(DATA_PATH / '参考面板2.7(上).xlsx'), data_only=True
str(DATA_PATH / '参考面板3.0.xlsx'), data_only=True
)
sheet = wb.active
result = {}
char_result = []
char_temp = ''
title = 0
for row in range(9, 300):
temp = {}
char_name = sheet.cell(row, 1).value
@ -52,78 +64,26 @@ async def panle2Json() -> None:
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
other = {}
for i in [9, 10]:
if sheet.cell(title, i).value is not None:
n = str(sheet.cell(title, i).value)
if '加成' in n:
continue
if sheet.cell(row, i).value is not None:
v = float(str(sheet.cell(row, i).value))
if v:
other[sheet.cell(title, i).value] = v
crit_rate = sheet.cell(row, 13).value
crit_dmg = sheet.cell(row, 14).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['critRate'] = crit_rate
temp['critDmg'] = crit_dmg
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
@ -134,10 +94,21 @@ async def panle2Json() -> None:
else:
char_temp = char_name
char_result.append(temp)
if row == 263:
if row == 296:
print('ok!')
result[char_temp] = char_result
with open(DATA_PATH / 'dmgMap.json', 'w', encoding='UTF-8') as file:
else:
title = row
result['旅行者'] = [
{
"seq": "护摩之杖|无锋剑|生火暴",
"critRate": 0.65,
"critDmg": 1.55,
"atk": 2300,
"other": {"生命": 16000, "元素精通": 45},
}
]
with open(ETC_PATH / 'dmgMap.json', 'w', encoding='UTF-8') as file:
json.dump(result, file, ensure_ascii=False)