diff --git a/StarRailUID/starrailuid_charinfo/cal_damage.py b/StarRailUID/starrailuid_charinfo/cal_damage.py index 46335ad..4099c56 100644 --- a/StarRailUID/starrailuid_charinfo/cal_damage.py +++ b/StarRailUID/starrailuid_charinfo/cal_damage.py @@ -31,6 +31,7 @@ async def cal(char_data: Dict): 1003, 1201, 1212, + 1112, ]: if char.char_id == 1213: for skill_type in [ @@ -48,6 +49,11 @@ async def cal(char_data: Dict): role = RoleInstance(char) im_tmp = await role.cal_damage(skill_type) skill_info_list.append(im_tmp) + elif char.char_id == 1112: + for skill_type in ['Normal', 'BPSkill', 'Talent1']: + role = RoleInstance(char) + im_tmp = await role.cal_damage(skill_type) + skill_info_list.append(im_tmp) elif char.char_id == 1212: for skill_type in ['Normal', 'BPSkill', 'BPSkill1', 'Ultra']: role = RoleInstance(char) diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 6bb50b1..6d523f0 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -106,6 +106,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): 1003, 1201, 1212, + 1112, ]: skill_list = skill_dict[str(char.char_id)]['skillList'] damage_len = len(skill_list) diff --git a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py index e26e19b..e414bbd 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py +++ b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py @@ -424,12 +424,43 @@ class Jingliu(BaseAvatar): 'UltraAttackAddedRatio' ] = attack_added_ratio +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.Ultra_num('Ultra_CD') + logger.info('【负债证明】状态,使其受到的追加攻击伤害提高') + self.extra_ability_attribute['TalentDmgAdd'] = self.BPSkill_num('BPSkill_add') class Avatar: @classmethod def create( cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] ): + if char.id_ == 1112: + return Topaz(char, skills) if char.id_ == 1212: return Jingliu(char, skills) if char.id_ == 1201: diff --git a/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json b/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json index 5b563b4..f6b90b3 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json +++ b/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json @@ -607,5 +607,47 @@ "BPSkill1": ["attack", "寒川映月", 1, "BPSkill1"], "Ultra": ["attack", "终结技", 1, "Ultra"] } + }, + "1112": { + "Normal": [ + 0.5000000004656613, 0.6000000005587935, 0.7000000006519258, + 0.8000000007450581, 0.9000000008381903, 1.0000000000931323, + 1.1000000001862645, 1.2000000002793968, 1.3000000002793968 + ], + "BPSkill": [ + 0.7500000005122274, 0.8250000006705523, 0.900000000828877, + 0.975000000558794, 1.050000000214204, 1.125000000372529, + 1.218750000745058, 1.312500000419095, 1.406250000860302, + 1.500000000232831, 1.575000000391155, 1.65000000054948, + 1.725000000707805, 1.80000000086613, 1.87500000093132 + ], + "BPSkill_add": [ + 0.2500000005122274, 0.2750000006705523, 0.300000000828877, + 0.325000000558794, 0.350000000214204, 0.375000000372529, + 0.406250000745058, 0.437500000419095, 0.468750000860302, + 0.500000000232831, 0.5250000003911555, 0.55000000054948, + 0.575000000707805, 0.60000000086613, 0.62500000093132 + ], + "Talent1": [ + 0.7500000005122274, 0.8250000006705523, 0.900000000828877, + 0.975000000558794, 1.050000000214204, 1.125000000372529, + 1.218750000745058, 1.312500000419095, 1.406250000860302, + 1.500000000232831, 1.575000000391155, 1.65000000054948, + 1.725000000707805, 1.80000000086613, 1.87500000093132 + ], + "Ultra_CD": [ + 0.1250000005122274, 0.13750000006705523, 0.150000000828877, + 0.162500000558794, 0.175000000214204, 0.187500000372529, + 0.203125000745058, 0.218750000419095, 0.234375000860302, + 0.250000000232831, 0.262500000391155, 0.27500000054948, + 0.287500000707805, 0.30000000086613, 0.31250000093132 + ], + "Maze": [20], + "Ultra_Use": [140], + "skillList": { + "Normal": ["attack", "普攻", 1, "Talent"], + "BPSkill": ["attack", "账账", 1, "Talent"], + "Talent1": ["attack", "强化账账", 1, "Talent1"] + } } } diff --git a/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json b/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json index 1eae5d7..a3a53c6 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json +++ b/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json @@ -653,6 +653,24 @@ 0.60000000022351742 ] } + }, + "23016": { + "Param": { + "CriticalDamageBase": [ + 0.12000000011175871, + 0.14000000013038516, + 0.1600000001490116, + 0.18000000016763806, + 0.20000000018626451 + ], + "TalentDmgAdd": [ + 0.30000000011175871, + 0.3500000001396984, + 0.40000000016763806, + 0.45000000019557774, + 0.50000000022351742 + ] + } }, "21031": { "enable": false diff --git a/StarRailUID/starrailuid_charinfo/effect/Role.py b/StarRailUID/starrailuid_charinfo/effect/Role.py index dfd9c1e..6e0683b 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Role.py +++ b/StarRailUID/starrailuid_charinfo/effect/Role.py @@ -165,6 +165,9 @@ class RoleInstance: elif self.raw_data.avatar.id_ == 1212: skill_multiplier = self.avatar.BPSkill_num(skill_type) skill_type = 'BPSkill' + elif self.raw_data.avatar.id_ == 1112: + skill_multiplier = self.avatar.Ultra_num(skill_type) + self.avatar.BPSkill() + skill_type = 'Talent' else: raise Exception('skill type error') @@ -314,6 +317,14 @@ class RoleInstance: resistance_area = resistance_area - ( 0 - Normal_Penetration ) + if self.raw_data.avatar.id_ == 1112: + if skill_info[3] == 'Talent1': + Talent1_Penetration = merged_attr.get( + 'Talent1_FireResistancePenetration', 0 + ) + resistance_area = resistance_area - ( + 0 - Talent1_Penetration + ) logger.info(f'抗性区: {resistance_area}') # 防御区 diff --git a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py index 5d70dd4..7a93555 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py +++ b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py @@ -1686,6 +1686,39 @@ class SleepLiketheDead(BaseWeapon): ) return attribute_bonus +# 烦恼着,幸福着 +class WorrisomeBlissf(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 装备者施放追加攻击后,使目标陷入【温驯】状态,该效果最多叠加2层。我方目标击中【温驯】状态下的敌方目标时,每层【温驯】使造成的暴击伤害提高12% + return True + + async def weapon_ability( + self, + Ultra_Use: float, + base_attr: Dict[str, float], + attribute_bonus: Dict[str, float], + ): + critical_chance_base = attribute_bonus.get('TalentDmgAdd', 0) + attribute_bonus['TalentDmgAdd'] = ( + critical_chance_base + + weapon_effect['23016']['Param']['TalentDmgAdd'][ + self.weapon_rank - 1 + ] + ) + if await self.check(): + critical_chance_base = attribute_bonus.get('CriticalDamageBase', 0) + attribute_bonus['CriticalDamageBase'] = ( + critical_chance_base + + weapon_effect['23016']['Param']['CriticalDamageBase'][ + self.weapon_rank - 1 + ] + ) * 2 + return attribute_bonus class Weapon: @classmethod @@ -1749,7 +1782,10 @@ class Weapon: 20013, 20006, 23014, + 23016, ]: + if weapon.id_ == 23016: + return WorrisomeBlissf(weapon) if weapon.id_ == 23012: return SleepLiketheDead(weapon) if weapon.id_ == 23014: