diff --git a/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py b/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py index a197b7e..87fc617 100644 --- a/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py +++ b/StarRailUID/starrailuid_charinfo/damage/AvatarDamage/AvatarDamage.py @@ -2,7 +2,7 @@ import copy from typing import Dict, List from gsuid_core.logger import logger - +import math from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar from ..Role import calculate_heal, calculate_damage, calculate_shield @@ -2691,12 +2691,287 @@ class Mar7th(BaseAvatar): 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, + ) + damagelist1[2] += damage3 + skill_info_list.append({'name': '终结技', 'damagelist': damagelist5}) + + return skill_info_list class AvatarDamage: @classmethod def create( cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] ): + 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: diff --git a/StarRailUID/starrailuid_charinfo/damage/Excel/SkillData.json b/StarRailUID/starrailuid_charinfo/damage/Excel/SkillData.json index f75ed08..0e5de06 100644 --- a/StarRailUID/starrailuid_charinfo/damage/Excel/SkillData.json +++ b/StarRailUID/starrailuid_charinfo/damage/Excel/SkillData.json @@ -829,5 +829,130 @@ ], "Maze": [20], "Ultra_Use": [100] + }, + "1101": { + "Normal": [ + 0.5000000004656613, 0.6000000005587935, 0.7000000006519258, + 0.8000000007450581, 0.9000000008381903, 1.0000000000931323, + 1.1000000000931323, 1.2000000001862645, 1.3000000002793968 + ], + "BPSkill": [ + 0.33000000030733645, 0.3630000001285225, 0.3959999999497086, + 0.42899999977089465, 0.46200000029057264, 0.4950000001117587, + 0.5362500005867332, 0.5775000003632158, 0.6187500008381903, + 0.6600000006146729, 0.693000000435859, 0.726000000257045, + 0.7590000000782311, 0.7920000005979091, 0.8250000004190952 + ], + "Ultra": [ + 0.12000000011175871, 0.12399999983608723, 0.12799999956041574, + 0.1319999999832362, 0.1359999997075647, 0.14000000013038516, + 0.1449999997857958, 0.1500000001396984, 0.15499999979510903, + 0.1600000001490116, 0.16399999987334013, 0.16799999959766865, + 0.1720000000204891, 0.17599999974481761, 0.18000000016763806 + ], + "Ultra_A": [ + 0.33000000030733645, 0.35200000018812716, 0.37400000006891787, + 0.3959999999497086, 0.4179999998304993, 0.44000000040978193, + 0.4675000002607703, 0.4950000001117587, 0.522500000661239, + 0.5500000005122274, 0.5720000003930181, 0.5940000002738088, + 0.6160000001545995, 0.6380000000353903, 0.6600000006146729 + ], + "Ultra_G": [ + 0.12000000011175871, 0.12799999956041574, 0.1359999997075647, + 0.14399999985471368, 0.15200000000186265, 0.1600000001490116, + 0.17000000015832484, 0.18000000016763806, 0.1900000001769513, + 0.20000000018626451, 0.20799999963492155, 0.21599999978207052, + 0.22399999992921948, 0.23200000007636845, 0.24000000022351742 + ], + "Maze": [20], + "Ultra_Use": [100] + }, + "1207": { + "Normal": [ + 0.5000000004656613, 0.6000000005587935, 0.7000000006519258, + 0.8000000007450581, 0.9000000008381903, 1.0000000000931323, + 1.1000000000931323, 1.2000000001862645, 1.3000000002793968 + ], + "BPSkill": [ + 0.40000000037252903, 0.44000000040978193, 0.48000000044703484, + 0.5200000004842877, 0.5600000005215406, 0.6000000005587935, + 0.6500000006053597, 0.7000000006519258, 0.7500000006984919, + 0.8000000007450581, 0.840000000782311, 0.8800000008195639, + 0.9200000008568168, 0.9600000008940697, 1 + ], + "Ultra_CC": [ + 0.21000000019557774, 0.21699999971315265, 0.22399999992921948, + 0.23100000014528632, 0.23799999966286123, 0.24499999987892807, + 0.25375000084750354, 0.26250000041909516, 0.2712500006891787, + 0.2800000002607703, 0.2869999997783452, 0.29399999999441206, + 0.3010000002104789, 0.3079999997280538, 0.31499999994412065 + ], + "Ultra_CD": [ + 0.3900000003632158, 0.41599999996833503, 0.4420000002719462, + 0.4679999998770654, 0.4940000001806766, 0.5200000004842877, + 0.5525000006891787, 0.5850000001955777, 0.6175000004004687, + 0.6500000006053597, 0.6760000002104789, 0.7020000005140901, + 0.7280000001192093, 0.7540000004228204, 0.7800000007264316 + ], + "Ultra": [ + 2.2800000002607703, 2.432000000262633, 2.5840000002644956, + 2.7360000002663583, 2.888000000268221, 3.040000000037253, + 3.230000000214204, 3.4200000003911555, 3.6100000005681068, + 3.800000000745058, 3.9520000007469207, 4.103999999817461, + 4.255999999819323, 4.407999999821186, 4.560000000521541 + ], + "Normal_add": [ + 0.40000000037252903, 0.44000000040978193, 0.48000000044703484, + 0.5200000004842877, 0.5600000005215406, 0.6000000005587935, + 0.6500000006053597, 0.7000000006519258, 0.7500000006984919, + 0.8000000007450581, 0.840000000782311, 0.8800000008195639, + 0.9200000008568168, 0.9600000008940697, 1 + ], + "Maze": [20], + "Ultra_Use": [130] + }, + "1206": { + "Normal": [ + 0.5000000004656613, 0.6000000005587935, 0.7000000006519258, + 0.8000000007450581, 0.9000000008381903, 1.0000000000931323, + 1.1000000000931323, 1.2000000001862645, 1.3000000002793968 + ], + "BPSkill": [ + 1.0500000000465661, 1.154999999795109, 1.2600000002421439, + 1.3649999999906868, 1.4700000004377216, 1.5750000001862645, + 1.706250000745058, 1.8375000006053597, 1.9687500011641532, + 2.1000000000931323, 2.204999999841675, 2.31000000028871, + 2.415000000037253, 2.5200000004842877, 2.6250000002328306 + ], + "BPSkill_F": [ + 0.5000000004656613, 0.5500000005122274, 0.6000000005587935, + 0.6500000006053597, 0.7000000006519258, 0.7500000006984919, + 0.8125000009313226, 0.8750000004656613, 0.9375000006984919, + 1, 1.0500000000465661, 1.1000000000931323, + 1.1500000001396984, 1.2000000001862645, 1.2500000002328306 + ], + "Ultra_A": [ + 0.18000000016763806, 0.19200000003911555, 0.20399999991059303, + 0.21599999978207052, 0.227999999653548, 0.24000000022351742, + 0.2549999998882413, 0.2700000002514571, 0.28499999991618097, + 0.3000000002793968, 0.31200000015087426, 0.32400000002235174, + 0.3359999998938292, 0.3479999997653067, 0.3600000003352761 + ], + "Ultra": [ + 1.9200000008568168, 2.04799999948591, 2.1759999997448176, + 2.3040000000037253, 2.432000000262633, 2.5600000005215406, + 2.7200000006705523, 2.880000000819564, 3.040000000037253, + 3.2000000001862645, 3.3279999997466803, 3.456000000005588, + 3.5840000002644956, 3.7120000005234033, 3.840000000782311 + ], + "Talent": [ + 0.1500000001396984, 0.15499999979510903, 0.1600000001490116, + 0.16499999980442226, 0.17000000015832484, 0.17499999981373549, + 0.18125000060535967, 0.1875, 0.1937500007916242, + 0.20000000018626451, 0.20499999984167516, 0.21000000019557774, + 0.2149999998509884, 0.22000000020489097, 0.2249999998603016 + ], + "Maze": [20], + "Ultra_Use": [120] } }