diff --git a/StarRailUID/starrailuid_charinfo/cal_damage.py b/StarRailUID/starrailuid_charinfo/cal_damage.py index 808f859..b43d166 100644 --- a/StarRailUID/starrailuid_charinfo/cal_damage.py +++ b/StarRailUID/starrailuid_charinfo/cal_damage.py @@ -1,13 +1,15 @@ import json from pathlib import Path - from typing import Dict, List, Union + from .effect.Role import RoleInstance from .mono.Character import Character + Excel_path = Path(__file__).parent / 'effect' with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: skill_dict = json.load(f) + async def cal_char_info(char_data: Dict): char: Character = Character(char_data) await char.get_equipment_info() diff --git a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py index 8dc3940..16a1f46 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py +++ b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py @@ -87,7 +87,9 @@ class Clara(BaseAvatar): def extra_ability(self): logger.info('额外能力') logger.info('史瓦罗的反击造成的伤害提高30%') - self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Talent', 'Talent') + self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num( + 'Talent', 'Talent' + ) self.extra_ability_attribute['TalentDmgAdd'] = 0.3 self.extra_ability_attribute['UltraDmgAdd'] = 0.3 @@ -325,8 +327,12 @@ class Welt(BaseAvatar): def eidolons(self): if self.avatar_rank >= 1: - self.eidolon_attribute['NormalSkillAdd'] = self.Skill_num('Normal', 'Normal') * 0.5 - self.eidolon_attribute['BPSkillSkillAdd'] = self.Skill_num('BPSkill', 'BPSkill') * 0.8 + self.eidolon_attribute['NormalSkillAdd'] = ( + self.Skill_num('Normal', 'Normal') * 0.5 + ) + self.eidolon_attribute['BPSkillSkillAdd'] = ( + self.Skill_num('BPSkill', 'BPSkill') * 0.8 + ) def extra_ability(self): logger.info('额外能力') @@ -469,7 +475,9 @@ class Topaz(BaseAvatar): self.eidolon_attribute['Talent1_FireResistancePenetration'] = 0.1 def extra_ability(self): - self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Ultra', 'Talent1') + self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num( + 'Ultra', 'Talent1' + ) logger.info('额外能力') logger.info('托帕和账账对拥有火属性弱点的敌方目标造成的伤害提高15%。') self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15 @@ -482,6 +490,7 @@ class Topaz(BaseAvatar): 'BPSkill_add' ) + class Guinaifen(BaseAvatar): Buff: BaseAvatarBuff @@ -504,9 +513,14 @@ class Guinaifen(BaseAvatar): def extra_ability(self): self.extra_ability_attribute['AllDamageAddedRatio'] = 0.2 if self.avatar_rank >= 6: - self.extra_ability_attribute['DmgRatio'] = self.Talent_num('Talent') * 4 + self.extra_ability_attribute['DmgRatio'] = ( + self.Talent_num('Talent') * 4 + ) else: - self.extra_ability_attribute['DmgRatio'] = self.Talent_num('Talent') * 3 + self.extra_ability_attribute['DmgRatio'] = ( + self.Talent_num('Talent') * 3 + ) + class Avatar: @classmethod diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py index 9512dbc..b7a4a37 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py @@ -109,7 +109,7 @@ class BaseAvatar: def Skill_Info(self, skill_type: str): skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type] return msgspec.convert(skill_info, type=List[Union[str, int]]) - + def Skill_num(self, skill: str, skill_type: str): if skill == 'Normal': skill_level = self.Skill.Normal_.level - 1 @@ -121,7 +121,7 @@ class BaseAvatar: skill_level = self.Skill.Talent_.level - 1 skill_info = skill_dict[str(self.avatar_id)][skill_type][skill_level] return msgspec.convert(skill_info, type=float) - + def Normalnum(self, skill_type: str): skill_info = skill_dict[str(self.avatar_id)][skill_type][ self.Skill.Normal_.level - 1 diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py index cfab1ae..174013d 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py @@ -78,12 +78,16 @@ class BaseRelicSetSkill: set_property = status_add.Property set_value = status_add.Value if set_property != '': - relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value + relic_set_attribute[set_property] = ( + relic_set_attribute.get(set_property, 0) + set_value + ) if self.pieces4: status_add = RelicSetSkill.RelicSet[str(self.setId)]['4'] if status_add: set_property = status_add.Property set_value = status_add.Value if set_property != '': - relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value + relic_set_attribute[set_property] = ( + relic_set_attribute.get(set_property, 0) + set_value + ) return relic_set_attribute diff --git a/StarRailUID/starrailuid_charinfo/effect/Role.py b/StarRailUID/starrailuid_charinfo/effect/Role.py index 833fb27..e096a61 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Role.py +++ b/StarRailUID/starrailuid_charinfo/effect/Role.py @@ -1,6 +1,7 @@ -from typing import List, Union import json from pathlib import Path +from typing import List, Union + from gsuid_core.logger import logger from .Avatar.Avatar import Avatar @@ -13,6 +14,8 @@ from .Relic.Relic import RelicSet, SingleRelic Excel_path = Path(__file__).parent with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: skill_dict = json.load(f) + + class RoleInstance: def __init__(self, raw_data: Character): self.raw_data = DamageInstance(raw_data) @@ -134,8 +137,10 @@ class RoleInstance: logger.info( f'{skill_name}对{skill_type}有{self.attribute_bonus[attr]}倍率加成' ) - skill_multiplier = skill_multiplier + self.attribute_bonus[attr] - + skill_multiplier = ( + skill_multiplier + self.attribute_bonus[attr] + ) + logger.info(f'技能区总: {skill_multiplier}') # 检查武器战斗生效的buff @@ -155,7 +160,7 @@ class RoleInstance: if self.attribute_bonus is None: raise Exception('attribute_bonus is None') logger.info(self.attribute_bonus) - + # 检查是否有对某一个技能的属性加成 logger.info('检查是否有对某一个技能的属性加成') for attr in self.attribute_bonus: @@ -179,7 +184,7 @@ class RoleInstance: self.attribute_bonus['StatusProbabilityBase'] = ( status_probability + self.attribute_bonus[attr] ) - + merged_attr = await merge_attribute( self.base_attr, self.attribute_bonus ) @@ -217,7 +222,9 @@ class RoleInstance: hp_num = merged_attr['hp'] skill_type_hp = skill_type + '_HP' if skill_type_hp in skill_dict[str(self.raw_data.avatar.id_)]: - hp_multiplier = self.avatar.Skill_num(skill_info[4], skill_type_hp) + hp_multiplier = self.avatar.Skill_num( + skill_info[4], skill_type_hp + ) else: hp_multiplier = 0 for attr in self.attribute_bonus: @@ -227,8 +234,10 @@ class RoleInstance: logger.info( f'{skill_name}对{skill_type}有{self.attribute_bonus[attr]}倍率加成' ) - hp_multiplier = hp_multiplier + self.attribute_bonus[attr] - + hp_multiplier = ( + hp_multiplier + self.attribute_bonus[attr] + ) + if skill_type == 'Talent': if ( self.raw_data.avatar.rank >= 6 diff --git a/StarRailUID/starrailuid_charinfo/mono/Character.py b/StarRailUID/starrailuid_charinfo/mono/Character.py index 1571bf1..5ef093f 100644 --- a/StarRailUID/starrailuid_charinfo/mono/Character.py +++ b/StarRailUID/starrailuid_charinfo/mono/Character.py @@ -1,8 +1,6 @@ -import json from typing import Dict, List from collections import Counter -from loguru import logger from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty @@ -53,7 +51,9 @@ class Character: for equip_ability in equip_ability_property: property_type = equip_ability['PropertyType'] value = equip_ability['Value']['Value'] - self.add_attr[property_type] = value + self.add_attr.get(property_type, 0) + self.add_attr[property_type] = value + self.add_attr.get( + property_type, 0 + ) async def get_char_attribute_bonus(self): attribute_bonus = self.attribute_bonus @@ -61,7 +61,9 @@ class Character: status_add = bonus['statusAdd'] bonus_property = status_add['property'] value = status_add['value'] - self.add_attr[bonus_property] = value + self.add_attr.get(bonus_property, 0) + self.add_attr[bonus_property] = value + self.add_attr.get( + bonus_property, 0 + ) async def get_relic_info(self): # 计算圣遗物效果 @@ -71,12 +73,16 @@ class Character: # 处理主属性 relic_property = relic['MainAffix']['Property'] property_value = relic['MainAffix']['Value'] - self.add_attr[relic_property] = property_value + self.add_attr.get(relic_property, 0) + self.add_attr[relic_property] = property_value + self.add_attr.get( + relic_property, 0 + ) # 处理副词条 for sub in relic['SubAffixList']: sub_property = sub['Property'] sub_value = sub['Value'] - self.add_attr[sub_property] = sub_value + self.add_attr.get(sub_property, 0) + self.add_attr[sub_property] = sub_value + self.add_attr.get( + sub_property, 0 + ) # 处理套装属性 set_id_dict = Counter(set_id_list) # logger.info(set_id_dict.most_common()) @@ -91,14 +97,18 @@ class Character: set_property = status_add.Property set_value = status_add.Value if set_property != '': - self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0) + self.add_attr[ + set_property + ] = set_value + self.add_attr.get(set_property, 0) if count == 4: status_add = RelicSetSkill.RelicSet[str(set_id)]['4'] if status_add: set_property = status_add.Property set_value = status_add.Value if set_property != '': - self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0) + self.add_attr[ + set_property + ] = set_value + self.add_attr.get(set_property, 0) # logger.info(json.dumps(self.base_attributes)) # logger.info(json.dumps(self.add_attr))