From 331f828a469ee9c713e75d190ea1f235991ef5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E8=90=BD?= <34079036+jiluoQAQ@users.noreply.github.com> Date: Sat, 9 Sep 2023 11:11:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=80=81=E6=9D=A8=E5=A7=AC?= =?UTF-8?q?=E5=AD=90=E9=9D=92=E9=9B=80=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=20(#73)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 完成老杨姬子青雀伤害计算 * 🚨 `pre-commit-ci`修复格式错误 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../starrailuid_charinfo/draw_char_img.py | 10 +- .../effect/Avatar/Avatar.py | 94 ++++++- .../effect/Excel/seele.json | 234 ++++++++++++++++++ .../starrailuid_charinfo/effect/Role.py | 33 ++- 4 files changed, 367 insertions(+), 4 deletions(-) diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index d4e202d..5e16c20 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -100,6 +100,9 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): 1208, 1104, 1209, + 1004, + 1003, + 1201, ]: skill_list = skill_dict[str(char.char_id)]['skilllist'] damage_len = len(skill_list) @@ -749,6 +752,9 @@ async def cal(char_data: Dict): 1208, 1104, 1209, + 1004, + 1003, + 1201, ]: if char.char_id == 1213: for skill_type in [ @@ -771,7 +777,7 @@ 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 == 1205: + elif char.char_id in [1205, 1201]: for skill_type in ['Normal', 'Normal1', 'Ultra']: role = RoleInstance(char) im_tmp = await role.cal_damage(skill_type) @@ -781,7 +787,7 @@ async def cal(char_data: Dict): role = RoleInstance(char) im_tmp = await role.cal_damage(skill_type) skill_info_list.append(im_tmp) - if char.char_id in [1204, 1107, 1005, 1205, 1209]: + if char.char_id in [1204, 1107, 1005, 1205, 1209, 1003]: role = RoleInstance(char) im_tmp = await role.cal_damage('Talent') skill_info_list.append(im_tmp) diff --git a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py index 57800e9..bd1947f 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py +++ b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py @@ -207,7 +207,7 @@ class Blade(BaseAvatar): self.eidolon_attribute['CriticalChanceBase'] = mp.mpf(0.15) if self.avatar_rank >= 4: - self.extra_ability_attribute['HPAddedRatio'] = mp.mpf(0.4) + self.eidolon_attribute['HPAddedRatio'] = mp.mpf(0.4) def extra_ability(self): logger.info('额外能力') @@ -295,11 +295,103 @@ class Yanqing(BaseAvatar): ] = critical_chance_base + mp.mpf(0.6) +class Welt(BaseAvatar): + Buff: BaseAvatarBuff + + def __init__( + self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): + super().__init__(char=char, skills=skills) + self.eidolon_attribute = {} + self.extra_ability_attribute = {} + self.eidolons() + self.extra_ability() + + def Technique(self): + pass + + def eidolons(self): + pass + + def extra_ability(self): + logger.info('额外能力') + logger.info('施放终结技时,有100%基础概率使目标受到的伤害提高12%,持续2回合。') + logger.info('对被弱点击破的敌方目标造成的伤害提高20') + self.extra_ability_attribute['AllDamageAddedRatio'] = mp.mpf(0.32) + + +class Himeko(BaseAvatar): + Buff: BaseAvatarBuff + + def __init__( + self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): + super().__init__(char=char, skills=skills) + self.eidolon_attribute = {} + self.extra_ability_attribute = {} + self.eidolons() + self.extra_ability() + + def Technique(self): + pass + + def eidolons(self): + if self.avatar_rank >= 1: + self.eidolon_attribute['SpeedAddedRatio'] = mp.mpf(0.1) + if self.avatar_rank >= 2: + self.eidolon_attribute['AllDamageAddedRatio'] = mp.mpf(0.15) + + def extra_ability(self): + logger.info('额外能力') + logger.info('战技对灼烧状态下的敌方目标造成的伤害提高20%。') + self.extra_ability_attribute['BPSkillDmgAdd'] = mp.mpf(0.2) + logger.info('若当前生命值百分比大于等于80%,则暴击率提高15%。') + self.extra_ability_attribute['CriticalChanceBase'] = mp.mpf(0.15) + + +class Qingque(BaseAvatar): + Buff: BaseAvatarBuff + + def __init__( + self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): + super().__init__(char=char, skills=skills) + self.eidolon_attribute = {} + self.extra_ability_attribute = {} + self.eidolons() + self.extra_ability() + + def Technique(self): + pass + + def eidolons(self): + if self.avatar_rank >= 1: + self.eidolon_attribute['UltraDmgAdd'] = mp.mpf(0.1) + + def extra_ability(self): + logger.info('额外能力') + logger.info('施放强化普攻后,青雀的速度提高10%,持续1回合。') + self.extra_ability_attribute['SpeedAddedRatio'] = mp.mpf(0.1) + logger.info('默认4层战技加伤害') + all_damage_added_ratio = self.BPSkill() + mp.mpf(0.1) + self.extra_ability_attribute['AllDamageAddedRatio'] = ( + all_damage_added_ratio * 4 + ) + logger.info('默认暗杠加攻') + self.extra_ability_attribute['AttackAddedRatio'] = self.Talent() + + class Avatar: @classmethod def create( cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] ): + if char.id_ == 1201: + return Qingque(char, skills) + if char.id_ == 1003: + return Himeko(char, skills) + if char.id_ == 1004: + return Welt(char, skills) if char.id_ == 1209: return Yanqing(char, skills) if char.id_ == 1104: diff --git a/StarRailUID/starrailuid_charinfo/effect/Excel/seele.json b/StarRailUID/starrailuid_charinfo/effect/Excel/seele.json index 3a0c576..da7286b 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Excel/seele.json +++ b/StarRailUID/starrailuid_charinfo/effect/Excel/seele.json @@ -989,5 +989,239 @@ "Ultra": ["attack","终结技", 1], "Talent": ["attack","附加伤害", 1] } + }, + "1004": { + "Normal": [ + 0.5000000004656613, + 0.6000000005587935, + 0.7000000006519258, + 0.8000000007450581, + 0.9000000008381903, + 1.0000000000931323, + 1.1000000001862645, + 1.2000000002793968 + ], + "BPSkill": [ + 1.0800000000931323, + 1.1880000001955777, + 1.2960000002980232, + 1.4040000004004687, + 1.5120000005029142, + 1.6200000006053597, + 1.7550000005587935, + 1.8900000005122274, + 2.0550000002328306, + 2.1600000001862645, + 2.26800000028871, + 2.3760000003911555, + 2.484000000493601, + 2.5920000005960464, + 2.700000000698492 + ], + "Ultra": [ + 0.9000000005122274, + 0.9600000006705523, + 1.020000000828877, + 1.0800000000558794, + 1.140000000214204, + 1.200000000372529, + 1.275000000745058, + 1.350000000419095, + 1.424999999860302, + 1.500000000232831, + 1.5600000003911555, + 1.62000000054948, + 1.680000000707805, + 1.74000000086613, + 1.800000000093132 + ], + "Talent": [ + 0.30000000037252903, + 0.33000000040978193, + 0.36000000044703484, + 0.3900000004842877, + 0.4200000005215406, + 0.4500000005587935, + 0.4875000006053597, + 0.525000006519258, + 0.5625000006984919, + 0.6000000007450581, + 0.63000000782311, + 0.6600000008195639, + 0.6900000008568168, + 0.7200000008940697, + 0.7500000008940697 + ], + "Maze": [ + 20 + ], + "Ultra_Use": [ + 120 + ], + "skilllist": { + "Normal": ["attack","普攻", 1], + "BPSkill": ["attack","战技", 3], + "Ultra": ["attack","终结技", 1] + } + }, + "1003": { + "Normal": [ + 0.5000000004656613, + 0.6000000005587935, + 0.7000000006519258, + 0.8000000007450581, + 0.9000000008381903, + 1.0000000000931323, + 1.1000000001862645, + 1.2000000002793968 + ], + "BPSkill": [ + 1.0000000000931323, + 1.1000000001955777, + 1.2000000002980232, + 1.3000000004004687, + 1.4000000005029142, + 1.5000000006053597, + 1.6250000005587935, + 1.7500000005122274, + 1.8750000002328306, + 2.0000000001862645, + 2.10000000028871, + 2.2000000003911555, + 2.300000000493601, + 2.4000000005960464, + 2.500000000698492 + ], + "Ultra": [ + 1.3800000005122274, + 1.4720000006705523, + 1.564000000828877, + 1.6560000000558794, + 1.748000000214204, + 1.840000000372529, + 1.955000000745058, + 2.070000000419095, + 2.185000000860302, + 2.300000000232831, + 2.3920000003911555, + 2.48400000054948, + 2.596000000707805, + 2.66800000086613, + 2.76000000093132 + ], + "Talent": [ + 0.70000000037252903, + 0.77000000040978193, + 0.84000000044703484, + 0.9100000004842877, + 0.9800000005215406, + 1.0500000005587935, + 1.1375000006053597, + 1.225000006519258, + 1.312500006984919, + 1.4000000007450581, + 1.47000000782311, + 1.5400000008195639, + 1.6100000008568168, + 1.6800000008940697, + 1.7500000008940697 + ], + "Maze": [ + 20 + ], + "Ultra_Use": [ + 120 + ], + "skilllist": { + "Normal": ["attack","普攻", 1], + "BPSkill": ["attack","战技", 3], + "Ultra": ["attack","终结技", 1], + "Talent": ["attack","追加攻击", 1] + } + }, + "1201": { + "Normal": [ + 0.5000000004656613, + 0.6000000005587935, + 0.7000000006519258, + 0.8000000007450581, + 0.9000000008381903, + 1.0000000000931323, + 1.1000000001862645, + 1.2000000002793968 + ], + "Normal1": [ + 1.2000000000931323, + 1.4400000001955777, + 1.6800000002980232, + 1.9200000004004687, + 2.1600000005029142, + 2.4000000006053597, + 2.6450000005587935, + 2.8800000005122274, + 3.1200000002328306 + ], + "BPSkill": [ + 0.14000000037252903, + 0.15400000040978193, + 0.16800000044703484, + 0.1820000004842877, + 0.1960000005215406, + 0.2100000005587935, + 0.2275000006053597, + 0.2450000006519258, + 0.2625000006984919, + 0.2800000007450581, + 0.294000000782311, + 0.3080000008195639, + 0.3220000008568168, + 0.3360000008940697, + 0.3500000008940697 + ], + "Ultra": [ + 1.2000000005122274, + 1.2800000006705523, + 1.360000000828877, + 1.440000000558794, + 1.520000000214204, + 1.600000000372529, + 1.700000000745058, + 1.800000000419095, + 1.900000000860302, + 2.000000000232831, + 2.0800000003911555, + 2.16000000054948, + 2.240000000707805, + 2.32000000086613, + 2.40000000093132 + ], + "Talent": [ + 0.36000000037252903, + 0.39600000040978193, + 0.43200000044703484, + 0.4680000004842877, + 0.5040000005215406, + 0.5400000005587935, + 0.5850000006053597, + 0.6300000006519258, + 0.6750000006984919, + 0.7200000007450581, + 0.756000000782311, + 0.7920000008195639, + 0.8280000008568168, + 0.8640000008940697, + 0.9000000008940697 + ], + "Maze": [ + 20 + ], + "Ultra_Use": [ + 140 + ], + "skilllist": { + "Normal": ["attack","普攻", 1], + "Normal1": ["attack","杠上开花!", 1], + "Ultra": ["attack","终结技", 1] + } } } diff --git a/StarRailUID/starrailuid_charinfo/effect/Role.py b/StarRailUID/starrailuid_charinfo/effect/Role.py index 6420887..5086beb 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Role.py +++ b/StarRailUID/starrailuid_charinfo/effect/Role.py @@ -133,8 +133,18 @@ class RoleInstance: skill_info = self.avatar.Skill_Info(skill_type) if skill_type == 'Normal': skill_multiplier = self.avatar.Normal() + if ( + self.raw_data.avatar.id_ == 1004 + and self.raw_data.avatar.rank >= 1 + ): + skill_multiplier = skill_multiplier + (skill_multiplier * 0.5) elif skill_type == 'BPSkill': skill_multiplier = self.avatar.BPSkill() + if ( + self.raw_data.avatar.id_ == 1004 + and self.raw_data.avatar.rank >= 1 + ): + skill_multiplier = skill_multiplier + (skill_multiplier * 0.8) elif skill_type == 'Ultra': if self.raw_data.avatar.id_ == 1107: skill_multiplier = self.avatar.Talent() + self.avatar.Ultra() @@ -153,7 +163,7 @@ class RoleInstance: else: skill_multiplier = skill_multiplier + 0.3 else: - if self.raw_data.avatar.id_ == 1213: + if self.raw_data.avatar.id_ in [1213, 1201]: skill_multiplier = self.avatar.Normalnum(skill_type) skill_type = 'Normal' elif self.raw_data.avatar.id_ == 1005: @@ -237,6 +247,19 @@ class RoleInstance: if skill_info[0] == 'attack': skill_multiplier = skill_multiplier / skill_info[2] logger.info(f'技能区单段: {skill_multiplier}') + if self.raw_data.avatar.id_ == 1004: + if self.raw_data.avatar.rank >= 6 and skill_type == 'BPSkill': + skill_info[2] = skill_info[2] + 1 + multiplier_add = self.avatar.Talent() + skill_multiplier = skill_multiplier + multiplier_add + + if ( + self.raw_data.avatar.id_ == 1201 + and self.raw_data.avatar.rank >= 4 + and skill_type == 'Normal' + ): + skill_info[2] = skill_info[2] + 1 + attack = merged_attr['attack'] if self.raw_data.avatar.id_ == 1104: # 杰帕德天赋加攻 @@ -479,6 +502,14 @@ class RoleInstance: damage_tz_z += damage_tz + if ( + self.raw_data.avatar.id_ == 1003 + and self.raw_data.avatar.rank >= 6 + ): + damage_cd_z = damage_cd_z * 1.8 + damage_qw_z = damage_qw_z * 1.8 + damage_tz_z = damage_tz_z * 1.8 + if self.avatar.avatar_element == 'Thunder': element_area = 0 damage_tz_fj = (