diff --git a/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py b/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py deleted file mode 100644 index 8389683..0000000 --- a/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py +++ /dev/null @@ -1,4543 +0,0 @@ -import copy -from typing import Dict, List - -from gsuid_core.logger import logger - -from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff -from ..Base.model import DamageInstanceAvatar, DamageInstanceSkill -from ..Role import calculate_damage, calculate_heal, calculate_shield - - -class Seele(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank < 2: - self.eidolon_attribute['SpeedAddedRatio'] = 0.25 - if self.avatar_rank >= 1: - self.eidolon_attribute['CriticalChanceBase'] = 0.15 - if self.avatar_rank >= 2: - self.eidolon_attribute['SpeedAddedRatio'] = 0.5 - - def extra_ability(self): - # 额外能力 割裂 抗性穿透提高20 - self.extra_ability_attribute['QuantumResistancePenetration'] = 0.2 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # logger.info(base_attr) - # logger.info(self.avatar_rank) - - # 希尔天赋再现加伤害 - attribute_bonus['AllDamageAddedRatio'] = self.Skill_num( - 'Talent', 'Talent' - ) + attribute_bonus.get('AllDamageAddedRatio', 0) - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算大招伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 银狼降防终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - add_attr_bonus = copy.deepcopy(attribute_bonus) - add_attr_bonus['ignore_defence'] = 0.45 + add_attr_bonus.get( - 'ignore_defence', 0 - ) - damagelist4 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append( - {'name': '银狼降防终结技', 'damagelist': damagelist4} - ) - - logger.info(skill_info_list) - return skill_info_list - - -class JingYuan(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['NormalDmgAdd'] = 0.2 - self.eidolon_attribute['BPSkillDmgAdd'] = 0.2 - self.eidolon_attribute['UltraDmgAdd'] = 0.2 - if self.avatar_rank >= 6: - self.eidolon_attribute['Talent_DmgRatio'] = 0.288 - - def extra_ability(self): - logger.info('额外能力') - logger.info( - '【神君】下回合的攻击段数大于等于6段, 则其下回合的暴击伤害提高25%。' - ) - self.extra_ability_attribute['CriticalDamageBase'] = 0.25 - logger.info('施放战技后, 暴击率提升10%') - self.extra_ability_attribute['CriticalChanceBase'] = 0.1 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算大招伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 神君 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append( - {'name': '10层神君伤害', 'damagelist': damagelist4} - ) - - logger.info(skill_info_list) - return skill_info_list - - -class Welt(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - logger.info('额外能力') - logger.info( - '施放终结技时, 有100%基础概率使目标受到的伤害提高12%, 持续2回合。' - ) - self.extra_ability_attribute['DmgRatio'] = 0.12 - logger.info('对被弱点击破的敌方目标造成的伤害提高20') - self.extra_ability_attribute['AllDamageAddedRatio'] = 0.20 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - attnum = 3 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') / attnum - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - if self.avatar_rank >= 6: - attnum = 4 - damagelist2[0] = damagelist2[0] * attnum - damagelist2[1] = damagelist2[1] * attnum - damagelist2[2] = damagelist2[2] * attnum - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算大招伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - if self.avatar_rank >= 1: - skill_multiplier = self.Skill_num('Normal', 'Normal') * 0.5 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[0] = damagelist1[0] + damagelist4[0] - damagelist4[1] = damagelist1[1] + damagelist4[1] - damagelist4[2] = damagelist1[2] + damagelist4[2] - damagelist4[2] += damage3 - skill_info_list.append( - {'name': '强化普攻', 'damagelist': damagelist4} - ) - - skill_multiplier = (self.Skill_num('BPSkill', 'BPSkill') / 3) * 0.8 - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist5[0] = damagelist2[0] + damagelist5[0] - damagelist5[1] = damagelist2[1] + damagelist5[1] - damagelist5[2] = damagelist2[2] + damagelist5[2] - damagelist5[2] += damage3 - skill_info_list.append( - {'name': '强化战技', 'damagelist': damagelist5} - ) - - logger.info(skill_info_list) - return skill_info_list - - -class Danhengil(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 6: - self.extra_ability_attribute[ - 'Normal3_ImaginaryResistancePenetration' - ] = 0.6 - - def extra_ability(self): - logger.info('额外能力') - logger.info( - '对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%。' - ) - self.extra_ability_attribute['CriticalDamageBase'] = 0.24 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - start_buff = 3 - add_buff = 1 - max_buff = 6 - if self.avatar_rank >= 1: - start_buff = 6 - add_buff = 2 - max_buff = 10 - - injury_add = self.Skill_num('Talent', 'Talent') - critical_damage_add = self.Skill_num('BPSkill', 'BPSkill') - critical_buff = 0 - if self.avatar_rank >= 4: - critical_buff = critical_damage_add * 4 - - skill_info_list = [] - # 计算普攻1伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') / 2 - damage_c = 0 - damage_e = 0 - damage_a = 0 - add_attr_bonus: Dict[str, float] = {} - for i in range(1, 3): - add_attr_bonus = copy.deepcopy(attribute_bonus) - damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) - add_attr_bonus['AllDamageAddedRatio'] = ( - damage_buff * injury_add - + add_attr_bonus.get('AllDamageAddedRatio', 0) - ) - if self.avatar_rank >= 4: - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damage_c += damage1 - damage_e += damage2 - damage_a += damage3 - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal', - 'Thunder', - 0.44, - self.avatar_level, - ) - damage_a += damage3 - skill_info_list.append( - {'name': '普攻', 'damagelist': [damage_c, damage_e, damage_a]} - ) - - # 计算瞬华伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal1') / 3 - damage_c = 0 - damage_e = 0 - damage_a = 0 - add_attr_bonus: Dict[str, float] = {} - for i in range(1, 4): - add_attr_bonus = copy.deepcopy(attribute_bonus) - damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) - add_attr_bonus['AllDamageAddedRatio'] = ( - damage_buff * injury_add - + add_attr_bonus.get('AllDamageAddedRatio', 0) - ) - if self.avatar_rank >= 4: - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal1', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damage_c += damage1 - damage_e += damage2 - damage_a += damage3 - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal', - 'Thunder', - 0.44, - self.avatar_level, - ) - damage_a += damage3 - skill_info_list.append( - {'name': '瞬华', 'damagelist': [damage_c, damage_e, damage_a]} - ) - - # 计算天矢阴伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal2') / 5 - damage_c = 0 - damage_e = 0 - damage_a = 0 - add_attr_bonus: Dict[str, float] = {} - for i in range(1, 6): - add_attr_bonus = copy.deepcopy(attribute_bonus) - damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) - add_attr_bonus['AllDamageAddedRatio'] = ( - damage_buff * injury_add - + add_attr_bonus.get('AllDamageAddedRatio', 0) - ) - if self.avatar_rank >= 4: - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - elif i >= 4: - critical_buff = (i - 3) * critical_damage_add - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal2', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damage_c += damage1 - damage_e += damage2 - damage_a += damage3 - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal', - 'Thunder', - 0.44, - self.avatar_level, - ) - damage_a += damage3 - skill_info_list.append( - {'name': '天矢阴', 'damagelist': [damage_c, damage_e, damage_a]} - ) - - # 计算盘拏耀跃伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal3') / 7 - damage_c = 0 - damage_e = 0 - damage_a = 0 - add_attr_bonus: Dict[str, float] = {} - for i in range(1, 8): - add_attr_bonus = copy.deepcopy(attribute_bonus) - damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) - add_attr_bonus['AllDamageAddedRatio'] = ( - damage_buff * injury_add - + add_attr_bonus.get('AllDamageAddedRatio', 0) - ) - if self.avatar_rank >= 4: - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - elif i >= 4: - critical_buff = (i - 3) * critical_damage_add - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal3', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damage_c += damage1 - damage_e += damage2 - damage_a += damage3 - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal', - 'Thunder', - 0.44, - self.avatar_level, - ) - damage_a += damage3 - skill_info_list.append( - {'name': '盘拏耀跃', 'damagelist': [damage_c, damage_e, damage_a]} - ) - - # 计算大招伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') / 3 - damage_c = 0 - damage_e = 0 - damage_a = 0 - add_attr_bonus: Dict[str, float] = {} - for _ in range(1, 4): - add_attr_bonus = copy.deepcopy(attribute_bonus) - damage_buff = min(max_buff, 10) - add_attr_bonus['AllDamageAddedRatio'] = ( - damage_buff * injury_add - + add_attr_bonus.get('AllDamageAddedRatio', 0) - ) - critical_buff = 4 * critical_damage_add - add_attr_bonus['CriticalDamageBase'] = ( - critical_buff + add_attr_bonus.get('CriticalDamageBase', 0) - ) - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damage_c += damage1 - damage_e += damage2 - damage_a += damage3 - damage1, damage2, damage3 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Normal', - 'Normal', - 'Thunder', - 0.44, - self.avatar_level, - ) - damage_a += damage3 - skill_info_list.append( - {'name': '终结技', 'damagelist': [damage_c, damage_e, damage_a]} - ) - logger.info(skill_info_list) - return skill_info_list - - -class Argenti(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['CriticalDamageBase'] = 0.4 - if self.avatar_rank >= 2: - self.eidolon_attribute['AttackAddedRatio'] = 0.4 - if self.avatar_rank >= 6: - self.eidolon_attribute['Ultra_PhysicalResistancePenetration'] = 0.3 - - def extra_ability(self): - self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - talent_cc_add = self.Skill_num('Talent', 'Talent') - attribute_bonus['CriticalChanceBase'] = ( - talent_cc_add * 10 + attribute_bonus.get('CriticalChanceBase', 0) - ) - if self.avatar_rank >= 4: - attribute_bonus['CriticalDamageBase'] = 0.08 + attribute_bonus.get( - 'CriticalDamageBase', 0 - ) - attribute_bonus['CriticalChanceBase'] = ( - talent_cc_add * 2 - + attribute_bonus.get('CriticalChanceBase', 0) - ) - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算大招1伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append( - {'name': '终结技(90耗能)', 'damagelist': damagelist3} - ) - - # 计算大招2伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra1') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - # 计算大招2额外伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra_add') - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist5[0] = damagelist5[0] * 6 + damagelist4[0] - damagelist5[1] = damagelist5[1] * 6 + damagelist4[1] - damagelist5[2] = damagelist5[2] * 6 + damagelist4[2] - skill_info_list.append( - {'name': '强化终结技(180耗能)', 'damagelist': damagelist5} - ) - return skill_info_list - - -class Clara(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['AttackAddedRatio'] = 0.2 - - def extra_ability(self): - logger.info('额外能力') - logger.info('史瓦罗的反击造成的伤害提高30%') - self.extra_ability_attribute['TalentDmgAdd'] = 0.3 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算反击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '反击', 'damagelist': damagelist3}) - - # 计算强化反击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num( - 'Ultra', 'Talent1' - ) - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '强化反击', 'damagelist': damagelist4}) - - # 计算1+1托帕反击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - add_attr_bonus = copy.deepcopy(attribute_bonus) - add_attr_bonus['Talent_DmgRatio'] = ( - add_attr_bonus.get('Talent_DmgRatio', 0) + 0.5 - ) - add_attr_bonus['Talent_CriticalDamageBase'] = ( - add_attr_bonus.get('Talent_CriticalDamageBase', 0) + 0.74 - ) - damagelist5 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist5[2] += damage3 - skill_info_list.append( - {'name': '(1+1托帕)反击', 'damagelist': damagelist5} - ) - - # 计算反击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num( - 'Ultra', 'Talent1' - ) - add_attr_bonus = copy.deepcopy(attribute_bonus) - add_attr_bonus['Talent_DmgRatio'] = ( - add_attr_bonus.get('Talent_DmgRatio', 0) + 0.5 - ) - add_attr_bonus['Talent_CriticalDamageBase'] = ( - add_attr_bonus.get('Talent_CriticalDamageBase', 0) + 0.74 - ) - damagelist6 = await calculate_damage( - base_attr, - add_attr_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist6[2] += damage3 - skill_info_list.append( - {'name': '(1+1托帕)强化反击', 'damagelist': damagelist6} - ) - - return skill_info_list - - -class Silverwolf(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 6: - self.extra_ability_attribute['AllDamageAddedRatio'] = 1 - - def extra_ability(self): - logger.info('额外能力') - logger.info('战技降抗') - logger.info('战技使目标全属性抗性降低的效果额外降低3%') - enemy_status_resistance = self.Skill_num('BPSkill', 'BPSkill_D') + 0.03 - self.extra_ability_attribute[ - 'QuantumResistancePenetration' - ] = enemy_status_resistance - logger.info('终结技降防') - ultra_defence = self.Skill_num('Ultra', 'Ultra_D') - logger.info('天赋降防') - talent_defence = self.Skill_num('Talent', 'Talent') - ignore_defence = ultra_defence + talent_defence - self.extra_ability_attribute['ignore_defence'] = ignore_defence - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - if self.avatar_rank >= 4: - skill_multiplier += 1 - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - return skill_info_list - - -class Kafka(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.extra_ability_attribute['DOTDmgAdd'] = 0.3 - if self.avatar_rank >= 2: - self.extra_ability_attribute['DOTDmgAdd'] = 0.55 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算持续伤害 - skill_multiplier = self.Skill_num('Ultra', 'DOT') - if self.avatar_rank >= 6: - skill_multiplier += 1.56 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'DOT', - 'DOT', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append( - {'name': '单次持续伤害', 'damagelist': damagelist4} - ) - - # 计算追加攻击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist5[2] += damage3 - skill_info_list.append({'name': '追加攻击', 'damagelist': damagelist5}) - - return skill_info_list - - -class Blade(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['CriticalChanceBase'] = 0.15 - if self.avatar_rank >= 4: - self.eidolon_attribute['HPAddedRatio'] = 0.4 - - def extra_ability(self): - logger.info('额外能力') - logger.info('天赋施放的追加攻击伤害提高20%') - self.extra_ability_attribute['TalentDmgAdd'] = 0.2 - logger.info('战技加伤') - self.extra_ability_attribute['AllDamageAddedRatio'] = self.Skill_num( - 'BPSkill', 'BPSkill' - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算强化普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal1') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - - skill_multiplier = self.Skill_num('Normal', 'Normal1_HP') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist3[0] += damagelist2[0] - damagelist3[1] += damagelist2[1] - damagelist3[2] += damagelist2[2] - skill_info_list.append({'name': '无间剑树', 'damagelist': damagelist3}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - - skill_multiplier = self.Skill_num('Ultra', 'Ultra_HP') - if self.avatar_rank >= 1: - skill_multiplier += 0.9 - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist5[0] += damagelist4[0] - damagelist5[1] += damagelist4[1] - damagelist5[2] += damagelist4[2] - skill_info_list.append({'name': '终结技', 'damagelist': damagelist5}) - - # 计算追加攻击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist6 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist6[2] += damage3 - - skill_multiplier = self.Skill_num('Talent', 'Talent_HP') - damagelist7 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist7[0] += damagelist6[0] - damagelist7[1] += damagelist6[1] - damagelist7[2] += damagelist6[2] - if self.avatar_rank >= 6: - hp = ( - base_attr['hp'] * (1 + attribute_bonus['HPAddedRatio']) - + attribute_bonus['HPDelta'] - ) - damage_add = hp * 0.5 - damagelist7[0] += damage_add - damagelist7[1] += damage_add - damagelist7[2] += damage_add - skill_info_list.append({'name': '追加攻击', 'damagelist': damagelist7}) - - return skill_info_list - - -class Fuxuan(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['CriticalDamageBase'] = 0.3 - - def extra_ability(self): - logger.info('符玄战技【穷观阵】属性加成') - self.extra_ability_attribute['CriticalChanceBase'] = self.Skill_num( - 'BPSkill', 'BPSkill_CC' - ) - self.extra_ability_attribute['HPAddedRatio'] = self.Skill_num( - 'BPSkill', 'BPSkill_HP' - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal_HP') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra_HP') - if self.avatar_rank >= 6: - skill_multiplier += 1.2 - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist2[2] += damage2 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist2}) - - # 计算终结技治疗 - damagelist3 = await calculate_heal( - base_attr, - attribute_bonus, - 'Ultra', - 0.05, - 133, - ) - skill_info_list.append( - {'name': '终结技治疗', 'damagelist': damagelist3} - ) - - return skill_info_list - - -class Yanqing(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 4: - self.eidolon_attribute['IceResistancePenetration'] = 0.15 - - def extra_ability(self): - logger.info('额外能力') - logger.info('触发暴击时, 速度提高10%') - self.extra_ability_attribute['SpeedAddedRatio'] = 0.1 - logger.info('【智剑连心】增益') - critical_damage_base_t = self.Skill_num('Talent', 'Talent_CD') - critical_damage_base_u = self.Skill_num('Ultra', 'Ultra_CD') - self.extra_ability_attribute['CriticalDamageBase'] = ( - critical_damage_base_t + critical_damage_base_u - ) - critical_chance_base = self.Skill_num('Talent', 'Talent_CC') - self.extra_ability_attribute['CriticalChanceBase'] = ( - critical_chance_base + 0.6 - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算附加伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - if self.avatar_rank >= 1: - skill_multiplier += 0.9 - else: - skill_multiplier += 0.3 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '附加伤害', 'damagelist': damagelist4}) - - return skill_info_list - - -class Himeko(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['SpeedAddedRatio'] = 0.1 - if self.avatar_rank >= 2: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.15 - - def extra_ability(self): - logger.info('额外能力') - logger.info('战技对灼烧状态下的敌方目标造成的伤害提高20%。') - self.extra_ability_attribute['BPSkillDmgAdd'] = 0.2 - logger.info('若当前生命值百分比大于等于80%, 则暴击率提高15%。') - self.extra_ability_attribute['CriticalChanceBase'] = 0.15 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算追加攻击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '追加攻击', 'damagelist': damagelist4}) - - return skill_info_list - - -class Qingque(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['UltraDmgAdd'] = 0.1 - - def extra_ability(self): - logger.info('额外能力') - logger.info('施放强化普攻后, 青雀的速度提高10%, 持续1回合。') - self.extra_ability_attribute['SpeedAddedRatio'] = 0.1 - logger.info('默认4层战技加伤害') - all_damage_added_ratio = self.Skill_num('BPSkill', 'BPSkill') + 0.1 - self.extra_ability_attribute['AllDamageAddedRatio'] = ( - all_damage_added_ratio * 4 - ) - logger.info('默认暗杠加攻') - self.extra_ability_attribute['AttackAddedRatio'] = self.Skill_num( - 'Talent', 'Talent' - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算杠上开花伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal1') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append( - {'name': '杠上开花!', 'damagelist': damagelist2} - ) # noqa: RUF001 - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - return skill_info_list - - -class Jingliu(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['CriticalDamageBase'] = 0.24 - if self.avatar_rank >= 2: - self.eidolon_attribute['BPSkill1DmgAdd'] = 0.8 - if self.avatar_rank >= 4: - self.eidolon_attribute['BPSkill1AttackAddedRatio'] = 0.3 - self.eidolon_attribute['UltraAttackAddedRatio'] = 0.3 - if self.avatar_rank >= 6: - self.eidolon_attribute['Ultra_CriticalDamageBase'] = 0.5 - self.eidolon_attribute['BPSkill1_CriticalDamageBase'] = 0.5 - - def extra_ability(self): - logger.info('额外能力') - logger.info('【转魄】状态下, 终结技造成的伤害提高20%。') - logger.info('【转魄】状态下, 暴击率提高。') - logger.info('【转魄】状态下, 攻击力提高。') - self.extra_ability_attribute['UltraDmgAdd'] = 0.2 - critical_chance_base = self.Skill_num('Talent', 'Talent_CC') - self.extra_ability_attribute[ - 'Ultra_CriticalChanceBase' - ] = critical_chance_base - self.extra_ability_attribute[ - 'BPSkill1_CriticalChanceBase' - ] = critical_chance_base - attack_added_ratio = self.Skill_num('Talent', 'Talent_atk') - self.extra_ability_attribute[ - 'BPSkill1AttackAddedRatio' - ] = attack_added_ratio - self.extra_ability_attribute[ - 'UltraAttackAddedRatio' - ] = attack_added_ratio - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算寒川映月伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill1') - if self.avatar_rank >= 1: - skill_multiplier += 1 - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill1', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '寒川映月', 'damagelist': damagelist3}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - if self.avatar_rank >= 1: - skill_multiplier += 1 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist4}) - - return skill_info_list - - -class Topaz(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['Talent_CriticalDamageBase'] = 0.5 - if self.avatar_rank >= 6: - self.eidolon_attribute['Talent1_FireResistancePenetration'] = 0.1 - - def extra_ability(self): - logger.info('额外能力') - logger.info('托帕和账账对拥有火属性弱点的敌方目标造成的伤害提高15%。') - self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15 - logger.info('涨幅惊人暴击伤害提高') - self.extra_ability_attribute[ - 'Talent1_CriticalDamageBase' - ] = self.Skill_num('Ultra', 'Ultra_CD') - logger.info('【负债证明】状态,使其受到的追加攻击伤害提高') - self.extra_ability_attribute['Talent_DmgRatio'] = self.Skill_num( - 'BPSkill', 'BPSkill_add' - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算账账伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '账账', 'damagelist': damagelist2}) - - # 计算强化账账伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') + self.Skill_num( - 'Ultra', 'Talent1' - ) - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent1', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '强化账账', 'damagelist': damagelist3}) - - return skill_info_list - - -class Guinaifen(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - self.extra_ability_attribute['AllDamageAddedRatio'] = 0.2 - if self.avatar_rank >= 6: - self.extra_ability_attribute['DmgRatio'] = ( - self.Skill_num('Talent', 'Talent') * 4 - ) - else: - self.extra_ability_attribute['DmgRatio'] = ( - self.Skill_num('Talent', 'Talent') * 3 - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算持续伤害 - skill_multiplier = self.Skill_num('BPSkill', 'DOT') - if self.avatar_rank >= 2: - skill_multiplier += 0.4 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'DOT', - 'DOT', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append( - {'name': '单次持续伤害', 'damagelist': damagelist4} - ) - - return skill_info_list - - -class Gepard(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技护盾 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - skill_num = self.Skill_num('Ultra', 'Ultra_G') - damagelist3 = await calculate_shield( - base_attr, - attribute_bonus, - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '终结技(护盾)', 'damagelist': damagelist3} - ) - - return skill_info_list - - -class Luocha(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['AttackAddedRatio'] = 0.2 - if self.avatar_rank >= 6: - self.eidolon_attribute['ResistancePenetration'] = 0.2 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist2}) - - # 计算战技治疗 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - damagelist3 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - 1, - ) - skill_info_list.append( - {'name': '战技治疗量', 'damagelist': damagelist3} - ) - if self.avatar_rank >= 2: - add_attr_bonus = copy.deepcopy(attribute_bonus) - add_attr_bonus['HealRatioBase'] = ( - add_attr_bonus.get('HealRatioBase', 0) + 0.3 - ) - damagelist4 = await calculate_heal( - base_attr, - add_attr_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - 1, - ) - skill_info_list.append( - { - 'name': '战技治疗量(生命<50%)(2魂)', - 'damagelist': damagelist4, - } - ) - - damagelist5 = await calculate_shield( - base_attr, - attribute_bonus, - 0.18, - 240, - 1, - ) - skill_info_list.append( - { - 'name': '战技护盾量(生命>50%)(2魂)', - 'damagelist': damagelist5, - } - ) - - # 计算天赋治疗量 - skill_multiplier = self.Skill_num('Talent', 'Talent') - skill_num = self.Skill_num('Talent', 'Talent_G') - damagelist6 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - 1, - ) - skill_info_list.append( - {'name': '天赋治疗量', 'damagelist': damagelist6} - ) - - # 计算技能树额外能力治疗量 - damagelist7 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - 0.07, - 93, - 1, - ) - skill_info_list.append( - {'name': '技能树治疗量', 'damagelist': damagelist7} - ) - - return skill_info_list - - -class Bailu(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['HealRatioBase'] = 0.15 - if self.avatar_rank >= 4: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.3 - - def extra_ability(self): - self.extra_ability_attribute['HPAddedRatio'] = 0.10 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技治疗 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - damagelist2 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - ) - heal_num = damagelist2[0] - for i in range(1, 3): - beilv = 1 - (i * 0.15) - damagelist2[0] = damagelist2[0] + heal_num * beilv - skill_info_list.append( - {'name': '战技治疗量', 'damagelist': damagelist2} - ) - - # 计算终结技治疗量 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - skill_num = self.Skill_num('Ultra', 'Ultra_G') - damagelist3 = await calculate_heal( - base_attr, - attribute_bonus, - 'Ultra', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '终结技治疗量', 'damagelist': damagelist3} - ) - - # 计算天赋生息治疗量 - skill_multiplier = self.Skill_num('Talent', 'Talent') - skill_num = self.Skill_num('Talent', 'Talent_G') - damagelist4 = await calculate_heal( - base_attr, - attribute_bonus, - 'Talent', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '天赋[生息]治疗量', 'damagelist': damagelist4} - ) - - # 计算天赋复活治疗量 - skill_multiplier = self.Skill_num('Talent', 'Talent1') - skill_num = self.Skill_num('Talent', 'Talent1_G') - damagelist5 = await calculate_heal( - base_attr, - attribute_bonus, - 'Talent', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '天赋[复活]治疗量', 'damagelist': damagelist5} - ) - - return skill_info_list - - -class Lynx(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['HealRatioBase'] = 0.2 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - # 计算战技生命上限 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill_HP') - skill_num = self.Skill_num('BPSkill', 'BPSkill_HP_G') - if self.avatar_rank >= 6: - skill_multiplier += 0.06 - hp = ( - base_attr['hp'] * (1 + attribute_bonus['HPAddedRatio']) - + attribute_bonus['HPDelta'] - ) - hp_add = hp * skill_multiplier + skill_num - attribute_bonus['HPDelta'] = attribute_bonus.get('HPDelta', 0) + hp_add - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal_HP') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技治疗 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - damagelist2 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '战技治疗量', 'damagelist': damagelist2} - ) - damagelist3 = [] - damagelist3.append(hp_add) - skill_info_list.append( - {'name': '[求生反应]生命上限', 'damagelist': damagelist3} - ) - - # 计算终结技治疗量 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - skill_num = self.Skill_num('Ultra', 'Ultra_G') - damagelist4 = await calculate_heal( - base_attr, - attribute_bonus, - 'Ultra', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '终结技治疗量', 'damagelist': damagelist4} - ) - - # 计算天赋治疗量 - skill_multiplier = self.Skill_num('Talent', 'Talent') - skill_num = self.Skill_num('Talent', 'Talent_G') - damagelist5 = await calculate_heal( - base_attr, - attribute_bonus, - 'Talent', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '天赋缓回治疗量', 'damagelist': damagelist5} - ) - - # 计算天赋求生反应治疗量 - skill_multiplier = self.Skill_num( - 'Talent', 'Talent1' - ) + self.Skill_num('Talent', 'Talent') - skill_num = self.Skill_num('Talent', 'Talent1_G') + self.Skill_num( - 'Talent', 'Talent_G' - ) - damagelist6 = await calculate_heal( - base_attr, - attribute_bonus, - 'Talent', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '天赋[求生反应]缓回治疗量', 'damagelist': damagelist6} - ) - - return skill_info_list - - -class Natasha(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - self.extra_ability_attribute['HealRatioBase'] = 0.1 + self.Skill_num( - 'Talent', 'Talent' - ) - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - if self.avatar_rank >= 6: - damagelist_add = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - 0.4, - self.avatar_level, - 1, - ) - damagelist1[0] += damagelist_add[0] - damagelist1[1] += damagelist_add[1] - damagelist1[2] += damagelist_add[2] - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技治疗 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - damagelist2 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '战技治疗量', 'damagelist': damagelist2} - ) - - # 计算战技缓回治疗量 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill1') - skill_num = self.Skill_num('BPSkill', 'BPSkill1_G') - damagelist3 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '战技缓回治疗量', 'damagelist': damagelist3} - ) - - # 计算终结技治疗量 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - skill_num = self.Skill_num('Ultra', 'Ultra_G') - damagelist4 = await calculate_heal( - base_attr, - attribute_bonus, - 'Ultra', - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '终结技治疗量', 'damagelist': damagelist4} - ) - - return skill_info_list - - -class Mar7th(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技护盾 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - damagelist2 = await calculate_shield( - base_attr, - attribute_bonus, - skill_multiplier, - skill_num, - ) - skill_info_list.append( - {'name': '战技护盾量', 'damagelist': damagelist2} - ) - - # 计算终结技 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算追加攻击 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - if self.avatar_rank >= 4: - defence = ( - base_attr['defence'] - * (1 + attribute_bonus['DefenceAddedRatio']) - + attribute_bonus['DefenceDelta'] - ) - damage_add = defence * 0.3 - damagelist4[0] += damage_add - damagelist4[1] += damage_add - damagelist4[2] += damage_add - skill_info_list.append({'name': '追加攻击', 'damagelist': damagelist4}) - - # 计算2命护盾 - if self.avatar_rank >= 2: - damagelist5 = await calculate_shield( - base_attr, - attribute_bonus, - 0.24, - 320, - ) - skill_info_list.append( - {'name': '开场护盾(2命)', 'damagelist': damagelist5} - ) - - return skill_info_list - - -class Bronya(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['SpeedAddedRatio'] = 0.3 - - def extra_ability(self): - self.extra_ability_attribute['AllDamageAddedRatio'] = 0.1 - self.extra_ability_attribute['Normal_CriticalChance'] = 1 - self.extra_ability_attribute['DefenceAddedRatio'] = 0.2 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - # 终结技增加伤害 - attribute_bonus['AttackAddedRatio'] = attribute_bonus.get( - 'AttackAddedRatio', 0 - ) + self.Skill_num('Ultra', 'Ultra_A') - add_critical_damage_base = ( - attribute_bonus.get('CriticalDamageBase', 0) - * self.Skill_num('Ultra', 'Ultra') - ) + self.Skill_num('Ultra', 'Ultra_G') - attribute_bonus['CriticalDamageBase'] = ( - attribute_bonus.get('CriticalDamageBase', 0) - + add_critical_damage_base - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算终结技 - critical_damage_base_str = add_critical_damage_base * 100 - damagelist2 = [] - damagelist2.append(critical_damage_base_str) - skill_info_list.append( - {'name': '终结技提升爆伤(%)', 'damagelist': damagelist2} - ) - - return skill_info_list - - -class Yukong(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['SpeedAddedRatio'] = 0.1 - if self.avatar_rank >= 4: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.3 - - def extra_ability(self): - self.extra_ability_attribute['ImaginaryAddedRatio'] = 0.15 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - # 终结技增加伤害 - attribute_bonus['AttackAddedRatio'] = attribute_bonus.get( - 'AttackAddedRatio', 0 - ) + self.Skill_num('BPSkill', 'BPSkill') - attribute_bonus['CriticalChanceBase'] = attribute_bonus.get( - 'CriticalChanceBase', 0 - ) + self.Skill_num('Ultra', 'Ultra_CC') - attribute_bonus['CriticalDamageBase'] = attribute_bonus.get( - 'CriticalDamageBase', 0 - ) + self.Skill_num('Ultra', 'Ultra_CD') - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_multiplier = self.Skill_num('Talent', 'Normal_add') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[0] += damagelist1[0] - damagelist2[1] += damagelist1[1] - damagelist2[2] += damagelist1[2] - skill_info_list.append({'name': '普攻', 'damagelist': damagelist2}) - - # 计算终结技 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - return skill_info_list - - -class Sushang(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - self.eidolon_attribute['SpeedAddedRatio'] = self.Skill_num( - 'Talent', 'Talent' - ) - if self.avatar_rank >= 6: - self.eidolon_attribute['SpeedAddedRatio'] = ( - self.Skill_num('Talent', 'Talent') * 2 - ) - - def extra_ability(self): - self.extra_ability_attribute['jianshiDmgAdd'] = 0.2 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算剑势附加伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill_F') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'jianshi', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[0] += damagelist2[0] - damagelist3[1] += damagelist2[1] - damagelist3[2] += damage3 + damagelist2[2] - skill_info_list.append({'name': '战技', 'damagelist': damagelist3}) - - # 计算强化战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[0] += damagelist2[0] * 3 - damagelist4[1] += damagelist2[1] * 3 - damagelist4[2] += damage3 + damagelist2[2] * 3 - skill_info_list.append({'name': '强化战技', 'damagelist': damagelist4}) - - skill_info_list.append( - {'name': '剑势附加伤害', 'damagelist': damagelist2} - ) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist5[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist5}) - - return skill_info_list - -class Luka(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.15 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算终结技提供的易伤加成 - attribute_bonus['DmgRatio'] = attribute_bonus.get('DmgRatio', 0) + self.Skill_num('Ultra', 'Ultra_d') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算强化普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal1') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[0] += damagelist2[0] * 5 - damagelist2[1] += damagelist2[1] * 5 - damagelist2[2] += damage3 + damagelist2[2] * 5 - skill_multiplier = self.Skill_num('Normal', 'Normal2') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[0] += damagelist2[0] - damagelist3[1] += damagelist2[1] - damagelist3[2] += damagelist2[2] - skill_info_list.append({'name': '强化普攻(满段数)', 'damagelist': damagelist3}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist4}) - - # 计算DOT伤害 - skill_multiplier = self.Skill_num('BPSkill', 'DOT') - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'DOT', - 'DOT', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - skill_info_list.append({'name': '持续伤害(最大值)', 'damagelist': damagelist5}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist6 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist6[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist6}) - - return skill_info_list - -class DanHeng(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['CriticalChanceBase'] = 0.12 - - def extra_ability(self): - self.extra_ability_attribute['SpeedAddedRatio'] = 0.2 - self.extra_ability_attribute['NormalDmgAdd'] = 0.4 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算穿透加成 - attribute_bonus['WindResistancePenetration'] = attribute_bonus.get('WindResistancePenetration', 0) + self.Skill_num('Talent', 'Talent') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') + self.Skill_num('Ultra', 'Ultra_d') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - return skill_info_list - -class Arlan(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['BPSkillDmgAdd'] = 0.12 - if self.avatar_rank >= 6: - self.eidolon_attribute['UltraDmgAdd'] = 0.12 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算天赋伤害加成 - attribute_bonus['AllDamageAddedRatio'] = attribute_bonus.get('AllDamageAddedRatio', 0) + self.Skill_num('Talent', 'Talent') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - return skill_info_list - -class Asta(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - self.eidolon_attribute['FireAddedRatio'] = 0.18 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算天赋加成 - attribute_bonus['AttackAddedRatio'] = attribute_bonus.get('AttackAddedRatio', 0) + self.Skill_num('Talent', 'Talent') * 5 - attribute_bonus['SpeedDelta'] = attribute_bonus.get('SpeedDelta', 0) + self.Skill_num('Ultra', 'Ultra') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - skill_num = 5 - if self.avatar_rank >= 1: - skill_num += 1 - damagelist2[0] = damagelist2[0] * skill_num - damagelist2[1] = damagelist2[1] * skill_num - damagelist2[2] = damage3 + damagelist2[2] * skill_num - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - return skill_info_list - -class Herta(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['CriticalChanceBase'] = 0.15 - if self.avatar_rank >= 4: - self.eidolon_attribute['TalentDmgAdd'] = 0.12 - if self.avatar_rank >= 6: - self.eidolon_attribute['AttackAddedRatio'] = 0.25 - - def extra_ability(self): - self.extra_ability_attribute['BPSkillDmgAdd'] = 0.25 - self.extra_ability_attribute['UltraDmgAdd'] = 0.2 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - if self.avatar_rank >= 1: - skill_multiplier += 0.4 - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - attribute_bonus['BPSkillDmgAdd'] = attribute_bonus.get('BPSkillDmgAdd', 0) + 0.2 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算追加攻击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '追加攻击', 'damagelist': damagelist4}) - - return skill_info_list - -class Serval(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 6: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.3 - - def extra_ability(self): - self.extra_ability_attribute['AttackAddedRatio'] = 0.2 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算DOT伤害 - skill_multiplier = self.Skill_num('BPSkill', 'DOT') - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'DOT', - 'DOT', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - skill_info_list.append({'name': '持续伤害', 'damagelist': damagelist5}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算追加攻击伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Talent', - 'Talent', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '追加攻击', 'damagelist': damagelist4}) - - return skill_info_list - -class Pela(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['SpeedAddedRatio'] = 0.1 - if self.avatar_rank >= 4: - self.eidolon_attribute['IceResistancePenetration'] = 0.12 - - def extra_ability(self): - self.extra_ability_attribute['AllDamageAddedRatio'] = 0.4 - self.extra_ability_attribute['StatusProbabilityBase'] = 0.1 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算终结技降防 - attribute_bonus['ignore_defence'] = attribute_bonus.get('ignore_defence', 0) + self.Skill_num('Ultra', 'Ultra_d') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - if self.avatar_rank >= 6: - # 计算命座附加伤害 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - self.avatar_element, - 0.4, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '6命追加伤害', 'damagelist': damagelist4}) - - return skill_info_list - -class Sampo(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - pass - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算终结技持续伤害加成 - attribute_bonus['DOTDmgAdd'] = attribute_bonus.get('DOTDmgAdd', 0) + self.Skill_num('Ultra', 'Ultra_d') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[0] = damagelist2[0] * 5 - damagelist2[1] = damagelist2[1] * 5 - damagelist2[2] = damage3 + damagelist2[2] * 5 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算持续伤害 - skill_multiplier = self.Skill_num('Talent', 'DOT') - if self.avatar_rank >= 6: - skill_multiplier += 0.15 - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'DOT', - 'DOT', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - skill_info_list.append({'name': '单层持续伤害', 'damagelist': damagelist4}) - - return skill_info_list - -class Hook(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['BPSkill1DmgAdd'] = 0.2 - if self.avatar_rank >= 6: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.2 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算强化战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill1') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill1', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '强化战技', 'damagelist': damagelist3}) - - # 计算持续伤害 - skill_multiplier = self.Skill_num('BPSkill', 'DOT') - damagelist5 = await calculate_damage( - base_attr, - attribute_bonus, - 'DOT', - 'DOT', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - skill_info_list.append({'name': '灼烧伤害', 'damagelist': damagelist5}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '终结技', 'damagelist': damagelist4}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Talent', 'Talent') - damagelist6 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist6[2] += damage3 - skill_info_list.append({'name': '附加伤害', 'damagelist': damagelist6}) - - return skill_info_list - -class Tingyun(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['SpeedAddedRatio'] = 0.2 - - def extra_ability(self): - self.eidolon_attribute['SpeedAddedRatio'] = 0.2 - self.eidolon_attribute['NormalDmgAdd'] = 0.4 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill_M') - attack = ( - base_attr['attack'] * (1 + attribute_bonus['AttackAddedRatio']) - + attribute_bonus['AttackDelta'] - ) - add_atk = attack * skill_multiplier - damagelist2 = [] - damagelist2.append(add_atk) - skill_info_list.append({'name': '战技提升攻击力', 'damagelist': damagelist2}) - - return skill_info_list - -class Trailblazer(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 4: - self.eidolon_attribute['CriticalChanceBase'] = 0.25 - - def extra_ability(self): - self.extra_ability_attribute['BPSkillDmgAdd'] = 0.25 - self.extra_ability_attribute['Ultra1DmgAdd'] = 0.25 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算天赋攻击加成 - attribute_bonus['AttackAddedRatio'] = attribute_bonus.get('AttackAddedRatio', 0) + self.Skill_num('Talent', 'Talent') * 2 - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技1伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - skill_info_list.append({'name': '全胜•再见安打', 'damagelist': damagelist3}) - - # 计算终结技2伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra1') - damagelist4 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra1', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist4[2] += damage3 - skill_info_list.append({'name': '全胜•安息全垒打', 'damagelist': damagelist4}) - - return skill_info_list - -class Trailblazer_K(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 6: - self.eidolon_attribute['DefenceAddedRatio'] = 0.3 - - def extra_ability(self): - self.extra_ability_attribute['AttackAddedRatio'] = 0.15 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - if self.avatar_rank >= 1: - damagelist1_f = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - 0.25, - self.avatar_level, - 2 - ) - damagelist1[0] += damagelist1_f[0] - damagelist1[1] += damagelist1_f[1] - damagelist1[2] += damagelist1_f[2] - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算强化普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal1') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - if self.avatar_rank >= 1: - damagelist2_f = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - 0.5, - self.avatar_level, - 2 - ) - damagelist2[0] += damagelist2_f[0] - damagelist2[1] += damagelist2_f[1] - damagelist2[2] += damagelist2_f[2] - skill_info_list.append({'name': '强化普攻', 'damagelist': damagelist2}) - - # 计算终结技伤害 - skill_multiplier = self.Skill_num('Ultra', 'Ultra') - damagelist3 = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist3[2] += damage3 - - skill_multiplier = self.Skill_num('Ultra', 'Ultra1') - damagelist3_f = await calculate_damage( - base_attr, - attribute_bonus, - 'Ultra', - 'Ultra', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 2 - ) - damagelist3[0] += damagelist3_f[0] - damagelist3[1] += damagelist3_f[1] - damagelist3[2] += damagelist3_f[2] - skill_info_list.append({'name': '终结技', 'damagelist': damagelist3}) - - # 计算天赋提供护盾 - skill_multiplier = self.Skill_num('Talent', 'Talent') - skill_multiplier_g = self.Skill_num('Talent', 'Talent_G') - if self.avatar_rank >= 2: - skill_multiplier += 0.02 - skill_multiplier_g += 27 - damagelist4 = await calculate_shield( - base_attr, - attribute_bonus, - skill_multiplier, - skill_multiplier_g, - ) - skill_info_list.append({'name': '天赋护盾', 'damagelist': damagelist4}) - - return skill_info_list - -class Huohuo(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 1: - self.eidolon_attribute['SpeedAddedRatio'] = 0.12 - if self.avatar_rank >= 6: - self.eidolon_attribute['AllDamageAddedRatio'] = 0.5 - - def extra_ability(self): - pass - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - 1, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技治疗 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - damagelist2 = await calculate_heal( - base_attr, - attribute_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - ) - skill_info_list.append({'name': '战技治疗量', 'damagelist': damagelist2}) - - if self.avatar_rank >= 4: - # 计算战技治疗 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - skill_num = self.Skill_num('BPSkill', 'BPSkill_G') - add_attr_bonus = copy.deepcopy(attribute_bonus) - add_attr_bonus['HealRatioBase'] = add_attr_bonus.get('HealRatioBase', 0) + 0.8 - damagelist2_max = await calculate_heal( - base_attr, - add_attr_bonus, - 'BPSkill', - skill_multiplier, - skill_num, - ) - skill_info_list.append({'name': '战技最高治疗量(4魂)', 'damagelist': damagelist2_max}) - - # 计算天赋治疗量 - skill_multiplier = self.Skill_num('Talent', 'Talent') - skill_num = self.Skill_num('Talent', 'Talent_G') - damagelist5 = await calculate_heal( - base_attr, - attribute_bonus, - 'Talent', - skill_multiplier, - skill_num, - ) - skill_info_list.append({'name': '天赋治疗量', 'damagelist': damagelist5}) - - if self.avatar_rank >= 4: - skill_multiplier = self.Skill_num('Talent', 'Talent') - skill_num = self.Skill_num('Talent', 'Talent_G') - add_attr_bonus = copy.deepcopy(attribute_bonus) - add_attr_bonus['HealRatioBase'] = add_attr_bonus.get('HealRatioBase', 0) + 0.8 - damagelist5 = await calculate_heal( - base_attr, - add_attr_bonus, - 'Talent', - skill_multiplier, - skill_num, - ) - skill_info_list.append({'name': '天赋最高治疗量(4魂)', 'damagelist': damagelist5}) - - return skill_info_list - -class Hanya(BaseAvatar): - Buff: BaseAvatarBuff - - def __init__( - self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - super().__init__(char=char, skills=skills) - self.eidolon_attribute: Dict[str, float] = {} - self.extra_ability_attribute: Dict[str, float] = {} - self.eidolons() - self.extra_ability() - - def Technique(self): - pass - - def eidolons(self): - if self.avatar_rank >= 2: - self.eidolon_attribute['SpeedAddedRatio'] = 0.2 - - def extra_ability(self): - self.extra_ability_attribute['AttackAddedRatio'] = 0.1 - - async def getdamage( - self, - base_attr: Dict[str, float], - attribute_bonus: Dict[str, float], - ): - # 计算天赋易伤加成 - attribute_bonus['DmgRatio'] = attribute_bonus.get('DmgRatio', 0) + self.Skill_num('Talent', 'Talent') - if self.avatar_rank >= 6: - attribute_bonus['DmgRatio'] = attribute_bonus.get('DmgRatio', 0) + 0.1 - - attribute_bonus['AttackAddedRatio'] = attribute_bonus.get('AttackAddedRatio', 0) + self.Skill_num('Ultra', 'Ultra_A') - - damage1, damage2, damage3 = await calculate_damage( - base_attr, - attribute_bonus, - 'fujia', - 'fujia', - 'Thunder', - 0.44, - self.avatar_level, - ) - - skill_info_list = [] - # 计算普攻伤害 - skill_multiplier = self.Skill_num('Normal', 'Normal') - damagelist1 = await calculate_damage( - base_attr, - attribute_bonus, - 'Normal', - 'Normal', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist1[2] += damage3 - skill_info_list.append({'name': '普攻', 'damagelist': damagelist1}) - - # 计算战技伤害 - skill_multiplier = self.Skill_num('BPSkill', 'BPSkill') - damagelist2 = await calculate_damage( - base_attr, - attribute_bonus, - 'BPSkill', - 'BPSkill', - self.avatar_element, - skill_multiplier, - self.avatar_level, - ) - damagelist2[2] += damage3 - skill_info_list.append({'name': '战技', 'damagelist': damagelist2}) - - # 计算终结技提升速度 - speed = ( - base_attr['speed'] * (1 + attribute_bonus['SpeedAddedRatio']) - + attribute_bonus['SpeedDelta'] - ) - skill_multiplier = self.Skill_num('Ultra', 'Ultra_S') - add_speed = speed * skill_multiplier - damagelist3 = [] - damagelist3.append(add_speed) - skill_info_list.append({'name': '终结技增加速度', 'damagelist': damagelist3}) - - return skill_info_list - -class AvatarDamage: - @classmethod - def create( - cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] - ): - if char.id_ == 1215: - return Hanya(char, skills) - if char.id_ == 1217: - return Huohuo(char, skills) - if char.id_ == 8003 or char.id_ == 8004: - return Trailblazer_K(char, skills) - if char.id_ == 8002 or char.id_ == 8001: - return Trailblazer(char, skills) - if char.id_ == 1202: - return Tingyun(char, skills) - if char.id_ == 1109: - return Hook(char, skills) - if char.id_ == 1108: - return Sampo(char, skills) - if char.id_ == 1106: - return Pela(char, skills) - if char.id_ == 1103: - return Serval(char, skills) - if char.id_ == 1013: - return Herta(char, skills) - if char.id_ == 1009: - return Asta(char, skills) - if char.id_ == 1008: - return Arlan(char, skills) - if char.id_ == 1002: - return DanHeng(char, skills) - if char.id_ == 1111: - return Luka(char, skills) - if char.id_ == 1206: - return Sushang(char, skills) - if char.id_ == 1101: - return Bronya(char, skills) - if char.id_ == 1207: - return Yukong(char, skills) - if char.id_ == 1001: - return Mar7th(char, skills) - if char.id_ == 1105: - return Natasha(char, skills) - if char.id_ == 1110: - return Lynx(char, skills) - if char.id_ == 1211: - return Bailu(char, skills) - if char.id_ == 1203: - return Luocha(char, skills) - if char.id_ == 1210: - return Guinaifen(char, skills) - if char.id_ == 1302: - return Argenti(char, skills) - if char.id_ == 1112: - return Topaz(char, skills) - if char.id_ == 1104: - return Gepard(char, skills) - if char.id_ == 1005: - return Kafka(char, skills) - if char.id_ == 1201: - return Qingque(char, skills) - if char.id_ == 1212: - return Jingliu(char, skills) - if char.id_ == 1107: - return Clara(char, skills) - if char.id_ == 1205: - return Blade(char, skills) - if char.id_ == 1003: - return Himeko(char, skills) - if char.id_ == 1209: - return Yanqing(char, skills) - if char.id_ == 1102: - return Seele(char, skills) - if char.id_ == 1208: - return Fuxuan(char, skills) - if char.id_ == 1006: - return Silverwolf(char, skills) - if char.id_ == 1204: - return JingYuan(char, skills) - if char.id_ == 1004: - return Welt(char, skills) - if char.id_ == 1213: - return Danhengil(char, skills) - raise Exception('不支持的角色')