From 36a68e605719b1d4977fefee87c1d9f728591305 Mon Sep 17 00:00:00 2001 From: a376148946 <376148946@qq.com> Date: Mon, 2 Oct 2023 13:03:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=A1=82=E4=B9=83=E8=8A=AC?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97=E9=83=A8?= =?UTF-8?q?=E5=88=86=E9=87=8D=E6=9E=84v1.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../starrailuid_charinfo/cal_damage.py | 74 ++------ .../starrailuid_charinfo/draw_char_img.py | 29 +--- .../effect/Avatar/Avatar.py | 46 ++++- .../effect/Base/AvatarBase.py | 14 +- .../effect/Base/RelicBase.py | 8 +- .../effect/Excel/SkillData.json | 163 +++++++++++------- .../starrailuid_charinfo/effect/Role.py | 134 +++++--------- .../effect/Weapon/Weapon.py | 6 - .../starrailuid_charinfo/mono/Character.py | 27 +-- 9 files changed, 227 insertions(+), 274 deletions(-) diff --git a/StarRailUID/starrailuid_charinfo/cal_damage.py b/StarRailUID/starrailuid_charinfo/cal_damage.py index 4099c56..808f859 100644 --- a/StarRailUID/starrailuid_charinfo/cal_damage.py +++ b/StarRailUID/starrailuid_charinfo/cal_damage.py @@ -1,8 +1,12 @@ -from typing import Dict, List, Union +import json +from pathlib import Path +from typing import Dict, List, Union from .effect.Role import RoleInstance from .mono.Character import Character - +Excel_path = Path(__file__).parent / 'effect' +with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: + skill_dict = json.load(f) async def cal_char_info(char_data: Dict): char: Character = Character(char_data) @@ -16,67 +20,13 @@ async def cal(char_data: Dict): char = await cal_char_info(char_data) skill_info_list: List[List[Union[str, float]]] = [] - if char.char_id in [ - 1102, - 1204, - 1107, - 1213, - 1006, - 1005, - 1205, - 1208, - 1104, - 1209, - 1004, - 1003, - 1201, - 1212, - 1112, - ]: - if char.char_id == 1213: - for skill_type in [ - 'Normal', - 'Normal1', - 'Normal2', - 'Normal3', - 'Ultra', - ]: - role = RoleInstance(char) - im_tmp = await role.cal_damage(skill_type) - skill_info_list.append(im_tmp) - elif char.char_id == 1005: - for skill_type in ['Normal', 'BPSkill', 'Ultra', 'DOT']: - 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) - im_tmp = await role.cal_damage(skill_type) - skill_info_list.append(im_tmp) - elif char.char_id == 1208: - for skill_type in ['Normal', 'Ultra']: - role = RoleInstance(char) - im_tmp = await role.cal_damage(skill_type) - skill_info_list.append(im_tmp) - 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) - skill_info_list.append(im_tmp) - else: - for skill_type in ['Normal', 'BPSkill', 'Ultra']: - 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, 1003]: + if str(char.char_id) in skill_dict: + skill_list = skill_dict[str(char.char_id)]['skillList'] + skill_list = skill_list.keys() + print(skill_list) + for skill_type in skill_list: role = RoleInstance(char) - im_tmp = await role.cal_damage('Talent') + im_tmp = await role.cal_damage(skill_type) skill_info_list.append(im_tmp) return skill_info_list return '角色伤害计算未完成' diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 6fa3d3d..0e80dde 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -46,16 +46,7 @@ TEXT_PATH = Path(__file__).parent / 'texture2D' bg_img = Image.open(TEXT_PATH / 'bg.png') white_color = (213, 213, 213) -NUM_MAP = { - 0: '零', - 1: '一', - 2: '二', - 3: '三', - 4: '四', - 5: '五', - 6: '六', - 7: '七', -} +NUM_MAP = {0: '零', 1: '一', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六', 7: '七'} RANK_MAP = { 1: '_rank1.png', @@ -99,23 +90,7 @@ async def draw_char_img(char_data: Dict, sr_uid: str, msg: str): return char_data char = await cal_char_info(char_data) damage_len = 0 - if char.char_id in [ - 1102, - 1204, - 1107, - 1213, - 1006, - 1005, - 1205, - 1208, - 1104, - 1209, - 1004, - 1003, - 1201, - 1212, - 1112, - ]: + if str(char.char_id) in skill_dict: skill_list = skill_dict[str(char.char_id)]['skillList'] damage_len = len(skill_list) bg_height = 0 diff --git a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py index d2c020a..8dc3940 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py +++ b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py @@ -87,6 +87,7 @@ class Clara(BaseAvatar): def extra_ability(self): logger.info('额外能力') logger.info('史瓦罗的反击造成的伤害提高30%') + self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Talent', 'Talent') self.extra_ability_attribute['TalentDmgAdd'] = 0.3 self.extra_ability_attribute['UltraDmgAdd'] = 0.3 @@ -138,6 +139,8 @@ class Silverwolf(BaseAvatar): pass def eidolons(self): + if self.avatar_rank >= 4: + self.extra_ability_attribute['UltraSkillAdd'] = 1 if self.avatar_rank >= 6: self.extra_ability_attribute['AllDamageAddedRatio'] = 1 @@ -177,6 +180,8 @@ class Kafka(BaseAvatar): self.extra_ability_attribute['DOTDmgAdd'] = 0.3 if self.avatar_rank >= 2: self.extra_ability_attribute['DOTDmgAdd'] = 0.55 + if self.avatar_rank >= 6: + self.extra_ability_attribute['DOTSkillAdd'] = 1.56 def extra_ability(self): pass @@ -198,6 +203,8 @@ class Blade(BaseAvatar): pass def eidolons(self): + if self.avatar_rank >= 1: + self.eidolon_attribute['UltraHpSkillAdd'] = 0.9 if self.avatar_rank >= 2: self.eidolon_attribute['CriticalChanceBase'] = 0.15 @@ -228,6 +235,8 @@ class Fuxuan(BaseAvatar): def eidolons(self): if self.avatar_rank >= 1: self.eidolon_attribute['CriticalDamageBase'] = 0.3 + if self.avatar_rank >= 6: + self.eidolon_attribute['UltraHpSkillAdd'] = 1.2 def extra_ability(self): logger.info('符玄战技【穷观阵】属性加成') @@ -277,6 +286,9 @@ class Yanqing(BaseAvatar): pass def eidolons(self): + self.eidolon_attribute['TalentSkillAdd'] = 0.3 + if self.avatar_rank >= 1: + self.eidolon_attribute['TalentSkillAdd'] = 0.9 if self.avatar_rank >= 4: self.eidolon_attribute['IceResistancePenetration'] = 0.15 @@ -312,7 +324,9 @@ class Welt(BaseAvatar): pass def eidolons(self): - pass + if self.avatar_rank >= 1: + self.eidolon_attribute['NormalSkillAdd'] = self.Skill_num('Normal', 'Normal') * 0.5 + self.eidolon_attribute['BPSkillSkillAdd'] = self.Skill_num('BPSkill', 'BPSkill') * 0.8 def extra_ability(self): logger.info('额外能力') @@ -400,6 +414,8 @@ class Jingliu(BaseAvatar): def eidolons(self): if self.avatar_rank >= 1: self.eidolon_attribute['CriticalDamageBase'] = 0.24 + self.extra_ability_attribute['UltraSkillAdd'] = 1 + self.extra_ability_attribute['BPSkill1SkillAdd'] = 1 if self.avatar_rank >= 2: self.eidolon_attribute['BPSkill1DmgAdd'] = 0.8 if self.avatar_rank >= 4: @@ -453,6 +469,7 @@ class Topaz(BaseAvatar): self.eidolon_attribute['Talent1_FireResistancePenetration'] = 0.1 def extra_ability(self): + self.extra_ability_attribute['Talent1SkillAdd'] = self.Skill_num('Ultra', 'Talent1') logger.info('额外能力') logger.info('托帕和账账对拥有火属性弱点的敌方目标造成的伤害提高15%。') self.extra_ability_attribute['AllDamageAddedRatio'] = 0.15 @@ -465,6 +482,31 @@ class Topaz(BaseAvatar): 'BPSkill_add' ) +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): + if self.avatar_rank >= 2: + self.eidolon_attribute['DOTSkillAdd'] = 0.4 + + def extra_ability(self): + self.extra_ability_attribute['AllDamageAddedRatio'] = 0.2 + if self.avatar_rank >= 6: + self.extra_ability_attribute['DmgRatio'] = self.Talent_num('Talent') * 4 + else: + self.extra_ability_attribute['DmgRatio'] = self.Talent_num('Talent') * 3 class Avatar: @classmethod @@ -501,4 +543,6 @@ class Avatar: return JingYuan(char, skills) if char.id_ == 1107: return Clara(char, skills) + if char.id_ == 1210: + return Guinaifen(char, skills) raise Exception('不支持的角色') diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py index 864283a..9512dbc 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py @@ -109,7 +109,19 @@ class BaseAvatar: def Skill_Info(self, skill_type: str): skill_info = skill_dict[str(self.avatar_id)]['skillList'][skill_type] return msgspec.convert(skill_info, type=List[Union[str, int]]) - + + def Skill_num(self, skill: str, skill_type: str): + if skill == 'Normal': + skill_level = self.Skill.Normal_.level - 1 + if skill == 'BPSkill': + skill_level = self.Skill.BPSkill_.level - 1 + if skill == 'Ultra': + skill_level = self.Skill.Ultra_.level - 1 + if skill == 'Talent': + skill_level = self.Skill.Talent_.level - 1 + skill_info = skill_dict[str(self.avatar_id)][skill_type][skill_level] + return msgspec.convert(skill_info, type=float) + def Normalnum(self, skill_type: str): skill_info = skill_dict[str(self.avatar_id)][skill_type][ self.Skill.Normal_.level - 1 diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py index 174013d..cfab1ae 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py @@ -78,16 +78,12 @@ class BaseRelicSetSkill: set_property = status_add.Property set_value = status_add.Value if set_property != '': - relic_set_attribute[set_property] = ( - relic_set_attribute.get(set_property, 0) + set_value - ) + relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value if self.pieces4: status_add = RelicSetSkill.RelicSet[str(self.setId)]['4'] if status_add: set_property = status_add.Property set_value = status_add.Value if set_property != '': - relic_set_attribute[set_property] = ( - relic_set_attribute.get(set_property, 0) + set_value - ) + relic_set_attribute[set_property] = relic_set_attribute.get(set_property, 0) + set_value return relic_set_attribute diff --git a/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json b/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json index f6b90b3..f373e0e 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json +++ b/StarRailUID/starrailuid_charinfo/effect/Excel/SkillData.json @@ -29,9 +29,9 @@ "Maze": [20], "Ultra_Use": [120], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"] } }, "1204": { @@ -66,10 +66,10 @@ "Maze": [20], "Ultra_Use": [130], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"], - "Talent": ["attack", "10层神君", 1, "Talent"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"], + "Talent": ["attack", "10层神君", 1, "Talent", "Talent"] } }, "1107": { @@ -86,7 +86,7 @@ 1.3200000001862645, 1.3800000001862645, 1.4400000002793968, 1.5000000002793968 ], - "Ultra": [ + "Talent1": [ 0.9600000002793968, 1.0240000002793968, 1.0880000002793968, 1.1520000002793968, 1.2160000002793968, 1.2800000002793968, 1.3600000002793968, 1.4400000002793968, 1.5200000002793968, @@ -103,10 +103,10 @@ "Maze": [20], "Ultra_Use": [130], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "强化反击", 1, "Ultra"], - "Talent": ["attack", "反击", 1, "Talent"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Talent": ["attack", "反击", 1, "Talent", "Talent"], + "Talent1": ["attack", "强化反击", 1, "Talent", "Ultra"] } }, "1213": { @@ -155,11 +155,11 @@ "Maze": [20], "Ultra_Use": [140], "skillList": { - "Normal": ["attack", "普攻", 2, "Normal"], - "Normal1": ["attack", "瞬华", 3, "Normal1"], - "Normal2": ["attack", "天矢阴", 5, "Normal2"], - "Normal3": ["attack", "盘拏耀跃", 7, "Normal3"], - "Ultra": ["attack", "终结技", 3, "Ultra"] + "Normal": ["attack", "普攻", 2, "Normal", "Normal"], + "Normal1": ["attack", "瞬华", 3, "Normal", "Normal"], + "Normal2": ["attack", "天矢阴", 5, "Normal", "Normal"], + "Normal3": ["attack", "盘拏耀跃", 7, "Normal", "Normal"], + "Ultra": ["attack", "终结技", 3, "Ultra", "Ultra"] } }, "1006": { @@ -206,9 +206,9 @@ "Maze": [20], "Ultra_Use": [110], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"] } }, "1005": { @@ -248,11 +248,11 @@ "Maze": [20], "Ultra_Use": [110], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"], - "DOT": ["attack", "单次持续伤害", 1, "DOT"], - "Talent": ["attack", "追加攻击", 1, "Talent"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"], + "DOT": ["attack", "单次持续伤害", 1, "DOT", "Ultra"], + "Talent": ["attack", "追加攻击", 1, "Talent", "Talent"] } }, "1205": { @@ -309,10 +309,10 @@ "Maze": [20], "Ultra_Use": [110], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "Normal1": ["attack", "无间剑树", 1, "Normal1"], - "Ultra": ["attack", "终结技", 1, "Ultra"], - "Talent": ["attack", "追加攻击", 1, "Talent"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "Normal1": ["attack", "无间剑树", 1, "Normal", "Normal"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"], + "Talent": ["attack", "追加攻击", 1, "Talent", "Talent"] } }, "1208": { @@ -354,8 +354,8 @@ "Maze": [20], "Ultra_Use": [135], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "Ultra": ["attack", "终结技", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"] } }, "1104": { @@ -385,9 +385,9 @@ "Maze": [20], "Ultra_Use": [110], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["defence", "终结技(护盾)", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["defence", "终结技(护盾)", 1, "Ultra", "Ultra"] } }, "1209": { @@ -441,10 +441,10 @@ "Maze": [20], "Ultra_Use": [120], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"], - "Talent": ["attack", "附加伤害", 1, "Talent"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"], + "Talent": ["attack", "附加伤害", 1, "Talent", "Talent"] } }, "1004": { @@ -477,9 +477,9 @@ "Maze": [20], "Ultra_Use": [120], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 3, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 3, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"] } }, "1003": { @@ -512,10 +512,10 @@ "Maze": [20], "Ultra_Use": [120], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "Ultra": ["attack", "终结技", 1, "Ultra"], - "Talent": ["attack", "追加攻击", 1, "Talent"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"], + "Talent": ["attack", "追加攻击", 1, "Talent", "Talent"] } }, "1201": { @@ -553,9 +553,9 @@ "Maze": [20], "Ultra_Use": [140], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "Normal1": ["attack", "杠上开花!", 1, "Normal1"], - "Ultra": ["attack", "终结技", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "Normal1": ["attack", "杠上开花!", 1, "Normal", "Normal"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"] } }, "1212": { @@ -572,11 +572,11 @@ 2.300000000707805, 2.40000000086613, 2.50000000093132 ], "BPSkill1": [ - 1.2000000005122274, 1.3200000006705523, 1.440000000828877, - 1.560000000558794, 1.680000000214204, 1.800000000372529, - 1.950000000745058, 2.100000000419095, 2.250000000860302, - 2.400000000232831, 2.5200000003911555, 2.64000000054948, - 2.760000000707805, 2.88000000086613, 3.00000000093132 + 1.2500000005122274, 1.3750000006705523, 1.500000000828877, + 1.625000000558794, 1.750000000214204, 1.875000000372529, + 0.031250000745058, 2.187500000419095, 2.343750000860302, + 2.500000000232831, 2.6250000003911555, 2.75000000054948, + 2.875000000707805, 3.00000000086613, 3.12500000093132 ], "Ultra": [ 1.8000000005122274, 1.9200000006705523, 2.040000000828877, @@ -602,10 +602,10 @@ "Maze": [20], "Ultra_Use": [140], "skillList": { - "Normal": ["attack", "普攻", 1, "Normal"], - "BPSkill": ["attack", "战技", 1, "BPSkill"], - "BPSkill1": ["attack", "寒川映月", 1, "BPSkill1"], - "Ultra": ["attack", "终结技", 1, "Ultra"] + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "BPSkill1": ["attack", "寒川映月", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"] } }, "1112": { @@ -645,9 +645,52 @@ "Maze": [20], "Ultra_Use": [140], "skillList": { - "Normal": ["attack", "普攻", 1, "Talent"], - "BPSkill": ["attack", "账账", 1, "Talent"], - "Talent1": ["attack", "强化账账", 1, "Talent1"] + "Normal": ["attack", "普攻", 1, "Talent", "Normal"], + "BPSkill": ["attack", "账账", 1, "Talent", "BPSkill"], + "Talent1": ["attack", "强化账账", 1, "Talent", "Talent"] + } + }, + "1210": { + "Normal": [ + 0.5000000004656613, 0.6000000005587935, 0.7000000006519258, + 0.8000000007450581, 0.9000000008381903, 1.0000000000931323, + 1.1000000000931323, 1.2000000001862645, 1.3000000002793968 + ], + "BPSkill": [ + 0.6000000005587935, 0.6600000006146729, 0.7200000006705523, + 0.7800000007264316, 0.840000000782311, 0.9000000008381903, + 0.9750000005587935, 1.0500000000465661, 1.1249999997671694, + 1.2000000001862645, 1.2600000002421439, 1.3200000002980232, + 1.3800000003539026, 1.440000000409782, 1.5000000004656613 + ], + "DOT": [ + 0.8390400004573166, 0.9229800018947572, 1.0069200003053993, + 1.0908600010443479, 1.1748000003863126, 1.3007100007962435, + 1.4685900008771569, 1.6784400006290525, 1.9302600014489144, + 2.182080000638962, 2.2912020003423095, 2.400324000744149, + 2.5094460004474968, 2.6185680008493364, 2.727690001251176 + ], + "Ultra": [ + 0.7200000006705523, 0.7680000001564622, 0.8160000003408641, + 0.8640000005252659, 0.9120000007096678, 0.9600000008940697, + 1.0200000000186265, 1.0800000000745058, 1.1400000001303852, + 1.2000000001862645, 1.2479999996721745, 1.2959999998565763, + 1.3440000000409782, 1.39200000022538, 1.440000000409782 + ], + "Talent": [ + 0.0400000000372529, 0.04299999983049929, 0.04599999962374568, + 0.04899999941699207, 0.05199999990873039, 0.054999999701976776, + 0.058750000316649675, 0.06250000023283064, 0.06625000014901161, + 0.07000000006519258, 0.07299999985843897, 0.07599999965168536, + 0.07899999944493175, 0.08199999993667006, 0.08499999972991645 + ], + "Maze": [20], + "Ultra_Use": [140], + "skillList": { + "Normal": ["attack", "普攻", 1, "Normal", "Normal"], + "BPSkill": ["attack", "战技", 1, "BPSkill", "BPSkill"], + "Ultra": ["attack", "终结技", 1, "Ultra", "Ultra"], + "DOT": ["attack", "每段灼烧", 1, "DOT", "BPSkill"] } } } diff --git a/StarRailUID/starrailuid_charinfo/effect/Role.py b/StarRailUID/starrailuid_charinfo/effect/Role.py index 905ca60..833fb27 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Role.py +++ b/StarRailUID/starrailuid_charinfo/effect/Role.py @@ -1,5 +1,6 @@ from typing import List, Union - +import json +from pathlib import Path from gsuid_core.logger import logger from .Avatar.Avatar import Avatar @@ -9,7 +10,9 @@ from ..mono.Character import Character from .Base.model import DamageInstance from .Relic.Relic import RelicSet, SingleRelic - +Excel_path = Path(__file__).parent +with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: + skill_dict = json.load(f) class RoleInstance: def __init__(self, raw_data: Character): self.raw_data = DamageInstance(raw_data) @@ -122,57 +125,17 @@ class RoleInstance: logger.info(skill_type) # 技能区 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() - elif ( - self.raw_data.avatar.id_ == 1006 - and self.raw_data.avatar.rank >= 4 - ): - skill_multiplier = self.avatar.Ultra() + 1 - else: - skill_multiplier = self.avatar.Ultra() - elif skill_type == 'Talent': - skill_multiplier = self.avatar.Talent() - if self.raw_data.avatar.id_ == 1209: - if self.raw_data.avatar.rank >= 1: - skill_multiplier = skill_multiplier + 0.9 - else: - skill_multiplier = skill_multiplier + 0.3 - elif 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: - skill_multiplier = self.avatar.Ultra_num(skill_type) - if self.raw_data.avatar.rank >= 6: - skill_multiplier = skill_multiplier + 1.56 - elif self.raw_data.avatar.id_ == 1205: - skill_multiplier = self.avatar.Normalnum(skill_type) - 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') - + skill_multiplier = self.avatar.Skill_num(skill_info[4], skill_type) + # 检查是否有对某一个技能的倍率加成 + for attr in self.attribute_bonus: + if attr.__contains__('SkillAdd'): + skill_name = attr.split('SkillAdd')[0] + if skill_name in (skill_type, skill_info[3]): + logger.info( + f'{skill_name}对{skill_type}有{self.attribute_bonus[attr]}倍率加成' + ) + skill_multiplier = skill_multiplier + self.attribute_bonus[attr] + logger.info(f'技能区总: {skill_multiplier}') # 检查武器战斗生效的buff @@ -184,7 +147,15 @@ class RoleInstance: Ultra_Use, self.base_attr, self.attribute_bonus ) logger.info(self.attribute_bonus) - + logger.info('检查遗器套装战斗生效的buff') + for set_skill in self.relic_set.SetSkill: + self.attribute_bonus = await set_skill.set_skill_ability( + self.base_attr, self.attribute_bonus + ) + if self.attribute_bonus is None: + raise Exception('attribute_bonus is None') + logger.info(self.attribute_bonus) + # 检查是否有对某一个技能的属性加成 logger.info('检查是否有对某一个技能的属性加成') for attr in self.attribute_bonus: @@ -208,14 +179,7 @@ class RoleInstance: self.attribute_bonus['StatusProbabilityBase'] = ( status_probability + self.attribute_bonus[attr] ) - logger.info(self.attribute_bonus) - logger.info('检查遗器套装战斗生效的buff') - for set_skill in self.relic_set.SetSkill: - self.attribute_bonus = await set_skill.set_skill_ability( - self.base_attr, self.attribute_bonus - ) - if self.attribute_bonus is None: - raise Exception('attribute_bonus is None') + merged_attr = await merge_attribute( self.base_attr, self.attribute_bonus ) @@ -251,33 +215,26 @@ class RoleInstance: hp_num = 0 if self.raw_data.avatar.id_ in [1205, 1208]: hp_num = merged_attr['hp'] - if skill_type == 'Normal': - if self.raw_data.avatar.id_ == 1208: - hp_multiplier = self.avatar.Normalnum('Normal_HP') - elif skill_type == 'Normal1': - hp_multiplier = self.avatar.Normalnum('Normal1_HP') - skill_type = 'Normal' - elif skill_type == 'Ultra': - hp_multiplier = self.avatar.Ultra_num('Ultra_HP') - if ( - self.raw_data.avatar.rank >= 1 - and self.raw_data.avatar.id_ == 1205 - ): - hp_multiplier += 0.9 - if ( - self.raw_data.avatar.rank >= 6 - and self.raw_data.avatar.id_ == 1208 - ): - hp_multiplier += 1.2 - elif skill_type == 'Talent': - hp_multiplier = self.avatar.Talent_num('Talent_HP') + skill_type_hp = skill_type + '_HP' + if skill_type_hp in skill_dict[str(self.raw_data.avatar.id_)]: + hp_multiplier = self.avatar.Skill_num(skill_info[4], skill_type_hp) + else: + hp_multiplier = 0 + for attr in self.attribute_bonus: + if attr.__contains__('HpSkillAdd'): + skill_name = attr.split('HpSkillAdd')[0] + if skill_name in (skill_type, skill_info[3]): + logger.info( + f'{skill_name}对{skill_type}有{self.attribute_bonus[attr]}倍率加成' + ) + hp_multiplier = hp_multiplier + self.attribute_bonus[attr] + + if skill_type == 'Talent': if ( self.raw_data.avatar.rank >= 6 and self.raw_data.avatar.id_ == 1205 ): damage_add = hp_num * 0.5 - else: - hp_multiplier = 0 attack = (skill_multiplier * attack) + (hp_multiplier * hp_num) skill_multiplier = 1 logger.info(f'混伤区: {attack}') @@ -511,15 +468,6 @@ class RoleInstance: damage_qw_z = damage_qw_z * 1.8 damage_tz_z = damage_tz_z * 1.8 - if ( - self.raw_data.avatar.id_ == 1212 - and self.raw_data.avatar.rank >= 1 - ): - if skill_info[3] == 'BPSkill1' or skill_info[3] == 'Ultra': - 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 = ( diff --git a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py index 25a24f9..09be5e6 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py +++ b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py @@ -737,12 +737,6 @@ class NowheretoRun(BaseWeapon): base_attr: Dict[str, float], attribute_bonus: Dict[str, float], ): - # attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) - # attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - # weapon_effect['21033']['Param']['AttackAddedRatio'][ - # self.weapon_rank - 1 - # ] - # ) return attribute_bonus diff --git a/StarRailUID/starrailuid_charinfo/mono/Character.py b/StarRailUID/starrailuid_charinfo/mono/Character.py index 2b567da..1571bf1 100644 --- a/StarRailUID/starrailuid_charinfo/mono/Character.py +++ b/StarRailUID/starrailuid_charinfo/mono/Character.py @@ -1,6 +1,9 @@ +import json from typing import Dict, List from collections import Counter +from loguru import logger + from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty @@ -50,9 +53,7 @@ class Character: for equip_ability in equip_ability_property: property_type = equip_ability['PropertyType'] value = equip_ability['Value']['Value'] - self.add_attr[property_type] = value + self.add_attr.get( - property_type, 0 - ) + self.add_attr[property_type] = value + self.add_attr.get(property_type, 0) async def get_char_attribute_bonus(self): attribute_bonus = self.attribute_bonus @@ -60,9 +61,7 @@ class Character: status_add = bonus['statusAdd'] bonus_property = status_add['property'] value = status_add['value'] - self.add_attr[bonus_property] = value + self.add_attr.get( - bonus_property, 0 - ) + self.add_attr[bonus_property] = value + self.add_attr.get(bonus_property, 0) async def get_relic_info(self): # 计算圣遗物效果 @@ -72,16 +71,12 @@ class Character: # 处理主属性 relic_property = relic['MainAffix']['Property'] property_value = relic['MainAffix']['Value'] - self.add_attr[relic_property] = property_value + self.add_attr.get( - relic_property, 0 - ) + self.add_attr[relic_property] = property_value + self.add_attr.get(relic_property, 0) # 处理副词条 for sub in relic['SubAffixList']: sub_property = sub['Property'] sub_value = sub['Value'] - self.add_attr[sub_property] = sub_value + self.add_attr.get( - sub_property, 0 - ) + self.add_attr[sub_property] = sub_value + self.add_attr.get(sub_property, 0) # 处理套装属性 set_id_dict = Counter(set_id_list) # logger.info(set_id_dict.most_common()) @@ -96,18 +91,14 @@ class Character: set_property = status_add.Property set_value = status_add.Value if set_property != '': - self.add_attr[ - set_property - ] = set_value + self.add_attr.get(set_property, 0) + self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0) if count == 4: status_add = RelicSetSkill.RelicSet[str(set_id)]['4'] if status_add: set_property = status_add.Property set_value = status_add.Value if set_property != '': - self.add_attr[ - set_property - ] = set_value + self.add_attr.get(set_property, 0) + self.add_attr[set_property] = set_value + self.add_attr.get(set_property, 0) # logger.info(json.dumps(self.base_attributes)) # logger.info(json.dumps(self.add_attr))