From cdc70a4dfe061e78a9d0b9f5ba758a26a1a942d2 Mon Sep 17 00:00:00 2001 From: qwerdvd <2450899274@qq.com> Date: Wed, 28 Jun 2023 20:07:39 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=E5=AE=9E=E9=AA=8C=E6=80=A7=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=AF=84=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starrailuid_charinfo/draw_char_img.py | 117 ++++- StarRailUID/starrailuid_charinfo/to_card.py | 35 +- StarRailUID/starrailuid_charinfo/to_data.py | 4 +- StarRailUID/utils/map/SR_MAP_PATH.py | 4 + .../utils/map/data/AvatarRelicScore.json | 434 ++++++++++++++++++ poetry.lock | 24 +- 6 files changed, 573 insertions(+), 45 deletions(-) create mode 100644 StarRailUID/utils/map/data/AvatarRelicScore.json diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 46a8b95..8f13451 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -15,8 +15,13 @@ from .mono.Character import Character from ..utils.error_reply import CHAR_HINT from ..utils.fonts.first_world import fw_font_28 from ..utils.excel.read_excel import light_cone_ranks -from ..utils.map.SR_MAP_PATH import RelicId2Rarity, avatarId2Name from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name +from ..utils.map.SR_MAP_PATH import ( + RelicId2Rarity, + AvatarRelicScore, + avatarId2Name, + avatarId2DamageType, +) from ..utils.resource.RESOURCE_PATH import ( RELIC_PATH, SKILL_PATH, @@ -61,7 +66,6 @@ skill_type_map = { 'Maze': ('秘技', 'technique'), } - RELIC_POS = { '1': (26, 1162), '2': (367, 1162), @@ -265,7 +269,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): char_info.paste(attr_bg, (475, 300), attr_bg) # 命座 - for rank in range(0, 6): + for rank in range(6): rank_bg = Image.open(TEXT_PATH / 'mz_bg.png') rank_no_bg = Image.open(TEXT_PATH / 'mz_no_bg.png') if rank < char.char_rank: @@ -401,6 +405,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): relic_score = 0 for relic in char.char_relic: + print(relic) rarity = RelicId2Rarity[str(relic["relicId"])] relic_img = Image.open(TEXT_PATH / f'yq_bg{rarity}.png') if str(relic["SetId"])[0] == '3': @@ -438,6 +443,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): # 主属性 main_value = mp.mpf(relic['MainAffix']['Value']) main_name: str = relic['MainAffix']['Name'] + main_property: str = relic['MainAffix']['Property'] main_level: int = relic['Level'] if main_name in ['攻击力', '生命值', '防御力', '速度']: @@ -473,14 +479,35 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): anchor='mm', ) + single_relic_score = 0 + main_value_score = await get_relic_score( + relic['MainAffix']['Property'], main_value, char_name, True + ) + if main_property.__contains__('AddedRatio') and relic['Type'] == 5: + attr_name = main_property.split('AddedRatio')[0] + if attr_name == avatarId2DamageType[str(char.char_id)]: + for item in AvatarRelicScore: + if item['role'] == char_name: + weight_dict = item + add_value = ( + (main_value + 1) + * 1 + * weight_dict['AttributeAddedRatio'] + * 10 + ) + single_relic_score += add_value + print(f'main_value_score: {main_value_score}') + single_relic_score += main_value_score for index, i in enumerate(relic['SubAffixList']): subName: str = i['Name'] subValue = mp.mpf(i['Value']) subProperty = i['Property'] - if subProperty == 'CriticalDamageBase': - relic_score += subValue - if subProperty == 'CriticalChanceBase': - relic_score += subValue * 2 + + tmp_score = await get_relic_score( + subProperty, subValue, char_name, False + ) + single_relic_score += tmp_score + if subName in ['攻击力', '生命值', '防御力', '速度']: subValueStr = nstr(subValue, 3) else: @@ -503,17 +530,26 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): sr_font_26, anchor='rm', ) + relic_img_draw.text( + (210, 195), + '{}分'.format(int(single_relic_score)), + (255, 255, 255), + sr_font_28, + anchor='rm', + ) char_info.paste( relic_img, RELIC_POS[str(relic["Type"])], relic_img ) - if relic_score > 1: + relic_score += single_relic_score + print(relic_score) + if relic_score > 200: relic_value_level = Image.open(TEXT_PATH / 'CommonIconS.png') char_info.paste(relic_value_level, (780, 963), relic_value_level) - elif relic_score > 0.6: + elif relic_score > 150: relic_value_level = Image.open(TEXT_PATH / 'CommonIconA.png') char_info.paste(relic_value_level, (780, 963), relic_value_level) - elif relic_score > 0.3: + elif relic_score > 100: relic_value_level = Image.open(TEXT_PATH / 'CommonIconB.png') char_info.paste(relic_value_level, (780, 963), relic_value_level) elif relic_score > 0: @@ -590,3 +626,64 @@ async def get_char_data( with open(path, 'r', encoding='utf8') as fp: char_data = json.load(fp) return char_data + + +async def get_relic_score( + subProperty: str, subValue, char_name: str, is_main: bool +) -> float: + relic_score = 0 + weight_dict = {} + for item in AvatarRelicScore: + if item['role'] == char_name: + weight_dict = item + if weight_dict == {}: + return 0 + if subProperty == 'CriticalDamageBase': + add_value = (subValue + 1) * 1 * weight_dict['CriticalDamageBase'] * 10 + relic_score += add_value + if subProperty == 'CriticalChanceBase': + add_value = (subValue + 1) * 2 * weight_dict['CriticalChanceBase'] * 10 + relic_score += add_value + if subProperty == 'AttackDelta' and not is_main: + add_value = subValue * 0.3 * 0.5 * weight_dict['AttackDelta'] * 0.1 + relic_score += add_value + if subProperty == 'DefenceDelta' and not is_main: + add_value = subValue * 0.3 * 0.5 * weight_dict['DefenceDelta'] * 0.1 + relic_score += add_value + if subProperty == 'HPDelta' and not is_main: + add_value = subValue * 0.3 * 0.5 * weight_dict['HPDelta'] * 0.1 + relic_score += add_value + if subProperty == 'AttackAddedRatio': + add_value = (subValue + 1) * 1.5 * weight_dict['AttackAddedRatio'] * 10 + relic_score += add_value + if subProperty == 'DefenceAddedRatio': + add_value = ( + (subValue + 1) * 1.19 * weight_dict['DefenceAddedRatio'] * 10 + ) + relic_score += add_value + if subProperty == 'HPAddedRatio': + add_value = (subValue + 1) * 1.5 * weight_dict['HPAddedRatio'] * 10 + relic_score += add_value + if subProperty == 'SpeedDelta': + add_value = subValue * 2.53 * weight_dict['SpeedDelta'] + relic_score += add_value + if subProperty == 'BreakDamageAddedRatioBase': + add_value = ( + (subValue + 1) + * 1.0 + * weight_dict['BreakDamageAddedRatioBase'] + * 10 + ) + relic_score += add_value + if subProperty == 'StatusProbabilityBase': + add_value = ( + (subValue + 1) * 1.49 * weight_dict['StatusProbabilityBase'] * 10 + ) + relic_score += add_value + if subProperty == 'StatusResistanceBase': + add_value = ( + (subValue + 1) * 1.49 * weight_dict['StatusResistanceBase'] * 10 + ) + relic_score += add_value + print(f'{subProperty} : {relic_score}') + return relic_score diff --git a/StarRailUID/starrailuid_charinfo/to_card.py b/StarRailUID/starrailuid_charinfo/to_card.py index 82c2c54..b8945c1 100644 --- a/StarRailUID/starrailuid_charinfo/to_card.py +++ b/StarRailUID/starrailuid_charinfo/to_card.py @@ -33,17 +33,14 @@ async def api_to_card( ) -> Union[str, bytes]: char_data_list = await api_to_dict(uid, enka_data) print(char_data_list) - if isinstance(char_data_list, str): - if ('服务器正在维护或者关闭中' in char_data_list) or ('网络不太稳定' in char_data_list): - return await convert_img(pic_500) - else: - return await convert_img(pic_500) - else: - if char_data_list == []: - return await convert_img(pic_500) + if ( + not isinstance(char_data_list, str) + and char_data_list == [] + or isinstance(char_data_list, str) + ): + return await convert_img(pic_500) - img = await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1) - return img + return await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1) async def draw_enka_card( @@ -60,13 +57,10 @@ async def draw_enka_card( ) if showfrom == 0: line1 = f'展柜内有 {len(char_data_list)} 个角色!' + elif char_data_list is None: + return await convert_img(Image.new('RGBA', (0, 1), (255, 255, 255))) else: - if char_data_list is None: - return await convert_img( - Image.new('RGBA', (0, 1), (255, 255, 255)) - ) - else: - line1 = f'UID {str(uid)} 刷新成功' + line1 = f'UID {uid} 刷新成功' # print(char_list) line2 = f'可以使用 sr查询{char_data_list[0]["avatarName"]} 查询详情角色面板' char_num = len(char_data_list) @@ -163,10 +157,11 @@ async def draw_enka_char(index: int, img: Image.Image, char_data: dict): char_temp.paste(char_img, (8, 8), char_img) char_card.paste(char_temp, (0, 0), char_mask) if index <= 7: - if img.size[0] <= 1100: - x = 60 + (index % 4) * 220 - else: - x = 160 + (index % 4) * 220 + x = ( + 60 + (index % 4) * 220 + if img.size[0] <= 1100 + else 160 + (index % 4) * 220 + ) img.paste( char_card, (x, 187 + (index // 4) * 220), diff --git a/StarRailUID/starrailuid_charinfo/to_data.py b/StarRailUID/starrailuid_charinfo/to_data.py index 1e45131..5ca08ed 100644 --- a/StarRailUID/starrailuid_charinfo/to_data.py +++ b/StarRailUID/starrailuid_charinfo/to_data.py @@ -47,9 +47,7 @@ async def api_to_dict( """ if '未找到绑定的UID' in sr_uid: return UID_HINT - if sr_data: - pass - else: + if not sr_data: try: sr_data = await get_char_card_info(sr_uid) except ReadTimeout: diff --git a/StarRailUID/utils/map/SR_MAP_PATH.py b/StarRailUID/utils/map/SR_MAP_PATH.py index 70530a0..a8d5b85 100644 --- a/StarRailUID/utils/map/SR_MAP_PATH.py +++ b/StarRailUID/utils/map/SR_MAP_PATH.py @@ -34,6 +34,7 @@ ItemId2Name_fileName = f'ItemId2Name_mapping_{version}.json' RelicId2MainAffixGroup_fileName = ( f'RelicId2MainAffixGroup_mapping_{version}.json' ) +AvatarRelicScore_fileName = 'AvatarRelicScore.json' class TS(TypedDict): @@ -110,3 +111,6 @@ with open(MAP / ItemId2Name_fileName, 'r', encoding='UTF-8') as f: with open(MAP / RelicId2MainAffixGroup_fileName, 'r', encoding='UTF-8') as f: RelicId2MainAffixGroup = msgjson.decode(f.read(), type=Dict[str, int]) + +with open(MAP / AvatarRelicScore_fileName, 'r', encoding='UTF-8') as f: + AvatarRelicScore = msgjson.decode(f.read(), type=List[Dict]) diff --git a/StarRailUID/utils/map/data/AvatarRelicScore.json b/StarRailUID/utils/map/data/AvatarRelicScore.json new file mode 100644 index 0000000..b15176e --- /dev/null +++ b/StarRailUID/utils/map/data/AvatarRelicScore.json @@ -0,0 +1,434 @@ +[ + { + "role": "景元", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "希儿", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "布洛妮娅", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "杰帕德", + "HPDelta": 0.5, + "HPAddedRatio": 0.5, + "AttackDelta": 0.0, + "AttackAddedRatio": 0.0, + "DefenceDelta": 1.0, + "DefenceAddedRatio": 1.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.5, + "StatusResistanceBase": 0.5, + "AttributeAddedRatio": 0 + }, + { + "role": "姬子", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.5, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "瓦尔特", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 1.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "彦卿", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.75, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "白露", + "HPDelta": 1.0, + "HPAddedRatio": 1.0, + "AttackDelta": 0.0, + "AttackAddedRatio": 0.0, + "DefenceDelta": 0.5, + "DefenceAddedRatio": 0.5, + "SpeedDelta": 0.75, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 1, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.5, + "AttributeAddedRatio": 0 + }, + { + "role": "克拉拉", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "三月七", + "HPDelta": 0.5, + "HPAddedRatio": 0.5, + "AttackDelta": 0.0, + "AttackAddedRatio": 0.0, + "DefenceDelta": 1.0, + "DefenceAddedRatio": 1.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.5, + "StatusResistanceBase": 0.5, + "AttributeAddedRatio": 0 + }, + { + "role": "丹恒", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "阿兰", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "艾丝妲", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.75, + "HealRatio": 0, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "黑塔", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "希露瓦", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "娜塔莎", + "HPDelta": 1.0, + "HPAddedRatio": 1.0, + "AttackDelta": 0.0, + "AttackAddedRatio": 0.0, + "DefenceDelta": 0.5, + "DefenceAddedRatio": 0.5, + "SpeedDelta": 0.75, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 1, + "SPRatio": 0.75, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.5, + "AttributeAddedRatio": 0 + }, + { + "role": "佩拉", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 1.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "桑博", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 1.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "虎克", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "青雀", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "停云", + "HPDelta": 0.5, + "HPAddedRatio": 0.5, + "AttackDelta": 1.0, + "AttackAddedRatio": 1.0, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 1.0, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 0 + }, + { + "role": "素裳", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.5, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + }, + { + "role": "开拓者火", + "HPDelta": 0.5, + "HPAddedRatio": 0.5, + "AttackDelta": 0.0, + "AttackAddedRatio": 0.0, + "DefenceDelta": 0.1, + "DefenceAddedRatio": 0.1, + "SpeedDelta": 1.0, + "CriticalChanceBase": 0, + "CriticalDamageBase": 0, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.0, + "StatusProbabilityBase": 1.0, + "StatusResistanceBase": 0.5, + "AttributeAddedRatio": 0 + }, + { + "role": "开拓者物理", + "HPDelta": 0.0, + "HPAddedRatio": 0.0, + "AttackDelta": 0.75, + "AttackAddedRatio": 0.75, + "DefenceDelta": 0.0, + "DefenceAddedRatio": 0.0, + "SpeedDelta": 0.75, + "CriticalChanceBase": 1, + "CriticalDamageBase": 1, + "BreakDamageAddedRatioBase": 0.0, + "HealRatio": 0, + "SPRatio": 0.5, + "StatusProbabilityBase": 0.0, + "StatusResistanceBase": 0.0, + "AttributeAddedRatio": 1 + } +] \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index f3488c7..3b8ca14 100644 --- a/poetry.lock +++ b/poetry.lock @@ -598,14 +598,14 @@ files = [ [[package]] name = "platformdirs" -version = "3.6.0" +version = "3.8.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.6.0-py3-none-any.whl", hash = "sha256:ffa199e3fbab8365778c4a10e1fbf1b9cd50707de826eb304b50e57ec0cc8d38"}, - {file = "platformdirs-3.6.0.tar.gz", hash = "sha256:57e28820ca8094678b807ff529196506d7a21e17156cb1cddb3e74cebce54640"}, + {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, + {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, ] [package.extras] @@ -614,14 +614,14 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- [[package]] name = "pluggy" -version = "1.1.0" +version = "1.2.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pluggy-1.1.0-py3-none-any.whl", hash = "sha256:d81d19a3a88d82ed06998353ce5d5c02587ef07ee2d808ae63904ab0ccef0087"}, - {file = "pluggy-1.1.0.tar.gz", hash = "sha256:c500b592c5512df35622e4faf2135aa0b7e989c7d31344194b4afb9d5e47b1bf"}, + {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] [package.extras] @@ -758,14 +758,14 @@ files = [ [[package]] name = "pytest" -version = "7.3.2" +version = "7.4.0" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"}, - {file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -887,14 +887,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "67.8.0" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, - {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras]