diff --git a/StarRailUID/starrailuid_charinfo/__init__.py b/StarRailUID/starrailuid_charinfo/__init__.py index 9dd28f8..3030ca1 100644 --- a/StarRailUID/starrailuid_charinfo/__init__.py +++ b/StarRailUID/starrailuid_charinfo/__init__.py @@ -13,10 +13,6 @@ from ..utils.convert import get_uid from ..utils.error_reply import UID_HINT from ..utils.image.convert import convert_img from .draw_char_img import draw_char_info_img - -# from ..utils.map.GS_MAP_PATH import alias_data -# from .draw_char_rank import draw_cahrcard_list -# from .get_enka_img import draw_enka_img, get_full_char from ..utils.resource.RESOURCE_PATH import TEMP_PATH sv_char_info_config = SV('sr面板设置', pm=2) diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index af3492b..76404ed 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -1,12 +1,80 @@ import re import json +from pathlib import Path from typing import Dict, Union, Optional +from mpmath import mp, nstr +from PIL import Image, ImageDraw +from gsuid_core.logger import logger from gsuid_core.utils.error_reply import CHAR_HINT +from gsuid_core.utils.image.convert import convert_img +from gsuid_core.utils.image.image_tools import draw_text_by_line from .mono.Character import Character -from ..utils.resource.RESOURCE_PATH import PLAYER_PATH +from ..utils.map.SR_MAP_PATH import RelicId2Rarity +from ..utils.excel.read_excel import light_cone_ranks from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name +from ..utils.resource.RESOURCE_PATH import ( + RELIC_PATH, + SKILL_PATH, + PLAYER_PATH, + WEAPON_PATH, + CHAR_PORTRAIT, +) +from ..utils.fonts.starrail_fonts import ( + sr_font_20, + sr_font_23, + sr_font_24, + sr_font_26, + sr_font_28, + sr_font_34, + sr_font_38, +) + +mp.dps = 14 + +TEXT_PATH = Path(__file__).parent / 'texture2D' + +bg_img = Image.open(TEXT_PATH / "bg.png") +white_color = (213, 213, 213) + +NUM_MAP = { + 0: '零', + 1: '一', + 2: '二', + 3: '三', + 4: '四', + 5: '五', + 6: '六', +} + +RANK_MAP = { + 1: '_rank1.png', + 2: '_rank2.png', + 3: '_ultimate.png', + 4: '_rank4.png', + 5: '_skill.png', + 6: '_rank6.png', +} + +skill_type_map = { + 'Normal': ('普攻', 'basic_atk'), + 'BPSkill': ('战技', 'skill'), + 'Ultra': ('终结技', 'ultimate'), + '': ('天赋', 'talent'), + 'MazeNormal': 'dev_连携', + 'Maze': ('秘技', 'technique'), +} + + +RELIC_POS = { + '1': (26, 1162), + '2': (367, 1162), + '3': (700, 1162), + '4': (26, 1593), + '5': (367, 1593), + '6': (700, 1593), +} async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): @@ -14,8 +82,396 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): char_name = ' '.join(re.findall('[\u4e00-\u9fa5]+', raw_mes)) char_data = await get_char_data(sr_uid, char_name) - print(char_data) - await cal_char_info(char_data) + char = await cal_char_info(char_data) + + # 放角色立绘 + char_info = bg_img.copy() + char_img = Image.open(CHAR_PORTRAIT / f'{char.char_id}.png').resize( + (1050, 1050) + ) + char_info.paste(char_img, (-140, -100), char_img) + + # 放属性图标 + attr_img = Image.open(TEXT_PATH / f'IconAttribute{char.char_element}.png') + char_info.paste(attr_img, (580, 131), attr_img) + + # 放角色名 + char_img_draw = ImageDraw.Draw(char_info) + char_img_draw.text( + (690, 175), char.char_name, white_color, sr_font_38, 'mm' + ) + + # 放等级 + char_img_draw.text( + (765, 183), f'LV.{str(char.char_level)}', white_color, sr_font_20, 'mm' + ) + + # 放星级 + rarity_img = Image.open( + TEXT_PATH / f'LightCore_Rarity{char.char_rarity}.png' + ).resize((306, 72)) + char_info.paste(rarity_img, (540, 198), rarity_img) + + # 放命座 + rank_img = Image.open(TEXT_PATH / 'ImgNewBg.png') + rank_img_draw = ImageDraw.Draw(rank_img) + rank_img_draw.text( + (70, 44), f'{NUM_MAP[char.char_rank]} 命', white_color, sr_font_28, 'mm' + ) + char_info.paste(rank_img, (772, 190), rank_img) + + # 放属性列表 + attr_bg = Image.open(TEXT_PATH / 'attr_bg.png') + attr_bg_draw = ImageDraw.Draw(attr_bg) + # 生命值 + hp = mp.mpf(char.base_attributes.get('hp')) + add_hp = mp.mpf( + char.add_attr['HPDelta'] if char.add_attr.get('HPDelta') else 0 + ) + hp * mp.mpf( + char.add_attr['HPAddedRatio'] + if char.add_attr.get('HPAddedRatio') + else 0 + ) + hp = int(mp.floor(hp)) + add_hp = int(mp.floor(add_hp)) + attr_bg_draw.text( + (500, 31), f'{hp + add_hp} (+{add_hp})', white_color, sr_font_26, 'rm' + ) + # 攻击力 + attack = mp.mpf(char.base_attributes['attack']) + add_attack = mp.mpf( + char.add_attr['AttackDelta'] if char.add_attr.get('AttackDelta') else 0 + ) + attack * mp.mpf( + char.add_attr['AttackAddedRatio'] + if char.add_attr.get('AttackAddedRatio') + else 0 + ) + atk = int(mp.floor(attack)) + add_attack = int(mp.floor(add_attack)) + attr_bg_draw.text( + (500, 31 + 48), + f'{atk + add_attack} (+{add_attack})', + white_color, + sr_font_26, + 'rm', + ) + # 防御力 + defence = mp.mpf(char.base_attributes['defence']) + add_defence = mp.mpf( + char.add_attr.get('DefenceDelta') + if char.add_attr.get('DefenceDelta') + else 0 + ) + defence * mp.mpf( + char.add_attr.get('DefenceAddedRatio') + if char.add_attr.get('DefenceAddedRatio') + else 0 + ) + defence = int(mp.floor(defence)) + add_defence = int(mp.floor(add_defence)) + attr_bg_draw.text( + (500, 31 + 48 * 2), + f'{defence + add_defence} (+{add_defence})', + white_color, + sr_font_26, + 'rm', + ) + # 速度 + speed = mp.mpf(char.base_attributes['speed']) + add_speed = mp.mpf( + char.add_attr['SpeedDelta'] if char.add_attr.get('SpeedDelta') else 0 + ) + speed = int(mp.floor(speed)) + add_speed = int(mp.floor(add_speed)) + attr_bg_draw.text( + (500, 31 + 48 * 3), + f'{speed + add_speed} (+{add_speed})', + white_color, + sr_font_26, + 'rm', + ) + # 暴击率 + critical_chance = mp.mpf(char.base_attributes['CriticalChance']) + critical_chance_base = mp.mpf( + char.add_attr['CriticalChanceBase'] + if char.add_attr.get('CriticalChanceBase') + else 0 + ) + critical_chance = (critical_chance + critical_chance_base) * 100 + critical_chance = nstr(critical_chance, 3) + attr_bg_draw.text( + (500, 31 + 48 * 4), + f'{critical_chance}%', + white_color, + sr_font_26, + 'rm', + ) + # 暴击伤害 + critical_damage = mp.mpf(char.base_attributes['CriticalDamage']) + critical_damage_base = mp.mpf( + char.add_attr['CriticalDamageBase'] + if char.add_attr.get('CriticalDamageBase') + else 0 + ) + critical_damage = (critical_damage + critical_damage_base) * 100 + critical_damage = nstr(critical_damage, 4) + attr_bg_draw.text( + (500, 31 + 48 * 5), + f'{critical_damage}%', + white_color, + sr_font_26, + 'rm', + ) + # 效果命中 + status_probability_base = ( + mp.mpf( + char.add_attr.get('StatusProbabilityBase') + if char.add_attr.get('StatusProbabilityBase') + else 0 + ) + * 100 + ) + status_probability = nstr(status_probability_base, 3) + attr_bg_draw.text( + (500, 31 + 48 * 6), + f'{status_probability}%', + white_color, + sr_font_26, + 'rm', + ) + # 效果抵抗 + status_resistance_base = ( + mp.mpf( + char.add_attr['StatusResistanceBase'] + if char.add_attr.get('StatusResistanceBase') + else 0 + ) + * 100 + ) + status_resistance = nstr(status_resistance_base, 3) + attr_bg_draw.text( + (500, 31 + 48 * 7), + f'{status_resistance}%', + white_color, + sr_font_26, + 'rm', + ) + char_info.paste(attr_bg, (517, 265), attr_bg) + + # 命座 + lock_img = Image.open(TEXT_PATH / 'icon_lock.png').resize((50, 50)) + for rank in range(0, 6): + rank_bg = Image.open(TEXT_PATH / 'mz_bg.png') + if rank < char.char_rank: + rank_img = Image.open( + SKILL_PATH / f'{char.char_id}{RANK_MAP[rank + 1]}' + ).resize((50, 50)) + rank_bg.paste(rank_img, (19, 19), rank_img) + char_info.paste(rank_bg, (20 + rank * 80, 630), rank_bg) + else: + rank_img = Image.open( + SKILL_PATH / f'{char.char_id}{RANK_MAP[rank + 1]}' + ).resize((50, 50)) + rank_bg.paste(rank_img, (19, 19), rank_img) + rank_bg.paste(lock_img, (19, 19), lock_img) + char_info.paste(rank_bg, (20 + rank * 80, 630), rank_bg) + + # 技能 + skill_bg = Image.open(TEXT_PATH / 'skill_bg.png') + i = 0 + for skill in char.char_skill: + skill_attr_img = Image.open(TEXT_PATH / 'skill_attr4.png') + skill_panel_img = Image.open(TEXT_PATH / 'skill_panel.png') + skill_img = Image.open( + SKILL_PATH / f'{char.char_id}_' + f'{skill_type_map[skill["skillAttackType"]][1]}.png' + ).resize((55, 55)) + skill_panel_img.paste(skill_img, (18, 15), skill_img) + skill_panel_img.paste(skill_attr_img, (80, 10), skill_attr_img) + skill_panel_img_draw = ImageDraw.Draw(skill_panel_img) + skill_panel_img_draw.text( + (108, 25), + f'{skill_type_map[skill["skillAttackType"]][0]}', + white_color, + sr_font_26, + 'lm', + ) + skill_panel_img_draw.text( + (89, 55), + f'Lv.{skill["skillLevel"]}', + white_color, + sr_font_26, + 'lm', + ) + skill_panel_img_draw.text( + (60, 88), + f'{skill["skillName"]}', + (105, 105, 105), + sr_font_20, + 'lm', + ) + skill_bg.paste(skill_panel_img, (50 + 187 * i, 35), skill_panel_img) + i += 1 + char_info.paste(skill_bg, (0, 710), skill_bg) + + # 武器 + weapon_bg = Image.open(TEXT_PATH / 'weapon_bg.png') + weapon_id = char.equipment['equipmentID'] + weapon_img = Image.open(WEAPON_PATH / f'{weapon_id}.png').resize( + (240, 240) + ) + weapon_bg.paste(weapon_img, (-10, 50), weapon_img) + weapon_bg_draw = ImageDraw.Draw(weapon_bg) + weapon_bg_draw.text( + (370, 47), + f'{char.equipment["equipmentName"]}', + white_color, + sr_font_34, + 'mm', + ) + weapon_bg_draw.text( + (536, 47), + f'{NUM_MAP[char.equipment["equipmentRank"]]} 阶', + white_color, + sr_font_28, + 'mm', + ) + rarity_img = Image.open( + TEXT_PATH / f'LightCore_Rarity{char.equipment["equipmentRank"]}.png' + ).resize((306, 72)) + weapon_bg.paste(rarity_img, (160, 55), rarity_img) + weapon_bg_draw.text( + (430, 90), + f'Lv.{char.equipment["equipmentLevel"]}', + white_color, + sr_font_28, + 'mm', + ) + + # 武器技能 + desc = light_cone_ranks[str(char.equipment['equipmentID'])]['desc'] + desc_params = light_cone_ranks[str(char.equipment['equipmentID'])][ + 'params' + ][char.equipment['equipmentRank']] + for i in range(0, len(desc_params)): + desc = desc.replace(f'#{i + 1}[i]%', f'{str(desc_params[i] * 100)}%') + for i in range(0, len(desc_params)): + desc = desc.replace(f'#{i + 1}[i]', str(desc_params[i])) + draw_text_by_line(weapon_bg, (220, 115), desc, sr_font_24, '#F9F9F9', 372) + char_info.paste(weapon_bg, (22, 870), weapon_bg) + + # 遗器 + weapon_rank_bg = Image.open(TEXT_PATH / 'rank_bg.png') + char_info.paste(weapon_rank_bg, (690, 880), weapon_rank_bg) + + for relic in char.char_relic: + relic_img = Image.open(TEXT_PATH / 'yq_bg3.png') + if str(relic["SetId"])[0] == '3': + relic_piece_img = Image.open( + RELIC_PATH / f'{relic["SetId"]}_{relic["Type"] - 5}.png' + ) + else: + relic_piece_img = Image.open( + RELIC_PATH / f'{relic["SetId"]}_{relic["Type"] - 1}.png' + ) + relic_piece_new_img = relic_piece_img.resize( + (105, 105), Image.Resampling.LANCZOS + ).convert("RGBA") + relic_img.paste(relic_piece_new_img, (200, 90), relic_piece_new_img) + rarity_img = Image.open( + TEXT_PATH + / f'LightCore_Rarity{RelicId2Rarity[str(relic["relicId"])]}.png' + ).resize((200, 48)) + relic_img.paste(rarity_img, (-20, 80), rarity_img) + relic_img_draw = ImageDraw.Draw(relic_img) + # if len(relic['name']) <= 5: + # main_name = relic['relicName'] + # else: + # main_name = ( + # relic['relicName'][:2] + relic['relicName'][4:] + # ) + if len(relic['name']) <= 5: + main_name = relic['name'] + else: + main_name = relic['name'][:2] + relic['name'][4:] + relic_img_draw.text( + (30, 70), + main_name, + (255, 255, 255), + sr_font_34, + anchor='lm', + ) + + # 主属性 + main_value = mp.mpf(relic['MainAffix']['Value']) + main_name: str = relic['MainAffix']['Name'] + main_level: int = relic['Level'] + + if main_name in ['攻击力', '生命值', '防御力', '速度']: + mainValueStr = nstr(main_value, 3) + else: + mainValueStr = nstr(main_value * 100, 3) + '%' + + mainNameNew = ( + main_name.replace('百分比', '') + .replace('伤害加成', '伤加成') + .replace('属性伤害', '伤害') + ) + + relic_img_draw.text( + (35, 150), + mainNameNew, + (255, 255, 255), + sr_font_28, + anchor='lm', + ) + relic_img_draw.text( + (35, 195), + '+{}'.format(mainValueStr), + (255, 255, 255), + sr_font_28, + anchor='lm', + ) + relic_img_draw.text( + (230, 60), + '+{}'.format(str(main_level)), + (255, 255, 255), + sr_font_23, + anchor='mm', + ) + + # relicScore = 0 + for index, i in enumerate(relic['SubAffixList']): + subName: str = i['Name'] + subValue = mp.mpf(i['Value']) + if subName in ['攻击力', '生命值', '防御力', '速度']: + subValueStr = nstr(subValue, 3) + else: + subValueStr = nstr(subValue * 100, 3) + '%' + subNameStr = subName.replace('百分比', '').replace('元素', '') + # 副词条文字颜色 + relic_color = (255, 255, 255) + + relic_img_draw.text( + (47, 237 + index * 47), + '{}'.format(subNameStr), + relic_color, + sr_font_26, + anchor='lm', + ) + relic_img_draw.text( + (290, 237 + index * 47), + '{}'.format(subValueStr), + relic_color, + sr_font_26, + anchor='rm', + ) + + char_info.paste(relic_img, RELIC_POS[str(relic["Type"])], relic_img) + + # 发送图片 + res = await convert_img(char_info) + logger.info('[sr面板]绘图已完成,等待发送!') + return res async def cal_char_info(char_data: dict): @@ -23,6 +479,7 @@ async def cal_char_info(char_data: dict): await char.get_equipment_info() await char.get_char_attribute_bonus() await char.get_relic_info() + return char async def get_char_data( @@ -30,9 +487,7 @@ async def get_char_data( ) -> Union[Dict, str]: player_path = PLAYER_PATH / str(sr_uid) SELF_PATH = player_path / 'SELF' - print(char_name) char_id = await name_to_avatar_id(char_name) - print(char_id) if '开拓者' in char_name: char_name = '开拓者' else: diff --git a/StarRailUID/starrailuid_charinfo/mono/Character.py b/StarRailUID/starrailuid_charinfo/mono/Character.py index c785fb1..8935ad9 100644 --- a/StarRailUID/starrailuid_charinfo/mono/Character.py +++ b/StarRailUID/starrailuid_charinfo/mono/Character.py @@ -18,6 +18,7 @@ class Character: self.char_id: str = card_prop['avatarId'] self.char_name: str = card_prop['avatarName'] self.char_rank = card_prop['rank'] if card_prop.get('rank') else 0 + self.char_rarity = card_prop['avatarRarity'] self.char_element = card_prop['avatarElement'] self.char_promotion = card_prop['avatarPromotion'] self.char_skill = card_prop['avatarSkill'] @@ -81,7 +82,6 @@ class Character: # 计算圣遗物效果 set_id_list = [] for relic in self.char_relic: - print(json.dumps(relic, ensure_ascii=False)) set_id_list.append(relic['SetId']) # 处理主属性 relic_property = relic['MainAffix']['Property'] diff --git a/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity1.png b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity1.png new file mode 100644 index 0000000..91d5255 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity1.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity2.png b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity2.png new file mode 100644 index 0000000..628aa69 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity2.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity3.png b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity3.png new file mode 100644 index 0000000..cbadf88 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity3.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity4.png b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity4.png new file mode 100644 index 0000000..fbc9e13 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity4.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity5.png b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity5.png new file mode 100644 index 0000000..683f7e5 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/LightCore_Rarity5.png differ diff --git a/StarRailUID/starrailuid_charinfo/texture2D/icon_lock.png b/StarRailUID/starrailuid_charinfo/texture2D/icon_lock.png new file mode 100644 index 0000000..cf1c427 Binary files /dev/null and b/StarRailUID/starrailuid_charinfo/texture2D/icon_lock.png differ diff --git a/StarRailUID/starrailuid_charinfo/to_data.py b/StarRailUID/starrailuid_charinfo/to_data.py index e4fdf0d..f1675a7 100644 --- a/StarRailUID/starrailuid_charinfo/to_data.py +++ b/StarRailUID/starrailuid_charinfo/to_data.py @@ -14,16 +14,19 @@ from .cal_value import cal_relic_sub_affix, cal_relic_main_affix from ..utils.excel.read_excel import AvatarPromotion, EquipmentPromotion from ..utils.map.SR_MAP_PATH import ( SetId2Name, + ItemId2Name, Property2Name, RelicId2SetId, EquipmentID2Name, + EquipmentID2Rarity, rankId2Name, skillId2Name, - skillId2Type, avatarId2Name, + skillId2Effect, avatarId2EnName, avatarId2Rarity, characterSkillTree, + skillId2AttackType, avatarId2DamageType, ) @@ -55,7 +58,6 @@ async def api_to_dict( return [] if isinstance(sr_data, dict): if 'PlayerDetailInfo' not in sr_data: - print(sr_data) im = '服务器正在维护或者关闭中...\n检查lulu api是否可以访问\n如可以访问,尝试上报Bug!' return im elif sr_data is None: @@ -124,7 +126,12 @@ async def get_data(char: dict, sr_data: dict, sr_uid: str): char['AvatarID'] * 100 + behavior['BehaviorID'] % 10 ) skill_temp['skillName'] = skillId2Name[str(skill_temp['skillId'])] - skill_temp['skillType'] = skillId2Type[str(skill_temp['skillId'])] + skill_temp['skillEffect'] = skillId2Effect[ + str(skill_temp['skillId']) + ] + skill_temp['skillAttackType'] = skillId2AttackType[ + str(skill_temp['skillId']) + ] skill_temp['skillLevel'] = behavior['Level'] char_data['avatarSkill'].append(skill_temp) @@ -172,8 +179,9 @@ async def get_data(char: dict, sr_data: dict, sr_uid: str): for relic in char['RelicList']: relic_temp = {} relic_temp['relicId'] = relic['ID'] + relic_temp['relicName'] = ItemId2Name[str(relic['ID'])] relic_temp['SetId'] = int(RelicId2SetId[str(relic['ID'])]) - relic_temp['name'] = SetId2Name[str(relic_temp['SetId'])] + relic_temp['SetName'] = SetId2Name[str(relic_temp['SetId'])] relic_temp['Level'] = relic['Level'] if 'Level' in relic else 1 relic_temp['Type'] = relic['Type'] @@ -275,6 +283,9 @@ async def get_data(char: dict, sr_data: dict, sr_uid: str): equipment_info['equipmentLevel'] = char['EquipmentID']['Level'] equipment_info['equipmentPromotion'] = char['EquipmentID']['Promotion'] equipment_info['equipmentRank'] = char['EquipmentID']['Rank'] + equipment_info['equipmentRarity'] = EquipmentID2Rarity[ + str(equipment_info['equipmentID']) + ] equipment_base_attributes = {} equipment_promotion_base = EquipmentPromotion[ str(equipment_info['equipmentID']) diff --git a/StarRailUID/utils/excel/light_cone_ranks.json b/StarRailUID/utils/excel/light_cone_ranks.json new file mode 100644 index 0000000..c45574d --- /dev/null +++ b/StarRailUID/utils/excel/light_cone_ranks.json @@ -0,0 +1,3148 @@ +{ + "20000": { + "id": "20000", + "skill": "危机", + "desc": "战斗开始时,使装备者的暴击率提高#1[i]%,持续#2[i]回合。", + "params": [ + [ + 0.12, + 3.0 + ], + [ + 0.15, + 3.0 + ], + [ + 0.18, + 3.0 + ], + [ + 0.21, + 3.0 + ], + [ + 0.24, + 3.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20001": { + "id": "20001", + "skill": "繁盛", + "desc": "装备者施放战技和终结技时,治疗量提高#1[i]%。", + "params": [ + [ + 0.12 + ], + [ + 0.15 + ], + [ + 0.18 + ], + [ + 0.21 + ], + [ + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20002": { + "id": "20002", + "skill": "破灭", + "desc": "使装备者普攻和战技造成的伤害提高#1[i]%。", + "params": [ + [ + 0.2 + ], + [ + 0.25 + ], + [ + 0.3 + ], + [ + 0.35 + ], + [ + 0.4 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20003": { + "id": "20003", + "skill": "静滞", + "desc": "使装备者的防御力提高#1[i]%。当装备者当前生命值百分比小于#2[i]%时,其防御力额外提高#3[i]%。", + "params": [ + [ + 0.16, + 0.5, + 0.16 + ], + [ + 0.2, + 0.5, + 0.2 + ], + [ + 0.24, + 0.5, + 0.24 + ], + [ + 0.28, + 0.5, + 0.28 + ], + [ + 0.32, + 0.5, + 0.32 + ] + ], + "properties": [ + [ + { + "type": "DefenceAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.32 + } + ] + ] + }, + "20004": { + "id": "20004", + "skill": "沉沦", + "desc": "战斗开始时,使装备者的效果命中提高#1[i]%,持续#2[i]回合。", + "params": [ + [ + 0.2, + 3.0 + ], + [ + 0.25, + 3.0 + ], + [ + 0.3, + 3.0 + ], + [ + 0.35, + 3.0 + ], + [ + 0.4, + 3.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20005": { + "id": "20005", + "skill": "协力", + "desc": "进入战斗后,使我方全体的攻击力提高#1[i]%。同类技能无法重复生效。", + "params": [ + [ + 0.08 + ], + [ + 0.09 + ], + [ + 0.1 + ], + [ + 0.11 + ], + [ + 0.12 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20006": { + "id": "20006", + "skill": "博识", + "desc": "使装备者终结技造成的伤害提高#1[i]%。", + "params": [ + [ + 0.28 + ], + [ + 0.35 + ], + [ + 0.42 + ], + [ + 0.49 + ], + [ + 0.56 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20007": { + "id": "20007", + "skill": "鸣角", + "desc": "使装备者消灭敌方目标后,攻击力提高#1[i]%,持续#2[i]回合。", + "params": [ + [ + 0.24, + 3.0 + ], + [ + 0.3, + 3.0 + ], + [ + 0.36, + 3.0 + ], + [ + 0.42, + 3.0 + ], + [ + 0.48, + 3.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20008": { + "id": "20008", + "skill": "甘美", + "desc": "战斗开始时,立即为我方全体恢复#1[i]点能量。", + "params": [ + [ + 6.0 + ], + [ + 7.5 + ], + [ + 9.0 + ], + [ + 10.5 + ], + [ + 12.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20009": { + "id": "20009", + "skill": "诛讨", + "desc": "使装备者对当前生命值百分比大于#1[i]%的敌方目标造成的伤害提高#2[i]%。", + "params": [ + [ + 0.5, + 0.2 + ], + [ + 0.5, + 0.25 + ], + [ + 0.5, + 0.3 + ], + [ + 0.5, + 0.35 + ], + [ + 0.5, + 0.4 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20010": { + "id": "20010", + "skill": "兴复", + "desc": "使装备者施放终结技时,回复等同于自身生命上限#1[i]%的生命值。", + "params": [ + [ + 0.18 + ], + [ + 0.21 + ], + [ + 0.24 + ], + [ + 0.27 + ], + [ + 0.3 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20011": { + "id": "20011", + "skill": "追逼", + "desc": "使装备者对减速状态下的敌方目标造成的伤害提高#1[i]%。", + "params": [ + [ + 0.24 + ], + [ + 0.3 + ], + [ + 0.36 + ], + [ + 0.42 + ], + [ + 0.48 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20012": { + "id": "20012", + "skill": "速决", + "desc": "使装备者施放攻击或受到攻击后,额外恢复#1[i]点能量,该效果单个回合内不可重复触发。", + "params": [ + [ + 4.0 + ], + [ + 5.0 + ], + [ + 6.0 + ], + [ + 7.0 + ], + [ + 8.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20013": { + "id": "20013", + "skill": "顿悟", + "desc": "使装备者施放战技后额外恢复#1[i]点能量,该效果单个回合内不可重复触发。", + "params": [ + [ + 8.0 + ], + [ + 9.0 + ], + [ + 10.0 + ], + [ + 11.0 + ], + [ + 12.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20014": { + "id": "20014", + "skill": "联盟", + "desc": "使装备者在消灭敌方目标后,速度提高#1[i]%,持续#2[i]回合。", + "params": [ + [ + 0.1, + 2.0 + ], + [ + 0.12, + 2.0 + ], + [ + 0.14, + 2.0 + ], + [ + 0.16, + 2.0 + ], + [ + 0.18, + 2.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20015": { + "id": "20015", + "skill": "丰饶民", + "desc": "当装备者施放普攻后,使下一次行动提前#1[i]%。", + "params": [ + [ + 0.12 + ], + [ + 0.14 + ], + [ + 0.16 + ], + [ + 0.18 + ], + [ + 0.2 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20016": { + "id": "20016", + "skill": "军团", + "desc": "装备者当前生命值百分比小于#1[i]%时,暴击率提高#2[i]%。", + "params": [ + [ + 0.8, + 0.12 + ], + [ + 0.8, + 0.15 + ], + [ + 0.8, + 0.18 + ], + [ + 0.8, + 0.21 + ], + [ + 0.8, + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20017": { + "id": "20017", + "skill": "公司", + "desc": "当装备者击破敌方目标的弱点时,回复等同于自身生命上限#1[i]%的生命值。", + "params": [ + [ + 0.12 + ], + [ + 0.14 + ], + [ + 0.16 + ], + [ + 0.18 + ], + [ + 0.2 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20018": { + "id": "20018", + "skill": "机关", + "desc": "施放战技后,使装备者的下一次普攻对敌方目标造成等同于自身#1[i]%攻击力的附加伤害。", + "params": [ + [ + 0.6 + ], + [ + 0.75 + ], + [ + 0.9 + ], + [ + 1.05 + ], + [ + 1.2 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20019": { + "id": "20019", + "skill": "家族", + "desc": "进入战斗时,我方全体速度提高#1[i],持续#2[i]回合。", + "params": [ + [ + 12.0, + 1.0 + ], + [ + 14.0, + 1.0 + ], + [ + 16.0, + 1.0 + ], + [ + 18.0, + 1.0 + ], + [ + 20.0, + 1.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "20020": { + "id": "20020", + "skill": "天才", + "desc": "当装备者施放终结技时,攻击力提高#1[i]%,持续#2[i]回合。", + "params": [ + [ + 0.24, + 2.0 + ], + [ + 0.3, + 2.0 + ], + [ + 0.36, + 2.0 + ], + [ + 0.42, + 2.0 + ], + [ + 0.48, + 2.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21000": { + "id": "21000", + "skill": "互相治愈", + "desc": "使装备者的能量恢复效率提高#1[i]%,并在施放终结技时治疗量提高#2[i]%。", + "params": [ + [ + 0.08, + 0.12 + ], + [ + 0.1, + 0.15 + ], + [ + 0.12, + 0.18 + ], + [ + 0.14, + 0.21 + ], + [ + 0.16, + 0.24 + ] + ], + "properties": [ + [ + { + "type": "SPRatioBase", + "value": 0.08 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.1 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.12 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.14 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.16 + } + ] + ] + }, + "21001": { + "id": "21001", + "skill": "劳碌者", + "desc": "敌方目标每承受1个负面效果,装备者对其造成的伤害提高#1[i]%,最多叠加#2[i]层。该效果对持续伤害也会生效。", + "params": [ + [ + 0.12, + 3.0 + ], + [ + 0.15, + 3.0 + ], + [ + 0.18, + 3.0 + ], + [ + 0.21, + 3.0 + ], + [ + 0.24, + 3.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21002": { + "id": "21002", + "skill": "此刻定格", + "desc": "使装备者的防御力提高#1[i]%。进入战斗后,使我方全体的伤害抗性提高#2[i]%。同类技能无法重复生效。", + "params": [ + [ + 0.16, + 0.08 + ], + [ + 0.18, + 0.09 + ], + [ + 0.2, + 0.1 + ], + [ + 0.22, + 0.11 + ], + [ + 0.24, + 0.12 + ] + ], + "properties": [ + [ + { + "type": "DefenceAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.18 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.22 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.24 + } + ] + ] + }, + "21003": { + "id": "21003", + "skill": "记录", + "desc": "使装备者的攻击力提高#1[i]%。当场上的敌方目标数量小于等于2时,装备者的暴击率提高#2[i]%。", + "params": [ + [ + 0.16, + 0.12 + ], + [ + 0.2, + 0.15 + ], + [ + 0.24, + 0.18 + ], + [ + 0.28, + 0.21 + ], + [ + 0.32, + 0.24 + ] + ], + "properties": [ + [ + { + "type": "AttackAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.32 + } + ] + ] + }, + "21004": { + "id": "21004", + "skill": "老相片", + "desc": "使装备者的击破特攻提高#1[i]%。装备者施放攻击后,额外恢复#2[i]点能量,该效果单个回合内不可重复触发。", + "params": [ + [ + 0.28, + 4.0 + ], + [ + 0.35, + 5.0 + ], + [ + 0.42, + 6.0 + ], + [ + 0.49, + 7.0 + ], + [ + 0.56, + 8.0 + ] + ], + "properties": [ + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.28 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.35 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.42 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.49 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.56 + } + ] + ] + }, + "21005": { + "id": "21005", + "skill": "奇妙冒险", + "desc": "装备者施放普攻、战技或终结技攻击敌方目标后,分别获取一层【淘气值】。每层使装备者的攻击力提高#1[i]%。", + "params": [ + [ + 0.12 + ], + [ + 0.15 + ], + [ + 0.18 + ], + [ + 0.21 + ], + [ + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21006": { + "id": "21006", + "skill": "画像少女", + "desc": "使装备者追加攻击造成的伤害提高#1[i]%。若该敌方目标当前生命值百分比小于等于#2[i]%,则追加攻击造成的伤害额外提高#3[i]%。", + "params": [ + [ + 0.24, + 0.5, + 0.24 + ], + [ + 0.3, + 0.5, + 0.3 + ], + [ + 0.36, + 0.5, + 0.36 + ], + [ + 0.42, + 0.5, + 0.42 + ], + [ + 0.48, + 0.5, + 0.48 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21007": { + "id": "21007", + "skill": "救治与维修", + "desc": "使装备者的治疗量提高#1[i]%,并在施放战技时为我方全体恢复#2[i]点能量。", + "params": [ + [ + 0.1, + 2.0 + ], + [ + 0.125, + 2.5 + ], + [ + 0.15, + 3.0 + ], + [ + 0.175, + 3.5 + ], + [ + 0.2, + 4.0 + ] + ], + "properties": [ + [ + { + "type": "HealRatioBase", + "value": 0.1 + } + ], + [ + { + "type": "HealRatioBase", + "value": 0.125 + } + ], + [ + { + "type": "HealRatioBase", + "value": 0.15 + } + ], + [ + { + "type": "HealRatioBase", + "value": 0.175 + } + ], + [ + { + "type": "HealRatioBase", + "value": 0.2 + } + ] + ] + }, + "21008": { + "id": "21008", + "skill": "自信", + "desc": "使装备者的效果命中提高#1[i]%,同时造成的持续伤害提高#2[i]%。", + "params": [ + [ + 0.2, + 0.24 + ], + [ + 0.25, + 0.3 + ], + [ + 0.3, + 0.36 + ], + [ + 0.35, + 0.42 + ], + [ + 0.4, + 0.48 + ] + ], + "properties": [ + [ + { + "type": "StatusProbabilityBase", + "value": 0.2 + } + ], + [ + { + "type": "StatusProbabilityBase", + "value": 0.25 + } + ], + [ + { + "type": "StatusProbabilityBase", + "value": 0.3 + } + ], + [ + { + "type": "StatusProbabilityBase", + "value": 0.35 + } + ], + [ + { + "type": "StatusProbabilityBase", + "value": 0.4 + } + ] + ] + }, + "21009": { + "id": "21009", + "skill": "时光如梭", + "desc": "使装备者受到攻击的概率提高,同时受到的伤害降低#2[i]%。", + "params": [ + [ + 2.0, + 0.16 + ], + [ + 2.0, + 0.18 + ], + [ + 2.0, + 0.2 + ], + [ + 2.0, + 0.22 + ], + [ + 2.0, + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21010": { + "id": "21010", + "skill": "各自的答案", + "desc": "当装备者多次击中同一敌方目标时,每次造成的伤害提高#1[i]%,该效果最多叠加#2[i]层。若攻击目标发生变化,立即解除当前的增益效果。", + "params": [ + [ + 0.08, + 5.0 + ], + [ + 0.1, + 5.0 + ], + [ + 0.12, + 5.0 + ], + [ + 0.14, + 5.0 + ], + [ + 0.16, + 5.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21011": { + "id": "21011", + "skill": "启程", + "desc": "进入战斗后,当我方目标造成与装备者相同属性的伤害时,造成的伤害提高#1[i]%。", + "params": [ + [ + 0.12 + ], + [ + 0.15 + ], + [ + 0.18 + ], + [ + 0.21 + ], + [ + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21012": { + "id": "21012", + "skill": "竭力而为", + "desc": "使装备者造成的伤害提高#1[i]%,同时对当前生命值百分比高于装备者自身当前生命值百分比的敌方目标造成的伤害额外提高#2[i]%。", + "params": [ + [ + 0.2, + 0.2 + ], + [ + 0.25, + 0.25 + ], + [ + 0.3, + 0.3 + ], + [ + 0.35, + 0.35 + ], + [ + 0.4, + 0.4 + ] + ], + "properties": [ + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.25 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.3 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.35 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.4 + } + ] + ] + }, + "21013": { + "id": "21013", + "skill": "声音的力量", + "desc": "使装备者进入战斗时立即恢复#2[i]点能量,同时使其终结技造成的伤害提高#1[i]%。", + "params": [ + [ + 0.32, + 20.0 + ], + [ + 0.4, + 23.0 + ], + [ + 0.48, + 26.0 + ], + [ + 0.56, + 29.0 + ], + [ + 0.64, + 32.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21014": { + "id": "21014", + "skill": "折射的视线", + "desc": "使装备者的效果抵抗提高#1[i]%,并使装备者的治疗量提高,提高数值等同于效果抵抗的#2[i]%,最多使治疗量提高#3[i]%。", + "params": [ + [ + 0.16, + 0.33, + 0.15 + ], + [ + 0.2, + 0.36, + 0.18 + ], + [ + 0.24, + 0.39, + 0.21 + ], + [ + 0.28, + 0.42, + 0.24 + ], + [ + 0.32, + 0.45, + 0.27 + ] + ], + "properties": [ + [ + { + "type": "StatusResistanceBase", + "value": 0.16 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.2 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.24 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.28 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.32 + } + ] + ] + }, + "21015": { + "id": "21015", + "skill": "回眸", + "desc": "当装备者击中敌方目标时,如果该目标不处于【攻陷】状态,则有#1[i]%的基础概率使其陷入【攻陷】状态。【攻陷】状态下的敌方目标防御力降低#2[i]%,持续#3[i]回合。", + "params": [ + [ + 0.6, + 0.12, + 1.0 + ], + [ + 0.7, + 0.13, + 1.0 + ], + [ + 0.8, + 0.14, + 1.0 + ], + [ + 0.9, + 0.15, + 1.0 + ], + [ + 1.0, + 0.16, + 1.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21016": { + "id": "21016", + "skill": "新一轮洗牌", + "desc": "使装备者的防御力提高#1[i]%。当装备者受到攻击后,有#2[i]%的基础概率使敌方目标陷入灼烧状态,每回合造成等同于装备者#3[i]%防御力的持续伤害,持续#4[i]回合。", + "params": [ + [ + 0.16, + 1.0, + 0.4, + 2.0 + ], + [ + 0.2, + 1.05, + 0.5, + 2.0 + ], + [ + 0.24, + 1.1, + 0.6, + 2.0 + ], + [ + 0.28, + 1.15, + 0.7, + 2.0 + ], + [ + 0.32, + 1.2, + 0.8, + 2.0 + ] + ], + "properties": [ + [ + { + "type": "DefenceAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.32 + } + ] + ] + }, + "21017": { + "id": "21017", + "skill": "不赞不许走!", + "desc": "使装备者普攻和战技造成的伤害提高#1[i]%,当装备者的当前能量值等于其能量上限时,该效果额外提高#2[i]%。", + "params": [ + [ + 0.24, + 0.24 + ], + [ + 0.3, + 0.3 + ], + [ + 0.36, + 0.36 + ], + [ + 0.42, + 0.42 + ], + [ + 0.48, + 0.48 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21018": { + "id": "21018", + "skill": "停不下来啦!", + "desc": "当装备者施放终结技后,我方全体行动提前#1[i]%。", + "params": [ + [ + 0.16 + ], + [ + 0.18 + ], + [ + 0.2 + ], + [ + 0.22 + ], + [ + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21019": { + "id": "21019", + "skill": "暖阳麦浪", + "desc": "使装备者攻击力提高#1[i]%,当装备者消灭敌方目标后,暴击率提高#2[i]%,持续#3[i]回合。", + "params": [ + [ + 0.16, + 0.12, + 3.0 + ], + [ + 0.2, + 0.15, + 3.0 + ], + [ + 0.24, + 0.18, + 3.0 + ], + [ + 0.28, + 0.21, + 3.0 + ], + [ + 0.32, + 0.24, + 3.0 + ] + ], + "properties": [ + [ + { + "type": "AttackAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.32 + } + ] + ] + }, + "21020": { + "id": "21020", + "skill": "各得其所", + "desc": "使装备者攻击力提高#1[i]%,当装备者消灭敌方目标后,暴击伤害提高#2[i]%,持续#3[i]回合。", + "params": [ + [ + 0.16, + 0.24, + 3.0 + ], + [ + 0.2, + 0.3, + 3.0 + ], + [ + 0.24, + 0.36, + 3.0 + ], + [ + 0.28, + 0.42, + 3.0 + ], + [ + 0.32, + 0.48, + 3.0 + ] + ], + "properties": [ + [ + { + "type": "AttackAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.32 + } + ] + ] + }, + "21021": { + "id": "21021", + "skill": "酣适", + "desc": "当装备者的回合开始时,随机为1个当前能量百分比小于#1[i]%的我方其他目标恢复#2[i]点能量。", + "params": [ + [ + 0.5, + 8.0 + ], + [ + 0.5, + 10.0 + ], + [ + 0.5, + 12.0 + ], + [ + 0.5, + 14.0 + ], + [ + 0.5, + 16.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21022": { + "id": "21022", + "skill": "休止符", + "desc": "使装备者的击破特攻提高#1[i]%,对处于触电或风化状态的敌方目标造成的伤害提高#2[i]%,该效果对持续伤害也会生效。", + "params": [ + [ + 0.16, + 0.16 + ], + [ + 0.2, + 0.2 + ], + [ + 0.24, + 0.24 + ], + [ + 0.28, + 0.28 + ], + [ + 0.32, + 0.32 + ] + ], + "properties": [ + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.16 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.2 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.24 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.28 + } + ], + [ + { + "type": "BreakDamageAddedRatioBase", + "value": 0.32 + } + ] + ] + }, + "21023": { + "id": "21023", + "skill": "泪中人", + "desc": "战斗开始时,使我方全体受到的伤害降低#2[i]%,持续#3[i]回合。同时立即为我方全体回复等同于各自已损失生命值#1[i]%的生命值。", + "params": [ + [ + 0.3, + 0.08, + 5.0 + ], + [ + 0.35, + 0.1, + 5.0 + ], + [ + 0.4, + 0.12, + 5.0 + ], + [ + 0.45, + 0.14, + 5.0 + ], + [ + 0.5, + 0.16, + 5.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21024": { + "id": "21024", + "skill": "驱散余寒", + "desc": "进入战斗后,使装备者速度提高#1[i]%,造成的伤害提高#2[i]%。当装备者受到伤害后该效果失效,下个回合结束时该效果恢复。", + "params": [ + [ + 0.08, + 0.12 + ], + [ + 0.09, + 0.15 + ], + [ + 0.1, + 0.18 + ], + [ + 0.11, + 0.21 + ], + [ + 0.12, + 0.24 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21025": { + "id": "21025", + "skill": "旧日纸鸢", + "desc": "当装备者施放战技后,使下一个行动的我方其他目标造成的伤害提高#1[i]%,持续#2[i]回合。", + "params": [ + [ + 0.16, + 1.0 + ], + [ + 0.2, + 1.0 + ], + [ + 0.24, + 1.0 + ], + [ + 0.28, + 1.0 + ], + [ + 0.32, + 1.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21026": { + "id": "21026", + "skill": "快溜", + "desc": "使装备者的攻击力提高#1[i]%,对处于灼烧或裂伤状态的敌方目标造成的伤害提高#2[i]%,该效果对持续伤害也会生效。", + "params": [ + [ + 0.1, + 0.16 + ], + [ + 0.125, + 0.2 + ], + [ + 0.15, + 0.24 + ], + [ + 0.175, + 0.28 + ], + [ + 0.2, + 0.32 + ] + ], + "properties": [ + [ + { + "type": "AttackAddedRatio", + "value": 0.1 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.125 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.15 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.175 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.2 + } + ] + ] + }, + "21027": { + "id": "21027", + "skill": "各就其位", + "desc": "使装备者造成伤害提高#1[i]%。每消灭1个敌方目标,装备者的攻击力提高#2[i]%,该效果最多叠加#3[i]层。", + "params": [ + [ + 0.12, + 0.04, + 3.0 + ], + [ + 0.15, + 0.05, + 3.0 + ], + [ + 0.18, + 0.06, + 3.0 + ], + [ + 0.21, + 0.07, + 3.0 + ], + [ + 0.24, + 0.08, + 3.0 + ] + ], + "properties": [ + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.12 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.15 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.18 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.21 + } + ], + [ + { + "type": "AllDamageTypeAddedRatio", + "value": 0.24 + } + ] + ] + }, + "21028": { + "id": "21028", + "skill": "小小灯火", + "desc": "使装备者的生命上限提高#1[i]%。施放普攻或战技后,为我方全体回复等同于各自生命上限#2[f1]%的生命值。", + "params": [ + [ + 0.16, + 0.02 + ], + [ + 0.2, + 0.025 + ], + [ + 0.24, + 0.03 + ], + [ + 0.28, + 0.035 + ], + [ + 0.32, + 0.04 + ] + ], + "properties": [ + [ + { + "type": "HPAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.32 + } + ] + ] + }, + "21029": { + "id": "21029", + "skill": "交手如交谈", + "desc": "装备者施放普攻或战技后,对随机1个受到攻击的敌方目标造成等同于自身#1[i]%攻击力的附加伤害。", + "params": [ + [ + 0.48 + ], + [ + 0.6 + ], + [ + 0.72 + ], + [ + 0.84 + ], + [ + 0.96 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21030": { + "id": "21030", + "skill": "新篇章", + "desc": "使装备者防御力提高#1[i]%。使装备者施放终结技时造成的伤害值提高,提高数值等同于装备者防御力的#2[i]%,该效果对每个敌方目标仅生效1次。", + "params": [ + [ + 0.16, + 0.6 + ], + [ + 0.2, + 0.75 + ], + [ + 0.24, + 0.9 + ], + [ + 0.28, + 1.05 + ], + [ + 0.32, + 1.2 + ] + ], + "properties": [ + [ + { + "type": "DefenceAddedRatio", + "value": 0.16 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.2 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.32 + } + ] + ] + }, + "21031": { + "id": "21031", + "skill": "汹涌", + "desc": "使装备者暴击率提高#1[i]%。暴击后有#2[i]%的固定概率解除被攻击敌方目标所持有的1个增益效果,该效果每次攻击只可触发1次。", + "params": [ + [ + 0.12, + 0.16 + ], + [ + 0.15, + 0.2 + ], + [ + 0.18, + 0.24 + ], + [ + 0.21, + 0.28 + ], + [ + 0.24, + 0.32 + ] + ], + "properties": [ + [ + { + "type": "CriticalChanceBase", + "value": 0.12 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.15 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.18 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.21 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.24 + } + ] + ] + }, + "21032": { + "id": "21032", + "skill": "秘密", + "desc": "在战斗开始时以及当装备者回合开始时,随机生效1个效果。该效果生效时,替换上次的效果且本次不会与上次重复。效果包含:使我方全体攻击力提高#1[i]%;使我方全体暴击伤害提高#2[i]%;使我方全体能量恢复效率提高#3[i]%。同类效果无法叠加,在装备者陷入无法战斗状态时解除。", + "params": [ + [ + 0.1, + 0.12, + 0.06 + ], + [ + 0.125, + 0.15, + 0.075 + ], + [ + 0.15, + 0.18, + 0.09 + ], + [ + 0.175, + 0.21, + 0.105 + ], + [ + 0.2, + 0.24, + 0.12 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "21033": { + "id": "21033", + "skill": "绝境", + "desc": "使装备者的攻击力提高#1[i]%。当装备者消灭敌方目标时,回复等同于自身#2[i]%攻击力的生命值。", + "params": [ + [ + 0.24, + 0.12 + ], + [ + 0.3, + 0.15 + ], + [ + 0.36, + 0.18 + ], + [ + 0.42, + 0.21 + ], + [ + 0.48, + 0.24 + ] + ], + "properties": [ + [ + { + "type": "AttackAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.3 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.36 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.42 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.48 + } + ] + ] + }, + "21034": { + "id": "21034", + "skill": "风雨将至", + "desc": "进入战斗后,根据装备者的能量上限,提高装备者造成的伤害:每点能量提高#1[f2]%,最多计入#2[i]点。", + "params": [ + [ + 0.002, + 160.0 + ], + [ + 0.0025, + 160.0 + ], + [ + 0.003, + 160.0 + ], + [ + 0.0035, + 160.0 + ], + [ + 0.004, + 160.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "23000": { + "id": "23000", + "skill": "流星群", + "desc": "场上每有1个敌方目标,使装备者的攻击力提高#2[f1]%,该效果最多叠加5层。当有敌方目标的弱点被击破时,装备者造成的伤害提高#1[i]%,持续1回合。", + "params": [ + [ + 0.3, + 0.09 + ], + [ + 0.35, + 0.105 + ], + [ + 0.4, + 0.12 + ], + [ + 0.45, + 0.135 + ], + [ + 0.5, + 0.15 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "23001": { + "id": "23001", + "skill": "花与蝶", + "desc": "使装备者的暴击率提高#1[i]%。当装备者在战斗中速度大于100时,每超过#2[i]点,普攻和战技造成的伤害提高#3[i]%,同时终结技的暴击伤害提高#4[i]%,该效果可叠加#5[i]层。", + "params": [ + [ + 0.18, + 10.0, + 0.06, + 0.12, + 6.0 + ], + [ + 0.21, + 10.0, + 0.07, + 0.14, + 6.0 + ], + [ + 0.24, + 10.0, + 0.08, + 0.16, + 6.0 + ], + [ + 0.27, + 10.0, + 0.09, + 0.18, + 6.0 + ], + [ + 0.3, + 10.0, + 0.1, + 0.2, + 6.0 + ] + ], + "properties": [ + [ + { + "type": "CriticalChanceBase", + "value": 0.18 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.21 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.24 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.27 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.3 + } + ] + ] + }, + "23002": { + "id": "23002", + "skill": "家人", + "desc": "使装备者的攻击力提高#1[i]%。当装备者消灭敌方目标或受到攻击后,立即回复等同于装备者攻击力#2[i]%的生命值,同时造成的伤害提高#3[i]%,持续到自身下个回合结束。该效果不可叠加,每回合只可触发1次。", + "params": [ + [ + 0.24, + 0.08, + 0.24 + ], + [ + 0.28, + 0.09, + 0.28 + ], + [ + 0.32, + 0.1, + 0.32 + ], + [ + 0.36, + 0.11, + 0.36 + ], + [ + 0.4, + 0.12, + 0.4 + ] + ], + "properties": [ + [ + { + "type": "AttackAddedRatio", + "value": 0.24 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.28 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.32 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.36 + } + ], + [ + { + "type": "AttackAddedRatio", + "value": 0.4 + } + ] + ] + }, + "23003": { + "id": "23003", + "skill": "继承人", + "desc": "使装备者的能量恢复效率提高#1[i]%,并在对我方目标施放终结技时恢复1个战技点。该效果每施放2次终结技可触发1次。当装备者施放战技后,使下一个行动的我方其他目标造成的伤害提高#2[i]%,持续#3[i]回合。", + "params": [ + [ + 0.1, + 0.3, + 1.0 + ], + [ + 0.12, + 0.35, + 1.0 + ], + [ + 0.14, + 0.4, + 1.0 + ], + [ + 0.16, + 0.45, + 1.0 + ], + [ + 0.18, + 0.5, + 1.0 + ] + ], + "properties": [ + [ + { + "type": "SPRatioBase", + "value": 0.1 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.12 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.14 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.16 + } + ], + [ + { + "type": "SPRatioBase", + "value": 0.18 + } + ] + ] + }, + "23004": { + "id": "23004", + "skill": "传承者", + "desc": "使装备者对陷入负面效果的敌方目标造成的伤害提高#1[i]%。当装备者施放战技时,装备者此次攻击的效果命中提高#2[i]%,攻击力提高#3[i]%。", + "params": [ + [ + 0.24, + 0.18, + 0.24 + ], + [ + 0.28, + 0.21, + 0.28 + ], + [ + 0.32, + 0.24, + 0.32 + ], + [ + 0.36, + 0.27, + 0.36 + ], + [ + 0.4, + 0.3, + 0.4 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "23005": { + "id": "23005", + "skill": "决断", + "desc": "使装备者的防御力提高#2[i]%,效果命中提高#4[i]%,同时使自身受到攻击的概率提高。当装备者受到攻击后,防御力额外提高#3[i]%,持续到自身回合结束。", + "params": [ + [ + 2.0, + 0.24, + 0.24, + 0.24 + ], + [ + 2.0, + 0.28, + 0.28, + 0.28 + ], + [ + 2.0, + 0.32, + 0.32, + 0.32 + ], + [ + 2.0, + 0.36, + 0.36, + 0.36 + ], + [ + 2.0, + 0.4, + 0.4, + 0.4 + ] + ], + "properties": [ + [ + { + "type": "DefenceAddedRatio", + "value": 0.24 + }, + { + "type": "StatusProbabilityBase", + "value": 0.24 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.28 + }, + { + "type": "StatusProbabilityBase", + "value": 0.28 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.32 + }, + { + "type": "StatusProbabilityBase", + "value": 0.32 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.36 + }, + { + "type": "StatusProbabilityBase", + "value": 0.36 + } + ], + [ + { + "type": "DefenceAddedRatio", + "value": 0.4 + }, + { + "type": "StatusProbabilityBase", + "value": 0.4 + } + ] + ] + }, + "23010": { + "id": "23010", + "skill": "长夜", + "desc": "使装备者暴击伤害提高#1[i]%。使装备者战技和终结技造成的伤害提高#2[i]%。当装备者施放战技或终结技后,获得【梦身】效果。触发追加攻击时,消耗【梦身】,使追加攻击造成的伤害提高#3[i]%。", + "params": [ + [ + 0.36, + 0.18, + 0.48 + ], + [ + 0.42, + 0.21, + 0.56 + ], + [ + 0.48, + 0.24, + 0.64 + ], + [ + 0.54, + 0.27, + 0.72 + ], + [ + 0.6, + 0.3, + 0.8 + ] + ], + "properties": [ + [ + { + "type": "CriticalDamageBase", + "value": 0.36 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.42 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.48 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.54 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.6 + } + ] + ] + }, + "23012": { + "id": "23012", + "skill": "美梦", + "desc": "使装备者的暴击伤害提高#1[i]%。当装备者的普攻或战技伤害未造成暴击时,使自身暴击率提高#2[i]%,持续#3[i]回合。该效果每#4[i]回合可以触发1次。", + "params": [ + [ + 0.3, + 0.36, + 1.0, + 3.0 + ], + [ + 0.35, + 0.42, + 1.0, + 3.0 + ], + [ + 0.4, + 0.48, + 1.0, + 3.0 + ], + [ + 0.45, + 0.54, + 1.0, + 3.0 + ], + [ + 0.5, + 0.6, + 1.0, + 3.0 + ] + ], + "properties": [ + [ + { + "type": "CriticalDamageBase", + "value": 0.3 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.35 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.4 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.45 + } + ], + [ + { + "type": "CriticalDamageBase", + "value": 0.5 + } + ] + ] + }, + "23013": { + "id": "23013", + "skill": "日有四时", + "desc": "使装备者生命上限提高#1[i]%,治疗量提高#2[i]%。当装备者对我方目标提供治疗时,记录治疗量。当任意我方目标施放攻击后,根据记录治疗量的#3[i]%,对随机1个受到攻击的敌方目标造成基于装备者属性的附加伤害。该伤害不受加成影响,每回合最多结算1次。", + "params": [ + [ + 0.18, + 0.12, + 0.36 + ], + [ + 0.21, + 0.14, + 0.42 + ], + [ + 0.24, + 0.16, + 0.48 + ], + [ + 0.27, + 0.18, + 0.54 + ], + [ + 0.3, + 0.2, + 0.6 + ] + ], + "properties": [ + [ + { + "type": "HPAddedRatio", + "value": 0.18 + }, + { + "type": "HealRatioBase", + "value": 0.12 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.21 + }, + { + "type": "HealRatioBase", + "value": 0.14 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.24 + }, + { + "type": "HealRatioBase", + "value": 0.16 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.27 + }, + { + "type": "HealRatioBase", + "value": 0.18 + } + ], + [ + { + "type": "HPAddedRatio", + "value": 0.3 + }, + { + "type": "HealRatioBase", + "value": 0.2 + } + ] + ] + }, + "24000": { + "id": "24000", + "skill": "扑火", + "desc": "当装备者施放攻击时,使装备者本场战斗中的攻击力提高#1[i]%,该效果最多叠加#2[i]层。当装备者击破敌方目标弱点后,造成的伤害提高#3[i]%,持续#4[i]回合。", + "params": [ + [ + 0.08, + 4.0, + 0.12, + 2.0 + ], + [ + 0.1, + 4.0, + 0.15, + 2.0 + ], + [ + 0.12, + 4.0, + 0.18, + 2.0 + ], + [ + 0.14, + 4.0, + 0.21, + 2.0 + ], + [ + 0.16, + 4.0, + 0.24, + 2.0 + ] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + }, + "24001": { + "id": "24001", + "skill": "猎逐", + "desc": "使装备者的暴击率提高#1[i]%,装备者对生命值百分比小于等于#2[i]%的敌方目标暴击率额外提高#3[i]%。当装备者消灭敌方目标后,攻击力提高#4[i]%,持续#5[i]回合。", + "params": [ + [ + 0.08, + 0.5, + 0.08, + 0.2, + 2.0 + ], + [ + 0.1, + 0.5, + 0.1, + 0.25, + 2.0 + ], + [ + 0.12, + 0.5, + 0.12, + 0.3, + 2.0 + ], + [ + 0.14, + 0.5, + 0.14, + 0.35, + 2.0 + ], + [ + 0.16, + 0.5, + 0.16, + 0.4, + 2.0 + ] + ], + "properties": [ + [ + { + "type": "CriticalChanceBase", + "value": 0.08 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.1 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.12 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.14 + } + ], + [ + { + "type": "CriticalChanceBase", + "value": 0.16 + } + ] + ] + }, + "24002": { + "id": "24002", + "skill": "珍存", + "desc": "使装备者的效果抵抗提高#1[i]%,当装备者受到攻击后,如果自身未持有护盾,则获得1个等同于装备者#2[i]%生命上限的护盾,持续#3[i]回合。该效果每#4[i]回合只能触发1次。如果装备者持有护盾,则使自身受到的伤害降低#5[i]%。", + "params": [ + [ + 0.08, + 0.16, + 2.0, + 3.0, + 0.12 + ], + [ + 0.1, + 0.2, + 2.0, + 3.0, + 0.15 + ], + [ + 0.12, + 0.24, + 2.0, + 3.0, + 0.18 + ], + [ + 0.14, + 0.28, + 2.0, + 3.0, + 0.21 + ], + [ + 0.16, + 0.32, + 2.0, + 3.0, + 0.24 + ] + ], + "properties": [ + [ + { + "type": "StatusResistanceBase", + "value": 0.08 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.1 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.12 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.14 + } + ], + [ + { + "type": "StatusResistanceBase", + "value": 0.16 + } + ] + ] + }, + "29000": { + "id": "29000", + "skill": "dev_无", + "desc": "dev_空", + "params": [ + [], + [], + [], + [], + [] + ], + "properties": [ + [], + [], + [], + [], + [] + ] + } +} \ No newline at end of file diff --git a/StarRailUID/utils/excel/read_excel.py b/StarRailUID/utils/excel/read_excel.py index eda56b0..4f22114 100644 --- a/StarRailUID/utils/excel/read_excel.py +++ b/StarRailUID/utils/excel/read_excel.py @@ -14,3 +14,6 @@ with open(EXCEL / 'AvatarPromotionConfig.json', 'r', encoding='utf8') as f: with open(EXCEL / 'EquipmentPromotionConfig.json', 'r', encoding='utf8') as f: EquipmentPromotion = json.load(f) + +with open(EXCEL / 'light_cone_ranks.json', 'r', encoding='utf8') as f: + light_cone_ranks = json.load(f) diff --git a/StarRailUID/utils/fonts/starrail_fonts.py b/StarRailUID/utils/fonts/starrail_fonts.py index 646c873..0a5c10d 100644 --- a/StarRailUID/utils/fonts/starrail_fonts.py +++ b/StarRailUID/utils/fonts/starrail_fonts.py @@ -15,6 +15,7 @@ sr_font_15 = starrail_font_origin(15) sr_font_18 = starrail_font_origin(18) sr_font_20 = starrail_font_origin(20) sr_font_22 = starrail_font_origin(22) +sr_font_23 = starrail_font_origin(23) sr_font_24 = starrail_font_origin(24) sr_font_25 = starrail_font_origin(25) sr_font_26 = starrail_font_origin(26) diff --git a/StarRailUID/utils/image/image_tools.py b/StarRailUID/utils/image/image_tools.py index 121d3f3..cff2c13 100644 --- a/StarRailUID/utils/image/image_tools.py +++ b/StarRailUID/utils/image/image_tools.py @@ -4,8 +4,8 @@ from io import BytesIO from pathlib import Path from typing import Tuple, Union, Optional -from PIL import Image from httpx import get +from PIL import Image, ImageDraw, ImageFont from ...starrailuid_config.sr_config import srconfig from ..resource.RESOURCE_PATH import CU_BG_PATH, TEXT2D_PATH @@ -24,6 +24,51 @@ else: bg_path = NM_BG_PATH +def draw_text_by_line( + img: Image.Image, + pos: Tuple[int, int], + text: str, + font: ImageFont.FreeTypeFont, + fill: Union[Tuple[int, int, int, int], str], + max_length: float, + center=False, + line_space: Optional[float] = None, +): + """ + 在图片上写长段文字, 自动换行 + max_length单行最大长度, 单位像素 + line_space 行间距, 单位像素, 默认是字体高度的0.3倍 + """ + x, y = pos + _, h = font.getsize('X') + if line_space is None: + y_add = math.ceil(1.3 * h) + else: + y_add = math.ceil(h + line_space) + draw = ImageDraw.Draw(img) + row = "" # 存储本行文字 + length = 0 # 记录本行长度 + for character in text: + w, h = font.getsize(character) # 获取当前字符的宽度 + if length + w * 2 <= max_length: + row += character + length += w + else: + row += character + if center: + font_size = font.getsize(row) + x = math.ceil((img.size[0] - font_size[0]) / 2) + draw.text((x, y), row, font=font, fill=fill) + row = "" + length = 0 + y += y_add + if row != "": + if center: + font_size = font.getsize(row) + x = math.ceil((img.size[0] - font_size[0]) / 2) + draw.text((x, y), row, font=font, fill=fill) + + async def get_qq_avatar( qid: Optional[Union[int, str]] = None, avatar_url: Optional[str] = None ) -> Image.Image: diff --git a/StarRailUID/utils/map/SR_MAP_PATH.py b/StarRailUID/utils/map/SR_MAP_PATH.py index 80cde92..8fdb427 100644 --- a/StarRailUID/utils/map/SR_MAP_PATH.py +++ b/StarRailUID/utils/map/SR_MAP_PATH.py @@ -26,6 +26,10 @@ EquipmentID2AbilityProperty_fileName = ( f'EquipmentID2AbilityProperty_mapping_{version}.json' ) RelicSetSkill_fileName = f'RelicSetSkill_mapping_{version}.json' +skillId2AttackType_fileName = f'skillId2AttackType_mapping_{version}.json' +EquipmentID2Rarity_fileName = f'EquipmentID2Rarity_mapping_{version}.json' +RelicId2Rarity_fileName = f'RelicId2Rarity_mapping_{version}.json' +ItemId2Name_fileName = f'ItemId2Name_mapping_{version}.json' class TS(TypedDict): @@ -49,7 +53,7 @@ with open(MAP / skillId2Name_fileName, 'r', encoding='UTF-8') as f: skillId2Name = msgjson.decode(f.read(), type=Dict[str, str]) with open(MAP / skillId2Type_fileName, 'r', encoding='UTF-8') as f: - skillId2Type = msgjson.decode(f.read(), type=Dict[str, str]) + skillId2Effect = msgjson.decode(f.read(), type=Dict[str, str]) with open(MAP / Property2Name_fileName, 'r', encoding='UTF-8') as f: Property2Name = msgjson.decode(f.read(), type=Dict[str, str]) @@ -84,3 +88,15 @@ with open( with open(MAP / RelicSetSkill_fileName, 'r', encoding='UTF-8') as f: RelicSetSkill = msgjson.decode(f.read(), type=Dict[str, dict]) + +with open(MAP / skillId2AttackType_fileName, 'r', encoding='UTF-8') as f: + skillId2AttackType = msgjson.decode(f.read(), type=Dict[str, str]) + +with open(MAP / EquipmentID2Rarity_fileName, 'r', encoding='UTF-8') as f: + EquipmentID2Rarity = msgjson.decode(f.read(), type=Dict[str, int]) + +with open(MAP / RelicId2Rarity_fileName, 'r', encoding='UTF-8') as f: + RelicId2Rarity = msgjson.decode(f.read(), type=Dict[str, int]) + +with open(MAP / ItemId2Name_fileName, 'r', encoding='UTF-8') as f: + ItemId2Name = msgjson.decode(f.read(), type=Dict[str, str]) diff --git a/StarRailUID/utils/map/data/EquipmentID2Rarity_mapping_1.0.5.json b/StarRailUID/utils/map/data/EquipmentID2Rarity_mapping_1.0.5.json new file mode 100644 index 0000000..8a1661f --- /dev/null +++ b/StarRailUID/utils/map/data/EquipmentID2Rarity_mapping_1.0.5.json @@ -0,0 +1 @@ +{"20000": 3, "20001": 3, "20002": 3, "20003": 3, "20004": 3, "20005": 3, "20006": 3, "20007": 3, "20008": 3, "20009": 3, "20010": 3, "20011": 3, "20012": 3, "20013": 3, "20014": 3, "20015": 3, "20016": 3, "20017": 3, "20018": 3, "20019": 3, "20020": 3, "21000": 4, "21001": 4, "21002": 4, "21003": 4, "21004": 4, "21005": 4, "21006": 4, "21007": 4, "21008": 4, "21009": 4, "21010": 4, "21011": 4, "21012": 4, "21013": 4, "21014": 4, "21015": 4, "21016": 4, "21017": 4, "21018": 4, "21019": 4, "21020": 4, "21021": 4, "21022": 4, "21023": 4, "21024": 4, "21025": 4, "21026": 4, "21027": 4, "21028": 4, "21029": 4, "21030": 4, "21031": 4, "21032": 4, "21033": 4, "21034": 4, "23000": 5, "23001": 5, "23002": 5, "23003": 5, "23004": 5, "23005": 5, "23010": 5, "23012": 5, "23013": 5, "24000": 5, "24001": 5, "24002": 5, "29000": 3} diff --git a/StarRailUID/utils/map/data/ItemId2Name_mapping_1.0.5.json b/StarRailUID/utils/map/data/ItemId2Name_mapping_1.0.5.json new file mode 100644 index 0000000..ac1e70e --- /dev/null +++ b/StarRailUID/utils/map/data/ItemId2Name_mapping_1.0.5.json @@ -0,0 +1 @@ +{"31011": "过客的逢春木簪", "41011": "过客的逢春木簪", "51011": "过客的逢春木簪", "61011": "过客的逢春木簪", "31012": "过客的游龙臂鞲", "41012": "过客的游龙臂鞲", "51012": "过客的游龙臂鞲", "61012": "过客的游龙臂鞲", "31013": "过客的残绣风衣", "41013": "过客的残绣风衣", "51013": "过客的残绣风衣", "61013": "过客的残绣风衣", "31014": "过客的冥途游履", "41014": "过客的冥途游履", "51014": "过客的冥途游履", "61014": "过客的冥途游履", "31021": "快枪手的野穗毡帽", "41021": "快枪手的野穗毡帽", "51021": "快枪手的野穗毡帽", "61021": "快枪手的野穗毡帽", "31022": "快枪手的粗革手套", "41022": "快枪手的粗革手套", "51022": "快枪手的粗革手套", "61022": "快枪手的粗革手套", "31023": "快枪手的猎风披肩", "41023": "快枪手的猎风披肩", "51023": "快枪手的猎风披肩", "61023": "快枪手的猎风披肩", "31024": "快枪手的铆钉马靴", "41024": "快枪手的铆钉马靴", "51024": "快枪手的铆钉马靴", "61024": "快枪手的铆钉马靴", "31031": "圣骑的宽恕盔面", "41031": "圣骑的宽恕盔面", "51031": "圣骑的宽恕盔面", "61031": "圣骑的宽恕盔面", "31032": "圣骑的沉默誓环", "41032": "圣骑的沉默誓环", "51032": "圣骑的沉默誓环", "61032": "圣骑的沉默誓环", "31033": "圣骑的肃穆胸甲", "41033": "圣骑的肃穆胸甲", "51033": "圣骑的肃穆胸甲", "61033": "圣骑的肃穆胸甲", "31034": "圣骑的秩序铁靴", "41034": "圣骑的秩序铁靴", "51034": "圣骑的秩序铁靴", "61034": "圣骑的秩序铁靴", "31041": "雪猎的荒神兜帽", "41041": "雪猎的荒神兜帽", "51041": "雪猎的荒神兜帽", "61041": "雪猎的荒神兜帽", "31042": "雪猎的巨蜥手套", "41042": "雪猎的巨蜥手套", "51042": "雪猎的巨蜥手套", "61042": "雪猎的巨蜥手套", "31043": "雪猎的冰龙披风", "41043": "雪猎的冰龙披风", "51043": "雪猎的冰龙披风", "61043": "雪猎的冰龙披风", "31044": "雪猎的鹿皮软靴", "41044": "雪猎的鹿皮软靴", "51044": "雪猎的鹿皮软靴", "61044": "雪猎的鹿皮软靴", "31051": "拳王的冠军护头", "41051": "拳王的冠军护头", "51051": "拳王的冠军护头", "61051": "拳王的冠军护头", "31052": "拳王的重炮拳套", "41052": "拳王的重炮拳套", "51052": "拳王的重炮拳套", "61052": "拳王的重炮拳套", "31053": "拳王的贴身护胸", "41053": "拳王的贴身护胸", "51053": "拳王的贴身护胸", "61053": "拳王的贴身护胸", "31054": "拳王的弧步战靴", "41054": "拳王的弧步战靴", "51054": "拳王的弧步战靴", "61054": "拳王的弧步战靴", "31061": "铁卫的铸铁面盔", "41061": "铁卫的铸铁面盔", "51061": "铁卫的铸铁面盔", "61061": "铁卫的铸铁面盔", "31062": "铁卫的银鳞手甲", "41062": "铁卫的银鳞手甲", "51062": "铁卫的银鳞手甲", "61062": "铁卫的银鳞手甲", "31063": "铁卫的旧制军服", "41063": "铁卫的旧制军服", "51063": "铁卫的旧制军服", "61063": "铁卫的旧制军服", "31064": "铁卫的白银护胫", "41064": "铁卫的白银护胫", "51064": "铁卫的白银护胫", "61064": "铁卫的白银护胫", "31071": "火匠的黑曜目镜", "41071": "火匠的黑曜目镜", "51071": "火匠的黑曜目镜", "61071": "火匠的黑曜目镜", "31072": "火匠的御火戒指", "41072": "火匠的御火戒指", "51072": "火匠的御火戒指", "61072": "火匠的御火戒指", "31073": "火匠的阻燃围裙", "41073": "火匠的阻燃围裙", "51073": "火匠的阻燃围裙", "61073": "火匠的阻燃围裙", "31074": "火匠的合金义肢", "41074": "火匠的合金义肢", "51074": "火匠的合金义肢", "61074": "火匠的合金义肢", "31081": "天才的超距遥感", "41081": "天才的超距遥感", "51081": "天才的超距遥感", "61081": "天才的超距遥感", "31082": "天才的频变捕手", "41082": "天才的频变捕手", "51082": "天才的频变捕手", "61082": "天才的频变捕手", "31083": "天才的元域深潜", "41083": "天才的元域深潜", "51083": "天才的元域深潜", "61083": "天才的元域深潜", "31084": "天才的引力漫步", "41084": "天才的引力漫步", "51084": "天才的引力漫步", "61084": "天才的引力漫步", "31091": "乐队的偏光墨镜", "41091": "乐队的偏光墨镜", "51091": "乐队的偏光墨镜", "61091": "乐队的偏光墨镜", "31092": "乐队的巡演手绳", "41092": "乐队的巡演手绳", "51092": "乐队的巡演手绳", "61092": "乐队的巡演手绳", "31093": "乐队的钉刺皮衣", "41093": "乐队的钉刺皮衣", "51093": "乐队的钉刺皮衣", "61093": "乐队的钉刺皮衣", "31094": "乐队的铆钉短靴", "41094": "乐队的铆钉短靴", "51094": "乐队的铆钉短靴", "61094": "乐队的铆钉短靴", "31101": "翔鹰的长喙头盔", "41101": "翔鹰的长喙头盔", "51101": "翔鹰的长喙头盔", "61101": "翔鹰的长喙头盔", "31102": "翔鹰的鹰击指环", "41102": "翔鹰的鹰击指环", "51102": "翔鹰的鹰击指环", "61102": "翔鹰的鹰击指环", "31103": "翔鹰的翼装束带", "41103": "翔鹰的翼装束带", "51103": "翔鹰的翼装束带", "61103": "翔鹰的翼装束带", "31104": "翔鹰的绒羽绑带", "41104": "翔鹰的绒羽绑带", "51104": "翔鹰的绒羽绑带", "61104": "翔鹰的绒羽绑带", "31111": "怪盗的千人假面", "41111": "怪盗的千人假面", "51111": "怪盗的千人假面", "61111": "怪盗的千人假面", "31112": "怪盗的绘纹手套", "41112": "怪盗的绘纹手套", "51112": "怪盗的绘纹手套", "61112": "怪盗的绘纹手套", "31113": "怪盗的纤钢爪钩", "41113": "怪盗的纤钢爪钩", "51113": "怪盗的纤钢爪钩", "61113": "怪盗的纤钢爪钩", "31114": "怪盗的流星快靴", "41114": "怪盗的流星快靴", "51114": "怪盗的流星快靴", "61114": "怪盗的流星快靴", "31121": "废土客的呼吸面罩", "41121": "废土客的呼吸面罩", "51121": "废土客的呼吸面罩", "61121": "废土客的呼吸面罩", "31122": "废土客的荒漠终端", "41122": "废土客的荒漠终端", "51122": "废土客的荒漠终端", "61122": "废土客的荒漠终端", "31123": "废土客的修士长袍", "41123": "废土客的修士长袍", "51123": "废土客的修士长袍", "61123": "废土客的修士长袍", "31124": "废土客的动力腿甲", "41124": "废土客的动力腿甲", "51124": "废土客的动力腿甲", "61124": "废土客的动力腿甲", "33015": "「黑塔」的空间站点", "43015": "「黑塔」的空间站点", "53015": "「黑塔」的空间站点", "63015": "「黑塔」的空间站点", "33016": "「黑塔」的漫历轨迹", "43016": "「黑塔」的漫历轨迹", "53016": "「黑塔」的漫历轨迹", "63016": "「黑塔」的漫历轨迹", "33025": "罗浮仙舟的天外楼船", "43025": "罗浮仙舟的天外楼船", "53025": "罗浮仙舟的天外楼船", "63025": "罗浮仙舟的天外楼船", "33026": "罗浮仙舟的建木枝蔓", "43026": "罗浮仙舟的建木枝蔓", "53026": "罗浮仙舟的建木枝蔓", "63026": "罗浮仙舟的建木枝蔓", "33035": "公司的巨构总部", "43035": "公司的巨构总部", "53035": "公司的巨构总部", "63035": "公司的巨构总部", "33036": "公司的贸易航道", "43036": "公司的贸易航道", "53036": "公司的贸易航道", "63036": "公司的贸易航道", "33045": "贝洛伯格的存护堡垒", "43045": "贝洛伯格的存护堡垒", "53045": "贝洛伯格的存护堡垒", "63045": "贝洛伯格的存护堡垒", "33046": "贝洛伯格的铁卫防线", "43046": "贝洛伯格的铁卫防线", "53046": "贝洛伯格的铁卫防线", "63046": "贝洛伯格的铁卫防线", "33055": "螺丝星的机械烈阳", "43055": "螺丝星的机械烈阳", "53055": "螺丝星的机械烈阳", "63055": "螺丝星的机械烈阳", "33056": "螺丝星的环星孔带", "43056": "螺丝星的环星孔带", "53056": "螺丝星的环星孔带", "63056": "螺丝星的环星孔带", "33065": "萨尔索图的移动城市", "43065": "萨尔索图的移动城市", "53065": "萨尔索图的移动城市", "63065": "萨尔索图的移动城市", "33066": "萨尔索图的晨昏界线", "43066": "萨尔索图的晨昏界线", "53066": "萨尔索图的晨昏界线", "63066": "萨尔索图的晨昏界线", "33075": "塔利亚的钉壳小镇", "43075": "塔利亚的钉壳小镇", "53075": "塔利亚的钉壳小镇", "63075": "塔利亚的钉壳小镇", "33076": "塔利亚的裸皮电线", "43076": "塔利亚的裸皮电线", "53076": "塔利亚的裸皮电线", "63076": "塔利亚的裸皮电线", "33085": "翁瓦克的诞生之岛", "43085": "翁瓦克的诞生之岛", "53085": "翁瓦克的诞生之岛", "63085": "翁瓦克的诞生之岛", "33086": "翁瓦克的环岛海岸", "43086": "翁瓦克的环岛海岸", "53086": "翁瓦克的环岛海岸", "63086": "翁瓦克的环岛海岸", "55001": "过客的残绣风衣", "55002": "过客的冥途游履", "55003": "快枪手的猎风披肩", "55004": "圣骑的肃穆胸甲", "55005": "圣骑的秩序铁靴", "55006": "拳王的贴身护胸"} diff --git a/StarRailUID/utils/map/data/RelicId2Rarity_mapping_1.0.5.json b/StarRailUID/utils/map/data/RelicId2Rarity_mapping_1.0.5.json new file mode 100644 index 0000000..8088bcf --- /dev/null +++ b/StarRailUID/utils/map/data/RelicId2Rarity_mapping_1.0.5.json @@ -0,0 +1 @@ +{"31011": 2, "31012": 2, "31013": 2, "31014": 2, "31021": 2, "31022": 2, "31023": 2, "31024": 2, "31031": 2, "31032": 2, "31033": 2, "31034": 2, "31041": 2, "31042": 2, "31043": 2, "31044": 2, "31051": 2, "31052": 2, "31053": 2, "31054": 2, "31061": 2, "31062": 2, "31063": 2, "31064": 2, "31071": 2, "31072": 2, "31073": 2, "31074": 2, "31081": 2, "31082": 2, "31083": 2, "31084": 2, "31091": 2, "31092": 2, "31093": 2, "31094": 2, "31101": 2, "31102": 2, "31103": 2, "31104": 2, "31111": 2, "31112": 2, "31113": 2, "31114": 2, "31121": 2, "31122": 2, "31123": 2, "31124": 2, "33015": 2, "33016": 2, "33025": 2, "33026": 2, "33035": 2, "33036": 2, "33045": 2, "33046": 2, "33055": 2, "33056": 2, "33065": 2, "33066": 2, "33075": 2, "33076": 2, "33085": 2, "33086": 2, "41011": 3, "41012": 3, "41013": 3, "41014": 3, "41021": 3, "41022": 3, "41023": 3, "41024": 3, "41031": 3, "41032": 3, "41033": 3, "41034": 3, "41041": 3, "41042": 3, "41043": 3, "41044": 3, "41051": 3, "41052": 3, "41053": 3, "41054": 3, "41061": 3, "41062": 3, "41063": 3, "41064": 3, "41071": 3, "41072": 3, "41073": 3, "41074": 3, "41081": 3, "41082": 3, "41083": 3, "41084": 3, "41091": 3, "41092": 3, "41093": 3, "41094": 3, "41101": 3, "41102": 3, "41103": 3, "41104": 3, "41111": 3, "41112": 3, "41113": 3, "41114": 3, "41121": 3, "41122": 3, "41123": 3, "41124": 3, "43015": 3, "43016": 3, "43025": 3, "43026": 3, "43035": 3, "43036": 3, "43045": 3, "43046": 3, "43055": 3, "43056": 3, "43065": 3, "43066": 3, "43075": 3, "43076": 3, "43085": 3, "43086": 3, "51011": 4, "51012": 4, "51013": 4, "51014": 4, "51021": 4, "51022": 4, "51023": 4, "51024": 4, "51031": 4, "51032": 4, "51033": 4, "51034": 4, "51041": 4, "51042": 4, "51043": 4, "51044": 4, "51051": 4, "51052": 4, "51053": 4, "51054": 4, "51061": 4, "51062": 4, "51063": 4, "51064": 4, "51071": 4, "51072": 4, "51073": 4, "51074": 4, "51081": 4, "51082": 4, "51083": 4, "51084": 4, "51091": 4, "51092": 4, "51093": 4, "51094": 4, "51101": 4, "51102": 4, "51103": 4, "51104": 4, "51111": 4, "51112": 4, "51113": 4, "51114": 4, "51121": 4, "51122": 4, "51123": 4, "51124": 4, "53015": 4, "53016": 4, "53025": 4, "53026": 4, "53035": 4, "53036": 4, "53045": 4, "53046": 4, "53055": 4, "53056": 4, "53065": 4, "53066": 4, "53075": 4, "53076": 4, "53085": 4, "53086": 4, "55001": 4, "55002": 4, "55003": 4, "55004": 4, "55005": 4, "55006": 4, "61011": 5, "61012": 5, "61013": 5, "61014": 5, "61021": 5, "61022": 5, "61023": 5, "61024": 5, "61031": 5, "61032": 5, "61033": 5, "61034": 5, "61041": 5, "61042": 5, "61043": 5, "61044": 5, "61051": 5, "61052": 5, "61053": 5, "61054": 5, "61061": 5, "61062": 5, "61063": 5, "61064": 5, "61071": 5, "61072": 5, "61073": 5, "61074": 5, "61081": 5, "61082": 5, "61083": 5, "61084": 5, "61091": 5, "61092": 5, "61093": 5, "61094": 5, "61101": 5, "61102": 5, "61103": 5, "61104": 5, "61111": 5, "61112": 5, "61113": 5, "61114": 5, "61121": 5, "61122": 5, "61123": 5, "61124": 5, "63015": 5, "63016": 5, "63025": 5, "63026": 5, "63035": 5, "63036": 5, "63045": 5, "63046": 5, "63055": 5, "63056": 5, "63065": 5, "63066": 5, "63075": 5, "63076": 5, "63085": 5, "63086": 5} diff --git a/StarRailUID/utils/map/data/skillId2AttackType_mapping_1.0.5.json b/StarRailUID/utils/map/data/skillId2AttackType_mapping_1.0.5.json new file mode 100644 index 0000000..64fa72f --- /dev/null +++ b/StarRailUID/utils/map/data/skillId2AttackType_mapping_1.0.5.json @@ -0,0 +1 @@ +{"100101": "Normal", "100103": "Ultra", "100104": "", "100106": "MazeNormal", "100107": "Maze", "100201": "Normal", "100202": "BPSkill", "100203": "Ultra", "100204": "", "100206": "MazeNormal", "100207": "Maze", "100302": "BPSkill", "100306": "MazeNormal", "100307": "Maze", "100401": "Normal", "100402": "BPSkill", "100404": "", "100406": "MazeNormal", "100501": "Normal", "100502": "BPSkill", "100503": "Ultra", "100504": "", "100506": "MazeNormal", "100507": "Maze", "100801": "Normal", "100802": "BPSkill", "100803": "Ultra", "100804": "", "100806": "MazeNormal", "100807": "Maze", "100901": "Normal", "100902": "BPSkill", "100903": "Ultra", "100904": "", "100906": "MazeNormal", "100907": "Maze", "101301": "Normal", "101302": "BPSkill", "101303": "Ultra", "101304": "", "101306": "MazeNormal", "101307": "Maze", "110101": "Normal", "110102": "BPSkill", "110103": "Ultra", "110104": "", "110106": "MazeNormal", "110107": "Maze", "110203": "Ultra", "110206": "MazeNormal", "110207": "Maze", "110301": "Normal", "110302": "BPSkill", "110303": "Ultra", "110304": "", "110306": "MazeNormal", "110307": "Maze", "110401": "Normal", "110402": "BPSkill", "110403": "Ultra", "110404": "", "110406": "MazeNormal", "110407": "Maze", "110501": "Normal", "110502": "BPSkill", "110503": "Ultra", "110506": "MazeNormal", "110601": "Normal", "110602": "BPSkill", "110604": "", "110606": "MazeNormal", "110607": "Maze", "110801": "Normal", "110802": "BPSkill", "110803": "Ultra", "110806": "MazeNormal", "110807": "Maze", "110901": "Normal", "110902": "BPSkill", "110903": "Ultra", "110904": "", "110906": "MazeNormal", "110907": "Maze", "110909": "BPSkill", "120101": "Normal", "120108": "Normal", "120103": "Ultra", "120104": "", "120106": "MazeNormal", "120107": "Maze", "120201": "Normal", "120206": "MazeNormal", "120207": "Maze", "120301": "Normal", "120302": "BPSkill", "120303": "Ultra", "120304": "", "120306": "MazeNormal", "120307": "Maze", "120601": "Normal", "120602": "BPSkill", "120603": "Ultra", "120604": "", "120606": "MazeNormal", "120607": "Maze", "120901": "Normal", "120902": "BPSkill", "120903": "Ultra", "120904": "", "120906": "MazeNormal", "120907": "Maze", "121101": "Normal", "121102": "BPSkill", "121103": "Ultra", "121106": "MazeNormal", "121107": "Maze", "800101": "Normal", "800102": "BPSkill", "800103": "Ultra", "800104": "", "800106": "MazeNormal", "800107": "Maze", "800108": "Ultra", "800109": "Ultra", "800201": "Normal", "800202": "BPSkill", "800203": "Ultra", "800204": "", "800206": "MazeNormal", "800207": "Maze", "800208": "Ultra", "800209": "Ultra", "800301": "Normal", "800308": "Normal", "800303": "Ultra", "800304": "", "800306": "MazeNormal", "800307": "Maze", "800401": "Normal", "800408": "Normal", "800403": "Ultra", "800404": "", "800406": "MazeNormal", "800407": "Maze", "100601": "Normal", "100602": "BPSkill", "100603": "Ultra", "100604": "", "100606": "MazeNormal", "100607": "Maze", "120401": "Normal", "120402": "BPSkill", "120403": "Ultra", "120404": "", "120406": "MazeNormal", "909807": "Maze", "110603": "Ultra", "110507": "Maze", "800402": "BPSkill", "800302": "BPSkill", "120202": "BPSkill", "120204": "", "110804": "", "110504": "", "110202": "BPSkill", "110204": "", "100301": "Normal", "100304": "", "100303": "Ultra", "110701": "Normal", "110702": "BPSkill", "110703": "Ultra", "110704": "", "110706": "MazeNormal", "110707": "Maze", "110201": "Normal", "121104": "", "120407": "Maze", "100407": "Maze", "120102": "BPSkill", "100102": "BPSkill", "120203": "Ultra", "100403": "Ultra"} diff --git a/StarRailUID/utils/resource/RESOURCE_PATH.py b/StarRailUID/utils/resource/RESOURCE_PATH.py index 0113139..f977119 100644 --- a/StarRailUID/utils/resource/RESOURCE_PATH.py +++ b/StarRailUID/utils/resource/RESOURCE_PATH.py @@ -14,6 +14,7 @@ CHAR_ICON_PATH = RESOURCE_PATH / 'character' WEAPON_PATH = RESOURCE_PATH / 'light_cone' CHAR_PORTRAIT = RESOURCE_PATH / 'character_portrait' SKILL_PATH = RESOURCE_PATH / 'skill' +RELIC_PATH = RESOURCE_PATH / 'relic' TEXT2D_PATH = Path(__file__).parent / 'texture2d' @@ -29,6 +30,7 @@ def init_dir(): TEMP_PATH, CHAR_PORTRAIT, SKILL_PATH, + RELIC_PATH, ]: i.mkdir(parents=True, exist_ok=True)