diff --git a/StarRailUID/sruid_utils/api/mihomo/__init__.py b/StarRailUID/sruid_utils/api/mihomo/__init__.py index f68b8cd..e5512f4 100644 --- a/StarRailUID/sruid_utils/api/mihomo/__init__.py +++ b/StarRailUID/sruid_utils/api/mihomo/__init__.py @@ -1,5 +1,6 @@ """Mihomo.me api 包装 """ from .models import MihomoData as MihomoData +from .requests import get_char_card_info as requests __all__ = ["requests", "MihomoData"] diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index cb94350..dc3ca00 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -1,35 +1,19 @@ -import re import json import math +import re from pathlib import Path from typing import Dict, Union from mpmath import mp, nstr from PIL import Image, ImageDraw + from gsuid_core.logger import logger from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.image_tools import draw_text_by_line -from .to_data import api_to_dict -from .effect.Role import RoleInstance -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.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, - PLAYER_PATH, - WEAPON_PATH, - CHAR_PORTRAIT_PATH, -) +from ..utils.fonts.first_world import fw_font_28 from ..utils.fonts.starrail_fonts import ( sr_font_20, sr_font_23, @@ -39,6 +23,23 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_38, ) +from ..utils.map.name_covert import alias_to_char_name, name_to_avatar_id +from ..utils.map.SR_MAP_PATH import ( + AvatarRelicScore, + RelicId2Rarity, + avatarId2DamageType, + avatarId2Name, +) +from ..utils.resource.RESOURCE_PATH import ( + CHAR_PORTRAIT_PATH, + PLAYER_PATH, + RELIC_PATH, + SKILL_PATH, + WEAPON_PATH, +) +from .effect.Role import RoleInstance +from .mono.Character import Character +from .to_data import api_to_dict Excel_path = Path(__file__).parent / 'effect' with Path.open(Excel_path / 'Excel' / 'seele.json', encoding='utf-8') as f: @@ -744,7 +745,7 @@ async def cal(char_data: Dict): role = RoleInstance(char) im_tmp = await role.cal_damage(skill_type) skill_info_list.append(im_tmp) - if char.char_id == 1205: + elif char.char_id == 1205: for skill_type in ['Normal', 'Normal1', 'Ultra']: role = RoleInstance(char) im_tmp = await role.cal_damage(skill_type) diff --git a/StarRailUID/starrailuid_charinfo/effect/Role.py b/StarRailUID/starrailuid_charinfo/effect/Role.py index f3082c1..43a5bb9 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Role.py +++ b/StarRailUID/starrailuid_charinfo/effect/Role.py @@ -1,12 +1,13 @@ from mpmath import mp + from gsuid_core.logger import logger -from .Avatar.Avatar import Avatar -from .Weapon.Weapon import Weapon -from .utils import merge_attribute from ..mono.Character import Character +from .Avatar.Avatar import Avatar from .Base.model import DamageInstance from .Relic.Relic import RelicSet, SingleRelic +from .utils import merge_attribute +from .Weapon.Weapon import Weapon mp.dps = 14 @@ -176,6 +177,8 @@ class RoleInstance: # 检查是否有对某一个技能的属性加成 logger.info('检查是否有对某一个技能的属性加成') + if self.attribute_bonus is None: + raise Exception('attribute_bonus is None') for attr in self.attribute_bonus: # 攻击加成 if attr.__contains__('AttackAddedRatio'): @@ -209,6 +212,7 @@ class RoleInstance: self.base_attr, self.attribute_bonus ) logger.info(f'{merged_attr}') + skill_info_list = [] # 技能类型为攻击 if skill_info[0] == 'attack': skill_multiplier = skill_multiplier / skill_info[2] @@ -216,6 +220,8 @@ class RoleInstance: attack = merged_attr['attack'] logger.info(f'攻击力: {attack}') damage_add = 0 + hp_multiplier = 0 + hp_num = 0 if self.raw_data.avatar.id_ == 1205: hp_num = merged_attr['hp'] if skill_type == 'Normal1': diff --git a/StarRailUID/starrailuid_charinfo/to_data.py b/StarRailUID/starrailuid_charinfo/to_data.py index 0ef2513..2127d43 100644 --- a/StarRailUID/starrailuid_charinfo/to_data.py +++ b/StarRailUID/starrailuid_charinfo/to_data.py @@ -1,36 +1,36 @@ import json from pathlib import Path -from typing import List, Union, Optional +from typing import List, Optional, Union -from mpmath import mp from httpx import ReadTimeout +from mpmath import mp -from ..utils.error_reply import UID_HINT from ..sruid_utils.api.mihomo import MihomoData from ..sruid_utils.api.mihomo.models import Avatar -from ..utils.resource.RESOURCE_PATH import PLAYER_PATH from ..sruid_utils.api.mihomo.requests import get_char_card_info - -# from gsuid_core.utils.api.minigg.request import get_weapon_info -from .cal_value import cal_relic_sub_affix, cal_relic_main_affix +from ..utils.error_reply import UID_HINT from ..utils.excel.read_excel import AvatarPromotion, EquipmentPromotion from ..utils.map.SR_MAP_PATH import ( - SetId2Name, + EquipmentID2Name, + EquipmentID2Rarity, ItemId2Name, Property2Name, RelicId2SetId, - EquipmentID2Name, - EquipmentID2Rarity, - rankId2Name, - skillId2Name, - avatarId2Name, - skillId2Effect, + SetId2Name, + avatarId2DamageType, avatarId2EnName, + avatarId2Name, avatarId2Rarity, characterSkillTree, + rankId2Name, skillId2AttackType, - avatarId2DamageType, + skillId2Effect, + skillId2Name, ) +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH + +# from gsuid_core.utils.api.minigg.request import get_weapon_info +from .cal_value import cal_relic_main_affix, cal_relic_sub_affix mp.dps = 14 @@ -148,22 +148,7 @@ async def get_data(char: Avatar, sr_data: MihomoData, sr_uid: str): extra_ability_temp = {} extra_ability_temp['extraAbilityId'] = behavior['pointId'] extra_ability_temp['extraAbilityLevel'] = behavior['level'] - status_add = characterSkillTree[str(char['avatarId'])][ - str(behavior['pointId']) - ]['levels'][behavior['level'] - 1]['properties'] - extra_ability_temp['statusAdd'] = {} - if status_add: - for property_ in status_add: - extra_ability_temp['statusAdd']['property'] = property_[ - 'type' - ] - extra_ability_temp['statusAdd']['name'] = Property2Name[ - property_['type'] - ] - extra_ability_temp['statusAdd']['value'] = property_[ - 'value' - ] - char_data['avatarExtraAbility'].append(extra_ability_temp) + char_data['avatarExtraAbility'].append(extra_ability_temp) # 处理技能树中的属性加成 if f'{char["avatarId"]}2' == str(behavior['pointId'])[0:5]: @@ -245,6 +230,25 @@ async def get_data(char: Avatar, sr_data: MihomoData, sr_uid: str): rankTemp['rankName'] = rankId2Name[str(rank_id)] rank_temp.append(rankTemp) char_data['rankList'] = rank_temp + + # 处理命座中的 level_up_skills + level_up_skills = [] + for rank_item in char_data['rankList']: + rank_id = rank_item['rankId'] + # 121303 -> 1213003 + behavior_id = str(rank_id)[0:5] + '0' + str(rank_id)[-1] + char_skill_tree_data = characterSkillTree[str(char['avatarId'])][behavior_id] + if char_skill_tree_data['level_up_skills'] != []: + for skill in char_skill_tree_data['level_up_skills']: + skill_id = char_skill_tree_data['level_up_skills']['id'] + skill_up_num = char_skill_tree_data['level_up_skills']['num'] + # 查找skill_id在不在avatarSkill中 + for skill_item in char_data['avatarSkill']: + if skill_id == skill_item['skillId']: + skill_item['skillLevel'] += skill_up_num + level_up_skills.append(skill_item) + break + # 处理基础属性 base_attributes = {}