From 7fe0bcdb78b0e0c3b9562848faa81599f36959ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=A3=E8=90=BD?= <34079036+jiluoQAQ@users.noreply.github.com> Date: Tue, 5 Sep 2023 22:26:35 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81=E6=9B=B4?= =?UTF-8?q?=E5=A4=9A=E8=A7=92=E8=89=B2=E4=BC=A4=E5=AE=B3=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=20(#67)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 支持更多角色伤害计算 * 支持更多角色伤害计算 * 支持更多角色伤害计算 * 🚨 `pre-commit-ci`修复格式错误 * 支持更多角色伤害计算 * 支持更多角色伤害计算 * 🚨 `pre-commit-ci`修复格式错误 * 支持更多角色伤害计算 * 🚨 `pre-commit-ci`修复格式错误 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../sruid_utils/api/mihomo/__init__.py | 1 - StarRailUID/sruid_utils/api/mihomo/models.py | 2 +- StarRailUID/sruid_utils/api/mys/models.py | 2 +- StarRailUID/starrailuid_abyss/__init__.py | 2 +- .../starrailuid_abyss/draw_abyss_card.py | 11 +- StarRailUID/starrailuid_abyss/utils.py | 3 +- StarRailUID/starrailuid_charinfo/__init__.py | 10 +- .../starrailuid_charinfo/draw_char_img.py | 63 +- .../effect/Avatar/Avatar.py | 85 +- .../effect/Base/AvatarBase.py | 42 +- .../effect/Base/RelicBase.py | 10 +- .../effect/Base/SkillBase.py | 8 +- .../effect/Base/WeaponBase.py | 4 +- .../starrailuid_charinfo/effect/Base/model.py | 9 +- .../effect/Excel/weapon_effect.json | 76 ++ .../effect/Relic/Relic.py | 86 +- .../starrailuid_charinfo/effect/Role.py | 169 ++-- .../effect/Weapon/Weapon.py | 788 +++++++++++++----- .../starrailuid_charinfo/effect/utils.py | 17 +- .../starrailuid_charinfo/mono/Character.py | 6 +- StarRailUID/starrailuid_charinfo/to_card.py | 16 +- StarRailUID/starrailuid_charinfo/to_data.py | 38 +- StarRailUID/starrailuid_gachalog/__init__.py | 6 +- .../starrailuid_gachalog/draw_gachalogs.py | 19 +- .../starrailuid_gachalog/get_gachalogs.py | 6 +- .../starrailuid_note/draw_note_card.py | 13 +- StarRailUID/starrailuid_note/note_text.py | 2 +- StarRailUID/starrailuid_rogue/__init__.py | 2 +- .../starrailuid_rogue/draw_rogue_card.py | 13 +- StarRailUID/starrailuid_rogue/utils.py | 3 +- .../draw_roleinfo_card.py | 11 +- StarRailUID/starrailuid_roleinfo/utils.py | 5 +- StarRailUID/starrailuid_signin/sign.py | 8 +- .../starrailuid_stamina/draw_stamina_card.py | 9 +- StarRailUID/starrailuid_stamina/notice.py | 4 +- .../starrailuid_stamina/stamina_text.py | 2 +- StarRailUID/starrailuid_user/__init__.py | 4 +- StarRailUID/starrailuid_user/add_ck.py | 11 +- .../starrailuid_user/draw_user_card.py | 2 +- StarRailUID/starrailuid_user/qrlogin.py | 13 +- StarRailUID/utils/convert.py | 6 +- StarRailUID/utils/image/convert.py | 4 +- StarRailUID/utils/map/gen.py | 24 +- .../utils/resource/download_from_cos.py | 5 +- StarRailUID/utils/resource/download_url.py | 7 +- 45 files changed, 1077 insertions(+), 550 deletions(-) diff --git a/StarRailUID/sruid_utils/api/mihomo/__init__.py b/StarRailUID/sruid_utils/api/mihomo/__init__.py index 596cce7..f68b8cd 100644 --- a/StarRailUID/sruid_utils/api/mihomo/__init__.py +++ b/StarRailUID/sruid_utils/api/mihomo/__init__.py @@ -1,6 +1,5 @@ """Mihomo.me api 包装 """ from .models import MihomoData as MihomoData -from .requests import get_char_card_info as get_char_card_info __all__ = ["requests", "MihomoData"] diff --git a/StarRailUID/sruid_utils/api/mihomo/models.py b/StarRailUID/sruid_utils/api/mihomo/models.py index 8e4c0d9..99a5434 100644 --- a/StarRailUID/sruid_utils/api/mihomo/models.py +++ b/StarRailUID/sruid_utils/api/mihomo/models.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TypedDict, Union +from typing import Union, TypedDict class MihomoData(TypedDict): diff --git a/StarRailUID/sruid_utils/api/mys/models.py b/StarRailUID/sruid_utils/api/mys/models.py index a92a565..633b2fa 100644 --- a/StarRailUID/sruid_utils/api/mys/models.py +++ b/StarRailUID/sruid_utils/api/mys/models.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, List, TypedDict, Union +from typing import Any, Dict, List, Union, TypedDict ################ # 抽卡记录相关 # diff --git a/StarRailUID/starrailuid_abyss/__init__.py b/StarRailUID/starrailuid_abyss/__init__.py index 7dce7a3..df958e6 100644 --- a/StarRailUID/starrailuid_abyss/__init__.py +++ b/StarRailUID/starrailuid_abyss/__init__.py @@ -1,8 +1,8 @@ import re +from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event -from gsuid_core.sv import SV from gsuid_core.utils.error_reply import UID_HINT from ..utils.convert import get_uid diff --git a/StarRailUID/starrailuid_abyss/draw_abyss_card.py b/StarRailUID/starrailuid_abyss/draw_abyss_card.py index 213fc5d..abebb7f 100644 --- a/StarRailUID/starrailuid_abyss/draw_abyss_card.py +++ b/StarRailUID/starrailuid_abyss/draw_abyss_card.py @@ -1,17 +1,18 @@ from pathlib import Path -from typing import Optional, Union +from typing import Union, Optional from PIL import Image, ImageDraw - from gsuid_core.logger import logger from gsuid_core.utils.error_reply import get_error from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, get_qq_avatar, + draw_pic_with_ring, ) -from ..sruid_utils.api.mys.models import AbyssAvatar +from .utils import get_icon from ..utils.convert import GsCookie +from ..utils.image.convert import convert_img +from ..sruid_utils.api.mys.models import AbyssAvatar from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, @@ -19,8 +20,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_42, ) -from ..utils.image.convert import convert_img -from .utils import get_icon abyss_list = { '1': '琥珀恩赐其一', diff --git a/StarRailUID/starrailuid_abyss/utils.py b/StarRailUID/starrailuid_abyss/utils.py index e980c13..3f7e35e 100644 --- a/StarRailUID/starrailuid_abyss/utils.py +++ b/StarRailUID/starrailuid_abyss/utils.py @@ -2,9 +2,8 @@ from io import BytesIO from pathlib import Path from typing import TypeVar -from aiohttp import ClientSession from PIL import Image - +from aiohttp import ClientSession from gsuid_core.data_store import get_res_path T = TypeVar("T") diff --git a/StarRailUID/starrailuid_charinfo/__init__.py b/StarRailUID/starrailuid_charinfo/__init__.py index 1113620..ef1e7fb 100644 --- a/StarRailUID/starrailuid_charinfo/__init__.py +++ b/StarRailUID/starrailuid_charinfo/__init__.py @@ -3,24 +3,24 @@ from pathlib import Path from typing import Tuple, cast from PIL import Image - +from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event -from gsuid_core.sv import SV +from .to_card import api_to_card from ..utils.convert import get_uid +from ..utils.sr_prefix import PREFIX from ..utils.error_reply import UID_HINT from ..utils.image.convert import convert_img from ..utils.resource.RESOURCE_PATH import TEMP_PATH -from ..utils.sr_prefix import PREFIX -from .draw_char_img import cal, draw_char_info_img, get_char_data -from .to_card import api_to_card +from .draw_char_img import cal, get_char_data, draw_char_info_img sv_char_info_config = SV('sr面板设置', pm=2) sv_get_char_info = SV('sr面板查询', priority=10) sv_get_sr_original_pic = SV('sr查看面板原图', priority=5) sv_char_damage_cal = SV('sr伤害计算') + @sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算') async def send_damage_msg(bot: Bot, ev: Event): msg = ''.join(re.findall('[\u4e00-\u9fa5 ]', ev.text)) diff --git a/StarRailUID/starrailuid_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 2867359..9fa66cb 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -1,19 +1,35 @@ +import re import json import math -import re from pathlib import Path from typing import Dict, Union from mpmath import mp, nstr from PIL import Image, ImageDraw - from gsuid_core.logger import logger from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.image_tools import draw_text_by_line +from .to_data import api_to_dict +from .effect.Role import RoleInstance +from .mono.Character import Character from ..utils.error_reply import CHAR_HINT -from ..utils.excel.read_excel import light_cone_ranks from ..utils.fonts.first_world import fw_font_28 +from ..utils.excel.read_excel import light_cone_ranks +from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name +from ..utils.map.SR_MAP_PATH import ( + RelicId2Rarity, + AvatarRelicScore, + avatarId2Name, + avatarId2DamageType, +) +from ..utils.resource.RESOURCE_PATH import ( + RELIC_PATH, + SKILL_PATH, + PLAYER_PATH, + WEAPON_PATH, + CHAR_PORTRAIT_PATH, +) from ..utils.fonts.starrail_fonts import ( sr_font_20, sr_font_23, @@ -23,23 +39,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_38, ) -from ..utils.map.name_covert import alias_to_char_name, name_to_avatar_id -from ..utils.map.SR_MAP_PATH import ( - AvatarRelicScore, - RelicId2Rarity, - avatarId2DamageType, - avatarId2Name, -) -from ..utils.resource.RESOURCE_PATH import ( - CHAR_PORTRAIT_PATH, - PLAYER_PATH, - RELIC_PATH, - SKILL_PATH, - WEAPON_PATH, -) -from .effect.Role import RoleInstance -from .mono.Character import Character -from .to_data import api_to_dict Excel_path = Path(__file__).parent / 'effect' with Path.open(Excel_path / 'Excel' / 'seele.json', encoding='utf-8') as f: @@ -118,7 +117,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): (620, 207), char.char_name, (255, 255, 255), sr_font_38, 'lm' ) if hasattr(sr_font_38, 'getsize'): - char_name_len = sr_font_38.getsize(char.char_name)[0] # type: ignore + char_name_len = sr_font_38.getsize(char.char_name)[0] # type: ignore else: bbox = sr_font_38.getbbox(char.char_name) char_name_len = bbox[2] - bbox[0] @@ -365,7 +364,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): 'lm', ) if hasattr(sr_font_34, 'getsize'): - weapon_name_len = sr_font_34.getsize( # type: ignore + weapon_name_len = sr_font_34.getsize( # type: ignore char.equipment["equipmentName"] )[0] else: @@ -532,7 +531,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): if subName in ['攻击力', '生命值', '防御力', '速度']: subValueStr = nstr(subValue, 3) else: - subValueStr = nstr(subValue * 100, 3) + '%' # type: ignore + subValueStr = nstr(subValue * 100, 3) + '%' # type: ignore subNameStr = subName.replace('百分比', '').replace('元素', '') # 副词条文字颜色 relic_color = (255, 255, 255) @@ -584,7 +583,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): fw_font_28, 'mm', ) - + if damage_len > 0: damage_list = await cal(char_data) # 写伤害 @@ -595,7 +594,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): sr_font_26, 'lm', ) - + char_img_draw.text( (370, 2048), '暴击值', @@ -603,7 +602,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): sr_font_26, 'lm', ) - + char_img_draw.text( (560, 2048), '期望值', @@ -611,7 +610,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): sr_font_26, 'lm', ) - + char_img_draw.text( (750, 2048), '满配辅助末日兽', @@ -653,7 +652,7 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str): sr_font_26, 'lm', ) - + # 写底层文字 char_img_draw.text( (525, 2022 + bg_height), @@ -722,7 +721,13 @@ async def cal(char_data: Dict): skill_info_list = [] if char.char_id in [1102, 1204, 1107, 1213, 1006]: if char.char_id == 1213: - for skill_type in ['Normal', 'Normal1', 'Normal2', 'Normal3', 'Ultra']: + 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) diff --git a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py index b86d0f1..d8a88bf 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py +++ b/StarRailUID/starrailuid_charinfo/effect/Avatar/Avatar.py @@ -1,14 +1,10 @@ from typing import List from mpmath import mp - from gsuid_core.logger import logger from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff -from ..Base.model import ( - DamageInstanceAvatar, - DamageInstanceSkill, -) +from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar mp.dps = 14 @@ -16,13 +12,15 @@ mp.dps = 14 class Seele(BaseAvatar): Buff: BaseAvatarBuff - def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + 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 @@ -36,20 +34,23 @@ class Seele(BaseAvatar): def extra_ability(self): # 额外能力 割裂 抗性穿透提高20 - self.extra_ability_attribute[ - 'QuantumResistancePenetration' - ] = mp.mpf(0.2) + self.extra_ability_attribute['QuantumResistancePenetration'] = mp.mpf( + 0.2 + ) + class JingYuan(BaseAvatar): Buff: BaseAvatarBuff - def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + 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 @@ -64,24 +65,23 @@ class JingYuan(BaseAvatar): def extra_ability(self): logger.info('额外能力') logger.info('【神君】下回合的攻击段数大于等于6段,则其下回合的暴击伤害提高25%。') - self.extra_ability_attribute[ - 'CriticalDamageBase' - ] = mp.mpf(0.25) + self.extra_ability_attribute['CriticalDamageBase'] = mp.mpf(0.25) logger.info('施放战技后,暴击率提升10%') - self.extra_ability_attribute[ - 'CriticalChanceBase' - ] = mp.mpf(0.1) + self.extra_ability_attribute['CriticalChanceBase'] = mp.mpf(0.1) + class Clara(BaseAvatar): Buff: BaseAvatarBuff - def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + 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 @@ -92,23 +92,22 @@ class Clara(BaseAvatar): def extra_ability(self): logger.info('额外能力') logger.info('史瓦罗的反击造成的伤害提高30%') - self.extra_ability_attribute[ - 'TalentDmgAdd' - ] = mp.mpf(0.3) - self.extra_ability_attribute[ - 'UltraDmgAdd' - ] = mp.mpf(0.3) + self.extra_ability_attribute['TalentDmgAdd'] = mp.mpf(0.3) + self.extra_ability_attribute['UltraDmgAdd'] = mp.mpf(0.3) + class Danhengil(BaseAvatar): Buff: BaseAvatarBuff - def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + 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 @@ -125,49 +124,49 @@ class Danhengil(BaseAvatar): def extra_ability(self): logger.info('额外能力') logger.info('对拥有虚数属性弱点的敌方目标造成伤害时,暴击伤害提高24%。') - self.extra_ability_attribute[ - 'CriticalDamageBase' - ] = mp.mpf(0.24) + self.extra_ability_attribute['CriticalDamageBase'] = mp.mpf(0.24) + class Silverwolf(BaseAvatar): Buff: BaseAvatarBuff - def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + 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 >= 6: - self.extra_ability_attribute[ - 'AllDamageAddedRatio' - ] = mp.mpf(1) + self.extra_ability_attribute['AllDamageAddedRatio'] = mp.mpf(1) def extra_ability(self): logger.info('额外能力') logger.info('战技降抗') logger.info('战技使目标全属性抗性降低的效果额外降低3%') enemy_status_resistance = self.BPSkill_d() + 0.03 - self.extra_ability_attribute[ - 'QuantumResistancePenetration' - ] = mp.mpf(enemy_status_resistance) + self.extra_ability_attribute['QuantumResistancePenetration'] = mp.mpf( + enemy_status_resistance + ) logger.info('终结技降防') ultra_defence = self.Ultra_d() logger.info('天赋降防') talent_defence = self.Talent() ignore_defence = ultra_defence + talent_defence - self.extra_ability_attribute[ - 'ignore_defence' - ] = mp.mpf(ignore_defence) + self.extra_ability_attribute['ignore_defence'] = mp.mpf(ignore_defence) + class Avatar: @classmethod - def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + def create( + cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): if char.id_ == 1006: return Silverwolf(char, skills) if char.id_ == 1213: diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py index 4002959..445fa6b 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/AvatarBase.py @@ -1,13 +1,13 @@ import json -from abc import abstractmethod -from pathlib import Path from typing import List +from pathlib import Path +from abc import abstractmethod from mpmath import mp -from ....utils.excel.read_excel import AvatarPromotion -from .model import DamageInstanceAvatar, DamageInstanceSkill from .SkillBase import BaseSkills +from ....utils.excel.read_excel import AvatarPromotion +from .model import DamageInstanceSkill, DamageInstanceAvatar path = Path(__file__).parent.parent with Path.open(path / 'Excel' / 'seele.json', encoding='utf-8') as f: @@ -18,7 +18,9 @@ mp.dps = 14 class BaseAvatarBuff: @classmethod - def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + def create( + cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): cls.extra_ability_id = [] if char.extra_ability: for extra_ability in char.extra_ability: @@ -39,7 +41,9 @@ class BaseAvatarBuff: class BaseAvatar: - def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + def __init__( + self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): self.Skill = BaseSkills.create(char=char, skills=skills) self.Buff = BaseAvatarBuff.create(char=char, skills=skills) self.avatar_id = char.id_ @@ -89,21 +93,21 @@ class BaseAvatar: def Skill_Info(self, skill_type): skill_info = skill_dict[str(self.avatar_id)]['skilllist'][skill_type] return skill_info - + def Normalnum(self, skill_type): return mp.mpf( skill_dict[str(self.avatar_id)][skill_type][ self.Skill.Normal_.level - 1 ] ) - + def Normal(self): return mp.mpf( skill_dict[str(self.avatar_id)]['Normal'][ self.Skill.Normal_.level - 1 ] ) - + def BPSkill(self): return mp.mpf( skill_dict[str(self.avatar_id)]['BPSkill'][ @@ -122,33 +126,37 @@ class BaseAvatar: return mp.mpf( skill_dict[str(self.avatar_id)]['Maze'][self.Skill.Maze_.level - 1] ) - + def Talent(self): return mp.mpf( - skill_dict[str(self.avatar_id)]['Talent'][self.Skill.Talent_.level - 1] + skill_dict[str(self.avatar_id)]['Talent'][ + self.Skill.Talent_.level - 1 + ] ) - + def BPSkill_d(self): return mp.mpf( skill_dict[str(self.avatar_id)]['BPSkill_D'][ self.Skill.BPSkill_.level - 1 ] ) - + def Ultra_d(self): return mp.mpf( skill_dict[str(self.avatar_id)]['Ultra_D'][ self.Skill.Ultra_.level - 1 ] ) - + def Talent_add(self): if self.avatar_id in [1102]: return mp.mpf( - skill_dict[str(self.avatar_id)]['Talent'][self.Skill.Talent_.level - 1] + skill_dict[str(self.avatar_id)]['Talent'][ + self.Skill.Talent_.level - 1 + ] ) else: return mp.mpf(0) - + def Ultra_Use(self): - return skill_dict[str(self.avatar_id)]['Ultra_Use'][0] \ No newline at end of file + return skill_dict[str(self.avatar_id)]['Ultra_Use'][0] diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py index caad822..eae565a 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/RelicBase.py @@ -1,12 +1,11 @@ -from abc import abstractmethod from typing import Dict +from abc import abstractmethod from mpmath import mp - from gsuid_core.logger import logger -from ....utils.map.SR_MAP_PATH import RelicSetSkill from .model import DamageInstanceRelic +from ....utils.map.SR_MAP_PATH import RelicSetSkill mp.dps = 14 @@ -22,10 +21,7 @@ class SingleRelic: def get_attribute_(self): # MainAffix - if ( - self.raw_relic.MainAffix.Property - in self.relic_attribute_bonus - ): + if self.raw_relic.MainAffix.Property in self.relic_attribute_bonus: self.relic_attribute_bonus[ self.raw_relic.MainAffix.Property ] += mp.mpf(self.raw_relic.MainAffix.Value) diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/SkillBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/SkillBase.py index 99cf1b4..d863719 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/SkillBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/SkillBase.py @@ -1,10 +1,10 @@ import json -from pathlib import Path from typing import List +from pathlib import Path from mpmath import mp -from .model import DamageInstanceAvatar, DamageInstanceSkill +from .model import DamageInstanceSkill, DamageInstanceAvatar mp.dps = 14 @@ -28,7 +28,9 @@ class BaseSkills: Talent_: SingleSkill @classmethod - def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]): + def create( + cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] + ): for skill in skills: skill_attack_type = skill.skillAttackType if skill_attack_type == 'Normal': diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/WeaponBase.py b/StarRailUID/starrailuid_charinfo/effect/Base/WeaponBase.py index f609d1e..0b6f0d7 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/WeaponBase.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/WeaponBase.py @@ -1,11 +1,11 @@ -from abc import abstractmethod from typing import Dict +from abc import abstractmethod from mpmath import mp +from .model import DamageInstanceWeapon from ....utils.excel.read_excel import EquipmentPromotion from ....utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty -from .model import DamageInstanceWeapon mp.dps = 14 diff --git a/StarRailUID/starrailuid_charinfo/effect/Base/model.py b/StarRailUID/starrailuid_charinfo/effect/Base/model.py index 1d8ed46..620eb0c 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Base/model.py +++ b/StarRailUID/starrailuid_charinfo/effect/Base/model.py @@ -81,8 +81,13 @@ class DamageInstance: rank=char.char_rank, element=char.char_element, promotion=char.char_promotion, - attribute_bonus=msgspec.from_builtins(char.attribute_bonus, List[DamageInstanceAvatarAttributeBouns] | None), - extra_ability=msgspec.from_builtins(char.extra_ability, List | None), + attribute_bonus=msgspec.from_builtins( + char.attribute_bonus, + List[DamageInstanceAvatarAttributeBouns] | None, + ), + extra_ability=msgspec.from_builtins( + char.extra_ability, List | None + ), ) self.weapon = DamageInstanceWeapon( id_=char.equipment['equipmentID'], diff --git a/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json b/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json index 4c8d982..04fd286 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json +++ b/StarRailUID/starrailuid_charinfo/effect/Excel/weapon_effect.json @@ -218,6 +218,64 @@ 0.50000000044703484 ] } + }, + "21001": { + "Param": { + "AllDamageAddedRatio": [ + 0.12000000022351742, + 0.1500000002793968, + 0.1800000003352761, + 0.210000003911555, + 0.24000000044703484 + ] + } + }, + "21022": { + "Param": { + "AllDamageAddedRatio": [ + 0.16000000022351742, + 0.2050000002793968, + 0.2400000003352761, + 0.2850000003911555, + 0.32000000044703484 + ] + } + }, + "21015": { + "Param": { + "ignore_defence": [ + 0.12000000022351742, + 0.1300000002793968, + 0.1400000003352761, + 0.1500000003911555, + 0.16000000044703484 + ] + } + }, + "23004": { + "Param": { + "AllDamageAddedRatio": [ + 0.2400000000745058, + 0.28000000009313226, + 0.32000000011175871, + 0.36000000013038516, + 0.4000000001490116 + ], + "A2_StatusProbability": [ + 0.18000000022351742, + 0.2100000002793968, + 0.2400000003352761, + 0.2700000003911555, + 0.30000000044703484 + ], + "A2_AttackAddedRatio": [ + 0.2400000000745058, + 0.28000000009313226, + 0.32000000011175871, + 0.36000000013038516, + 0.4000000001490116 + ] + } }, "23007": { "Param": { @@ -236,6 +294,24 @@ 0.20000000044703484 ] } + }, + "23006": { + "Param": { + "SpeedAddedRatio": [ + 0.04800000022351742, + 0.0560000002793968, + 0.0640000003352761, + 0.0720000003911555, + 0.0800000044703484 + ], + "AllDamageAddedRatio": [ + 0.2400000000745058, + 0.28000000009313226, + 0.32000000011175871, + 0.36000000013038516, + 0.4000000001490116 + ] + } }, "21020": { "Param": { diff --git a/StarRailUID/starrailuid_charinfo/effect/Relic/Relic.py b/StarRailUID/starrailuid_charinfo/effect/Relic/Relic.py index e87d132..a753f38 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Relic/Relic.py +++ b/StarRailUID/starrailuid_charinfo/effect/Relic/Relic.py @@ -1,12 +1,12 @@ -from collections import Counter from typing import Dict, List +from collections import Counter -from gsuid_core.logger import logger from mpmath import mp +from gsuid_core.logger import logger -from ..Base.model import DamageInstanceRelic -from ..Base.RelicBase import BaseRelicSetSkill, SingleRelic from ..utils import merge_attribute +from ..Base.model import DamageInstanceRelic +from ..Base.RelicBase import SingleRelic, BaseRelicSetSkill class Relic101(BaseRelicSetSkill): @@ -173,6 +173,7 @@ class Relic108(BaseRelicSetSkill): ) return attribute_bonus + class Relic109(BaseRelicSetSkill): def __init__(self, set_id: int, count: int): super().__init__(set_id, count) @@ -193,6 +194,7 @@ class Relic109(BaseRelicSetSkill): ) return attribute_bonus + class Relic110(BaseRelicSetSkill): def __init__(self, set_id: int, count: int): super().__init__(set_id, count) @@ -259,6 +261,49 @@ class Relic112(BaseRelicSetSkill): return attribute_bonus +class Relic113(BaseRelicSetSkill): + def __init__(self, set_id: int, count: int): + super().__init__(set_id, count) + self._count = count + + async def check(self, base_attr: Dict, attribute_bonus: Dict): + ''' + 当装备者受到攻击或被我方目标消耗生命值后,暴击率提高8%,持续2回合,该效果最多叠加2层。 + ''' + logger.info('Relic113 check success') + return True + + async def set_skill_ability(self, base_attr: Dict, attribute_bonus: Dict): + if self.pieces4 and await self.check(base_attr, attribute_bonus): + logger.info('当装备者受到攻击或被我方目标消耗生命值后') + critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0) + attribute_bonus['CriticalChanceBase'] = ( + critical_chance_base + mp.mpf(0.08000000009313226) * 2 + ) + return attribute_bonus + + +class Relic114(BaseRelicSetSkill): + def __init__(self, set_id: int, count: int): + super().__init__(set_id, count) + self._count = count + + async def check(self, base_attr: Dict, attribute_bonus: Dict): + ''' + 当装备者对我方目标施放终结技时,我方全体速度提高12%,持续1回合,该效果无法叠加。 + ''' + logger.info('Relic114 check success') + return True + + async def set_skill_ability(self, base_attr: Dict, attribute_bonus: Dict): + if self.pieces4 and await self.check(base_attr, attribute_bonus): + speed_added_ratio = attribute_bonus.get('SpeedAddedRatio', 0) + attribute_bonus['SpeedAddedRatio'] = speed_added_ratio + mp.mpf( + 0.12000000011175871 + ) + return attribute_bonus + + class Relic301(BaseRelicSetSkill): def __init__(self, set_id: int, count: int): super().__init__(set_id, count) @@ -334,7 +379,7 @@ class Relic304(BaseRelicSetSkill): 备者的效果命中大于等于50% ''' merged_attr = await merge_attribute(base_attr, attribute_bonus) - if merged_attr['StatusProbability'] >= mp.mpf(0.5000000004656613): + if merged_attr['StatusResistanceBase'] >= mp.mpf(0.5000000004656613): logger.info('Relic306 check success') return True return None @@ -440,6 +485,7 @@ class Relic308(BaseRelicSetSkill): logger.info('ModifyActionDelay') return attribute_bonus + class Relic309(BaseRelicSetSkill): def __init__(self, set_id: int, count: int): super().__init__(set_id, count) @@ -466,6 +512,30 @@ class Relic309(BaseRelicSetSkill): ) return attribute_bonus + +class Relic310(BaseRelicSetSkill): + def __init__(self, set_id: int, count: int): + super().__init__(set_id, count) + + async def check(self, base_attr: Dict, attribute_bonus: Dict): + ''' + 当装备者的效果抵抗大于等于30%时,我方全体暴击伤害提高10%。 + ''' + merged_attr = await merge_attribute(base_attr, attribute_bonus) + if merged_attr['StatusResistanceBase'] >= mp.mpf(0.3): + logger.info('Relic310 check success') + return True + return None + + async def set_skill_ability(self, base_attr: Dict, attribute_bonus: Dict): + if self.pieces2 and await self.check(base_attr, attribute_bonus): + critical_damage_base = attribute_bonus.get('CriticalDamageBase', 0) + attribute_bonus[ + 'CriticalDamageBase' + ] = critical_damage_base + mp.mpf(0.10000000018626451) + return attribute_bonus + + class RelicSet: HEAD: SingleRelic HAND: SingleRelic @@ -543,6 +613,10 @@ class RelicSet: cls.SetSkill.append(Relic111(set_id, count)) elif set_id == 112: cls.SetSkill.append(Relic112(set_id, count)) + elif set_id == 113: + cls.SetSkill.append(Relic113(set_id, count)) + elif set_id == 114: + cls.SetSkill.append(Relic114(set_id, count)) elif set_id == 301: cls.SetSkill.append(Relic301(set_id, count)) elif set_id == 302: @@ -561,5 +635,7 @@ class RelicSet: cls.SetSkill.append(Relic308(set_id, count)) elif set_id == 309: cls.SetSkill.append(Relic309(set_id, count)) + elif set_id == 310: + cls.SetSkill.append(Relic310(set_id, count)) else: raise Exception(f'Unknow SetId: {set_id}') diff --git a/StarRailUID/starrailuid_charinfo/effect/Role.py b/StarRailUID/starrailuid_charinfo/effect/Role.py index 962e0a6..278e13b 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Role.py +++ b/StarRailUID/starrailuid_charinfo/effect/Role.py @@ -1,12 +1,12 @@ -from gsuid_core.logger import logger from mpmath import mp +from gsuid_core.logger import logger -from ..mono.Character import Character from .Avatar.Avatar import Avatar +from .Weapon.Weapon import Weapon +from .utils import merge_attribute +from ..mono.Character import Character from .Base.model import DamageInstance from .Relic.Relic import RelicSet, SingleRelic -from .utils import merge_attribute -from .Weapon.Weapon import Weapon mp.dps = 14 @@ -115,44 +115,22 @@ class RoleInstance: raise Exception('attribute_bonus is None') for attribute in self.weapon.__dict__['weapon_attribute']: if attribute in self.attribute_bonus: - self.attribute_bonus[ - attribute - ] += self.weapon.__dict__['weapon_attribute'][attribute] + self.attribute_bonus[attribute] += self.weapon.__dict__[ + 'weapon_attribute' + ][attribute] else: - self.attribute_bonus[ - attribute - ] = self.weapon.__dict__['weapon_attribute'][attribute] + self.attribute_bonus[attribute] = self.weapon.__dict__[ + 'weapon_attribute' + ][attribute] async def cal_damage(self, skill_type): logger.info('base_attr') logger.info(self.base_attr) logger.info('attribute_bonus') logger.info(self.attribute_bonus) - # 检查武器战斗生效的buff - logger.info('检查武器战斗生效的buff') - Ultra_Use = self.avatar.Ultra_Use() - logger.info('Ultra_Use') - logger.info(Ultra_Use) - if self.attribute_bonus is None: - raise Exception('attribute_bonus is None') - self.attribute_bonus = await self.weapon.weapon_ability( - 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') - merged_attr = await merge_attribute( - self.base_attr, self.attribute_bonus - ) - - skill_info = self.avatar.Skill_Info(skill_type) - + # 技能区 + skill_info = self.avatar.Skill_Info(skill_type) if skill_type == 'Normal': skill_multiplier = self.avatar.Normal() elif skill_type == 'BPSkill': @@ -160,7 +138,10 @@ class RoleInstance: 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: + 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() @@ -172,13 +153,59 @@ class RoleInstance: skill_type = 'Normal' else: raise Exception('skill type error') - + logger.info(f'技能区总: {skill_multiplier}') - - skill_info_list = [] - #技能类型为攻击 + + # 检查武器战斗生效的buff + logger.info('检查武器战斗生效的buff') + Ultra_Use = self.avatar.Ultra_Use() + logger.info('Ultra_Use') + logger.info(Ultra_Use) + if self.attribute_bonus is None: + raise Exception('attribute_bonus is None') + self.attribute_bonus = await self.weapon.weapon_ability( + Ultra_Use, self.base_attr, self.attribute_bonus + ) + logger.info(self.attribute_bonus) + + # 检查是否有对某一个技能的属性加成 + logger.info('检查是否有对某一个技能的属性加成') + for attr in self.attribute_bonus: + # 攻击加成 + if attr.__contains__('AttackAddedRatio'): + attr_name = attr.split('AttackAddedRatio')[0] + if attr_name == skill_type: + attack_added_ratio = self.attribute_bonus.get( + 'AttackAddedRatio', 0 + ) + self.attribute_bonus[ + 'AttackAddedRatio' + ] = attack_added_ratio + mp.mpf(self.attribute_bonus[attr]) + # 效果命中加成 + if attr.__contains__('StatusProbabilityBase'): + attr_name = attr.split('StatusProbabilityBase')[0] + if attr_name == skill_type: + status_probability = self.attribute_bonus.get( + 'StatusProbabilityBase', 0 + ) + self.attribute_bonus[ + 'StatusProbabilityBase' + ] = status_probability + mp.mpf(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 + ) + + # 技能类型为攻击 if skill_info[0] == 'attack': - skill_multiplier = skill_multiplier/skill_info[2] + skill_multiplier = skill_multiplier / skill_info[2] logger.info(f'技能区单段: {skill_multiplier}') attack = merged_attr['attack'] logger.info(f'攻击力: {attack}') @@ -195,11 +222,13 @@ class RoleInstance: enemy_status_resistance = merged_attr[attr] resistance_area = 1 - (0 - enemy_status_resistance) if self.raw_data.avatar.id_ == 1213: - if skill_info[2] == 7: + if skill_info[2] == 7: Normal_Penetration = merged_attr.get( 'Normal_ImaginaryResistancePenetration', 0 ) - resistance_area = resistance_area - (0 - Normal_Penetration) + resistance_area = resistance_area - ( + 0 - Normal_Penetration + ) logger.info(f'抗性区: {resistance_area}') # 防御区 @@ -211,7 +240,9 @@ class RoleInstance: ignore_defence = 1 - merged_attr[attr] break logger.info(f'ignore_defence {ignore_defence}') - enemy_defence = (self.avatar.avatar_level * 10 + 200) * ignore_defence + enemy_defence = ( + self.avatar.avatar_level * 10 + 200 + ) * ignore_defence defence_multiplier = (self.avatar.avatar_level * 10 + 200) / ( self.avatar.avatar_level * 10 + 200 + enemy_defence ) @@ -236,7 +267,10 @@ class RoleInstance: for attr in merged_attr: if attr.__contains__('AddedRatio'): attr_name = attr.split('AddedRatio')[0] - if attr_name == self.avatar.avatar_element or attr_name == 'AllDamage': + if ( + attr_name == self.avatar.avatar_element + or attr_name == 'AllDamage' + ): logger.info( f'{attr} 对 {self.avatar.avatar_element} ' f'有 {merged_attr[attr]} 伤害加成' @@ -246,7 +280,7 @@ class RoleInstance: injury_area += merged_attr[attr] injury_area += 1 logger.info(f'增伤区: {injury_area}') - + # 易伤区 logger.info('检查是否有易伤加成') logger.info(f'{merged_attr}') @@ -263,7 +297,7 @@ class RoleInstance: damage_ratio += merged_attr[attr] damage_ratio = damage_ratio + 1 logger.info(f'易伤: {damage_ratio}') - + # 爆伤区 logger.info('检查是否有爆伤加成') logger.info(f'{merged_attr}') @@ -280,12 +314,12 @@ class RoleInstance: critical_damage_base += merged_attr[attr] critical_damage = critical_damage_base + 1 logger.info(f'暴伤: {critical_damage}') - - # 暴击区 + + # 暴击区 critical_chance_base = min(1, merged_attr['CriticalChanceBase']) logger.info(f'暴击: {critical_chance_base}') - - #期望伤害 + + # 期望伤害 qiwang_damage = (critical_chance_base * critical_damage_base) + 1 logger.info(f'暴击期望: {qiwang_damage}') damage_cd_z = 0 @@ -294,7 +328,7 @@ class RoleInstance: attack_tz = 0 injury_add = 0 critical_damage_add = 0 - for i in range(1, skill_info[2]+1): + for i in range(1, skill_info[2] + 1): logger.info(f'段数: {i}') injury_add = 0 critical_damage_add = 0 @@ -303,18 +337,17 @@ class RoleInstance: critical_damage_add = self.avatar.BPSkill() normal_buff = merged_attr.get('Normal_buff', 0) if i >= 4: - normal_buff = min(4, int(normal_buff + (i-3))) + normal_buff = min(4, int(normal_buff + (i - 3))) if normal_buff >= 1: critical_damage_add = normal_buff * critical_damage_add atk_buff = merged_attr.get('Atk_buff', 0) - atk_buff = min(10, int((i - 1)*(atk_buff + 1))) + atk_buff = min(10, int((i - 1) * (atk_buff + 1))) injury_add = atk_buff * injury_add qiwang_damage = ( - (critical_chance_base * - (critical_damage_base + critical_damage_add)) - + 1 - ) - + critical_chance_base + * (critical_damage_base + critical_damage_add) + ) + 1 + damage_cd = ( attack * skill_multiplier @@ -337,11 +370,14 @@ class RoleInstance: * qiwang_damage ) damage_qw_z += damage_qw - - attr_value_tz: float= self.base_attr.get('attack', 0) - attack_tz = attr_value_tz + attr_value_tz * ( - 1 + self.attribute_bonus['AttackAddedRatio'] + 2.144 - ) + self.attribute_bonus['AttackDelta'] + + attr_value_tz: float = self.base_attr.get('attack', 0) + attack_tz = ( + attr_value_tz + + attr_value_tz + * (1 + self.attribute_bonus['AttackAddedRatio'] + 2.144) + + self.attribute_bonus['AttackDelta'] + ) injury_add_tz = 0 if self.avatar.avatar_element == 'Imaginary': injury_add_tz = 0.12 @@ -356,12 +392,9 @@ class RoleInstance: * (critical_damage + critical_damage_add + 1.594) * 10 ) - + damage_tz_z += damage_tz - logger.info( - f'{skill_info[1]}第{i}段 暴击伤害: {damage_cd} 期望伤害{damage_qw}' - ) - + 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 f67b452..6c69554 100644 --- a/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py +++ b/StarRailUID/starrailuid_charinfo/effect/Weapon/Weapon.py @@ -1,11 +1,11 @@ import json -from pathlib import Path from typing import Dict +from pathlib import Path from mpmath import mp -from ..Base.model import DamageInstanceWeapon from ..Base.WeaponBase import BaseWeapon +from ..Base.model import DamageInstanceWeapon path = Path(__file__).parent.parent with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f: @@ -17,6 +17,7 @@ mp.dps = 14 class Arrows(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -24,7 +25,9 @@ class Arrows(BaseWeapon): # 装备者消灭敌方目标 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): critical_chance_base = attribute_bonus.get('CriticalChance', 0) attribute_bonus['CriticalChance'] = critical_chance_base + mp.mpf( @@ -37,6 +40,7 @@ class Arrows(BaseWeapon): class ReturntoDarkness(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -44,7 +48,9 @@ class ReturntoDarkness(BaseWeapon): # 装备者消灭敌方目标 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): pass return attribute_bonus @@ -52,6 +58,7 @@ class ReturntoDarkness(BaseWeapon): class Swordplay(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -59,7 +66,9 @@ class Swordplay(BaseWeapon): # 装备者消灭敌方目标 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): all_damage_added_ratio = attribute_bonus.get( 'AllDamageAddedRatio', 0 @@ -76,6 +85,7 @@ class Swordplay(BaseWeapon): class DartingArrow(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -83,7 +93,9 @@ class DartingArrow(BaseWeapon): # 装备者消灭敌方目标 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( @@ -96,6 +108,7 @@ class DartingArrow(BaseWeapon): class Adversarial(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -103,7 +116,9 @@ class Adversarial(BaseWeapon): # 装备者消灭敌方目标 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): speed_added_ratio = attribute_bonus.get('SpeedAddedRatio', 0) attribute_bonus['SpeedAddedRatio'] = speed_added_ratio + mp.mpf( @@ -117,6 +132,7 @@ class Adversarial(BaseWeapon): class SubscribeforMore(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -124,7 +140,9 @@ class SubscribeforMore(BaseWeapon): # 装备者的当前能量值等于其能量上限 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): normal_dmg_add = attribute_bonus.get('NormalDmgAdd', 0) attribute_bonus['NormalDmgAdd'] = normal_dmg_add + ( @@ -150,6 +168,7 @@ class SubscribeforMore(BaseWeapon): class RiverFlowsinSpring(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -158,7 +177,9 @@ class RiverFlowsinSpring(BaseWeapon): # 当装备者受到伤害后该效果失效,下个回合结束时该效果恢复。 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): speed_added_ratio = attribute_bonus.get('SpeedAddedRatio', 0) attribute_bonus['SpeedAddedRatio'] = speed_added_ratio + mp.mpf( @@ -182,6 +203,7 @@ class RiverFlowsinSpring(BaseWeapon): class SleepLiketheDead(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -190,7 +212,9 @@ class SleepLiketheDead(BaseWeapon): # 该效果每3回合可以触发1次。 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): return attribute_bonus return None @@ -198,6 +222,7 @@ class SleepLiketheDead(BaseWeapon): class OnlySilenceRemains(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -205,7 +230,9 @@ class OnlySilenceRemains(BaseWeapon): # 当场上的敌方目标数量小于等于2时 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0) attribute_bonus[ @@ -218,16 +245,20 @@ class OnlySilenceRemains(BaseWeapon): return attribute_bonus return None -#拂晓之前 + +# 拂晓之前 class BeforeDawn(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) async def check(self): pass - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): bp_skill_dmg_add = attribute_bonus.get('BPSkillDmgAdd', 0) attribute_bonus['BPSkillDmgAdd'] = bp_skill_dmg_add + ( mp.mpf( @@ -248,20 +279,23 @@ class BeforeDawn(BaseWeapon): ) return attribute_bonus + class IntheNight(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) async def check(self): pass - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): char_speed = ( - (mp.mpf(base_attr.get('speed', 0)) - + mp.mpf(attribute_bonus.get('SpeedDelta', 0))) - * (mp.mpf(attribute_bonus.get('SpeedAddedRatio', 0))+1) - ) + mp.mpf(base_attr.get('speed', 0)) + + mp.mpf(attribute_bonus.get('SpeedDelta', 0)) + ) * (mp.mpf(attribute_bonus.get('SpeedAddedRatio', 0)) + 1) print(char_speed) count_ = min(6, int(mp.floor((char_speed - 100) / 10))) normal_dmg_add = attribute_bonus.get('NormalDmgAdd', 0) @@ -296,6 +330,7 @@ class IntheNight(BaseWeapon): class CruisingintheStellarSea(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) @@ -304,7 +339,9 @@ class CruisingintheStellarSea(BaseWeapon): # 装备者消灭敌方目标 return True - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0) attribute_bonus[ @@ -323,48 +360,58 @@ class CruisingintheStellarSea(BaseWeapon): ) return attribute_bonus + class SeriousnessofBreakfast(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者造成伤害提高12% - #每消灭1个敌方目标,装备者的攻击力提高4%,该效果最多叠加3层。 + # 使装备者造成伤害提高12% + # 每消灭1个敌方目标,装备者的攻击力提高4%,该效果最多叠加3层。 return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): - all_damage_added_ratio = attribute_bonus.get( - 'AllDamageAddedRatio', 0 - ) + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + all_damage_added_ratio = attribute_bonus.get('AllDamageAddedRatio', 0) attribute_bonus[ 'AllDamageAddedRatio' ] = all_damage_added_ratio + mp.mpf( weapon_effect['21027']['Param']['AllDamageAddedRatio'][ self.weapon_rank - 1 ] - ) + ) if await self.check(): attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) - attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - weapon_effect['21027']['Param']['AttackAddedRatio'][ - self.weapon_rank - 1 - ] - ) * 3 + attribute_bonus['AttackAddedRatio'] = ( + attack_added_ratio + + mp.mpf( + weapon_effect['21027']['Param']['AttackAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * 3 + ) return attribute_bonus -#银河铁道之夜 + +# 银河铁道之夜 class NightontheMilkyWay(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #场上每有1个敌方目标,使装备者的攻击力提高9% - #敌方目标的弱点被击破时,装备者造成的伤害提高30% + # 场上每有1个敌方目标,使装备者的攻击力提高9% + # 敌方目标的弱点被击破时,装备者造成的伤害提高30% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( @@ -385,67 +432,81 @@ class NightontheMilkyWay(BaseWeapon): return attribute_bonus return None -#今日亦是和平的一日 + +# 今日亦是和平的一日 class TodayIsAnotherPeacefulDay(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #根据装备者的能量上限,提高装备者造成的伤害:每点能量提高0.2%,最多计入160点 + # 根据装备者的能量上限,提高装备者造成的伤害:每点能量提高0.2%,最多计入160点 pass - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): - all_damage_added_ratio = attribute_bonus.get( - 'AllDamageAddedRatio', 0 + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + all_damage_added_ratio = attribute_bonus.get('AllDamageAddedRatio', 0) + attribute_bonus['AllDamageAddedRatio'] = ( + all_damage_added_ratio + + mp.mpf( + weapon_effect['21034']['Param']['AllDamageAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * Ultra_Use ) - attribute_bonus[ - 'AllDamageAddedRatio' - ] = all_damage_added_ratio + mp.mpf( - weapon_effect['21034']['Param']['AllDamageAddedRatio'][ - self.weapon_rank - 1 - ] - ) * Ultra_Use return attribute_bonus -#天才们的休憩 + +# 天才们的休憩 class GeniusesRepose(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者攻击力提高16% - #当装备者消灭敌方目标后,暴击伤害提高24% + # 使装备者攻击力提高16% + # 当装备者消灭敌方目标后,暴击伤害提高24% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): # attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) # attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - # weapon_effect['21020']['Param']['AttackAddedRatio'][ - # self.weapon_rank - 1 - # ] + # weapon_effect['21020']['Param']['AttackAddedRatio'][ + # self.weapon_rank - 1 + # ] # ) if await self.check(): - critical_chance_base = attribute_bonus.get('CriticalDamageBase', 0) + critical_chance_base = attribute_bonus.get('CriticalDamageBase', 0) attribute_bonus['CriticalDamageBase'] = critical_chance_base + ( mp.mpf( - weapon_effect['21020']['Param']['CriticalDamageBase'][self.weapon_rank - 1] + weapon_effect['21020']['Param']['CriticalDamageBase'][ + self.weapon_rank - 1 + ] ) ) return attribute_bonus -#别让世界静下来 + +# 别让世界静下来 class MaketheWorldClamor(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #终结技造成的伤害提高32%。 + # 终结技造成的伤害提高32%。 pass - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): ultra_dmg_add = attribute_bonus.get('UltraDmgAdd', 0) attribute_bonus['UltraDmgAdd'] = ultra_dmg_add + ( mp.mpf( @@ -454,40 +515,50 @@ class MaketheWorldClamor(BaseWeapon): ) return attribute_bonus -#「我」的诞生 + +# 「我」的诞生 class TheBirthoftheSelf(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #追加攻击造成的伤害提高30% - #若该敌方目标当前生命值百分比小于等于50%,则追加攻击造成的伤害额外提高30%。 + # 追加攻击造成的伤害提高30% + # 若该敌方目标当前生命值百分比小于等于50%,则追加攻击造成的伤害额外提高30%。 return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): talent_dmg_add = attribute_bonus.get('TalentDmgAdd', 0) attribute_bonus['TalentDmgAdd'] = talent_dmg_add + ( mp.mpf( - weapon_effect['21006']['Param']['t_dmg'][self.weapon_rank - 1] + weapon_effect['21006']['Param']['t_dmg'][ + self.weapon_rank - 1 + ] ) ) return attribute_bonus return None - -#秘密誓心 + + +# 秘密誓心 class ASecretVow(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #造成的伤害提高20% - #对当前生命值百分比大于等于装备者自身当前生命值百分比的敌方目标造成的伤害额外提高20% + # 造成的伤害提高20% + # 对当前生命值百分比大于等于装备者自身当前生命值百分比的敌方目标造成的伤害额外提高20% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): all_damage_added_ratio = attribute_bonus.get( 'AllDamageAddedRatio', 0 @@ -502,54 +573,66 @@ class ASecretVow(BaseWeapon): return attribute_bonus return None -#比阳光更明亮的 + +# 比阳光更明亮的 class BrighterThantheSun(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者的暴击率提高18% - #当装备者施放普攻时,获得1层【龙吟】,持续2回合。每层【龙吟】使装备者的攻击力提高18%,【龙吟】最多叠加2层 + # 使装备者的暴击率提高18% + # 当装备者施放普攻时,获得1层【龙吟】,持续2回合。每层【龙吟】使装备者的攻击力提高18%,【龙吟】最多叠加2层 return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) - attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - weapon_effect['23015']['Param']['AttackAddedRatio'][ - self.weapon_rank - 1 - ] - ) * 2 + attribute_bonus['AttackAddedRatio'] = ( + attack_added_ratio + + mp.mpf( + weapon_effect['23015']['Param']['AttackAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * 2 + ) return attribute_bonus -#到不了的彼岸 + +# 到不了的彼岸 class TheUnreachableSide(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #装备者的暴击率提高30%,生命上限提高30% - #当装备者受到攻击或装备者消耗自身生命值后,造成的伤害提高40% + # 装备者的暴击率提高30%,生命上限提高30% + # 当装备者受到攻击或装备者消耗自身生命值后,造成的伤害提高40% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): # critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0) # attribute_bonus[ - # 'CriticalChanceBase' + # 'CriticalChanceBase' # ] = critical_chance_base + mp.mpf( - # weapon_effect['23009']['Param']['CriticalChance'][ - # self.weapon_rank - 1 - # ] + # weapon_effect['23009']['Param']['CriticalChance'][ + # self.weapon_rank - 1 + # ] # ) # hp_added_ratio = attribute_bonus.get('HPAddedRatio', 0) # attribute_bonus[ - # 'HPAddedRatio' + # 'HPAddedRatio' # ] = hp_added_ratio + mp.mpf( - # weapon_effect['23009']['Param']['HPAddedRatio'][ - # self.weapon_rank - 1 - # ] + # weapon_effect['23009']['Param']['HPAddedRatio'][ + # self.weapon_rank - 1 + # ] # ) if await self.check(): all_damage_added_ratio = attribute_bonus.get( @@ -564,23 +647,27 @@ class TheUnreachableSide(BaseWeapon): ) return attribute_bonus -#无可取代的东西 + +# 无可取代的东西 class SomethingIrreplaceable(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者的攻击力提高24% - #当装备者消灭敌方目标或受到攻击后,造成的伤害提高24% + # 使装备者的攻击力提高24% + # 当装备者消灭敌方目标或受到攻击后,造成的伤害提高24% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): # attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) # attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - # weapon_effect['23002']['Param']['AttackAddedRatio'][ - # self.weapon_rank - 1 - # ] + # weapon_effect['23002']['Param']['AttackAddedRatio'][ + # self.weapon_rank - 1 + # ] # ) if await self.check(): all_damage_added_ratio = attribute_bonus.get( @@ -595,25 +682,33 @@ class SomethingIrreplaceable(BaseWeapon): ) return attribute_bonus -#记一位星神的陨落 + +# 记一位星神的陨落 class OntheFallofanAeon(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #当装备者施放攻击时,使装备者本场战斗中的攻击力提高8%,该效果最多叠加4层 - #当装备者击破敌方目标弱点后,造成的伤害提高12% + # 当装备者施放攻击时,使装备者本场战斗中的攻击力提高8%,该效果最多叠加4层 + # 当装备者击破敌方目标弱点后,造成的伤害提高12% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) - attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - weapon_effect['24000']['Param']['AttackAddedRatio'][ - self.weapon_rank - 1 - ] - ) * 4 + attribute_bonus['AttackAddedRatio'] = ( + attack_added_ratio + + mp.mpf( + weapon_effect['24000']['Param']['AttackAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * 4 + ) all_damage_added_ratio = attribute_bonus.get( 'AllDamageAddedRatio', 0 ) @@ -626,42 +721,50 @@ class OntheFallofanAeon(BaseWeapon): ) return attribute_bonus -#无处可逃 + +# 无处可逃 class NowheretoRun(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者的攻击力提高24% + # 使装备者的攻击力提高24% pass - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): # 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 - # ] + # weapon_effect['21033']['Param']['AttackAddedRatio'][ + # self.weapon_rank - 1 + # ] # ) return attribute_bonus -#汪!散步时间! + +# 汪!散步时间! class WoofWalkTime(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者的攻击力提高10% - #对处于灼烧或裂伤状态的敌方目标造成的伤害提高16% + # 使装备者的攻击力提高10% + # 对处于灼烧或裂伤状态的敌方目标造成的伤害提高16% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): # attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) # attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - # weapon_effect['21026']['Param']['AttackAddedRatio'][ - # self.weapon_rank - 1 - # ] + # weapon_effect['21026']['Param']['AttackAddedRatio'][ + # self.weapon_rank - 1 + # ] # ) if await self.check(): all_damage_added_ratio = attribute_bonus.get( @@ -676,23 +779,27 @@ class WoofWalkTime(BaseWeapon): ) return attribute_bonus -#在蓝天下 + +# 在蓝天下 class UndertheBlueSky(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #使装备者攻击力提高16% - #当装备者消灭敌方目标后,暴击率提高12% + # 使装备者攻击力提高16% + # 当装备者消灭敌方目标后,暴击率提高12% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): # attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) # attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - # weapon_effect['21019']['Param']['AttackAddedRatio'][ - # self.weapon_rank - 1 - # ] + # weapon_effect['21019']['Param']['AttackAddedRatio'][ + # self.weapon_rank - 1 + # ] # ) if await self.check(): critical_chance_base = attribute_bonus.get('CriticalChanceBase', 0) @@ -705,43 +812,53 @@ class UndertheBlueSky(BaseWeapon): ) return attribute_bonus -#鼹鼠党欢迎你 + +# 鼹鼠党欢迎你 class TheMolesWelcomeYou(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #装备者施放普攻、战技或终结技攻击敌方目标后,分别获取一层【淘气值】。每层使装备者的攻击力提高12%。 + # 装备者施放普攻、战技或终结技攻击敌方目标后,分别获取一层【淘气值】。每层使装备者的攻击力提高12%。 return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): attack_added_ratio = attribute_bonus.get('AttackAddedRatio', 0) - attribute_bonus['AttackAddedRatio'] = attack_added_ratio + mp.mpf( - weapon_effect['21005']['Param']['AttackAddedRatio'][ - self.weapon_rank - 1 - ] - ) * 3 + attribute_bonus['AttackAddedRatio'] = ( + attack_added_ratio + + mp.mpf( + weapon_effect['21005']['Param']['AttackAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * 3 + ) return attribute_bonus -#雨一直下 + +# 雨一直下 class IncessantRain(BaseWeapon): weapon_base_attributes: Dict + def __init__(self, weapon: DamageInstanceWeapon): super().__init__(weapon) - + async def check(self): - #当装备者对同时处于大于等于3个负面效果的敌方目标造成伤害时,暴击率提高12% - #持有【以太编码】的目标受到的伤害提高12% + # 当装备者对同时处于大于等于3个负面效果的敌方目标造成伤害时,暴击率提高12% + # 持有【以太编码】的目标受到的伤害提高12% return True - - async def weapon_ability(self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict): + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): if await self.check(): damage_ratio = attribute_bonus.get('DmgRatio', 0) - attribute_bonus[ - 'DmgRatio' - ] = damage_ratio + mp.mpf( + attribute_bonus['DmgRatio'] = damage_ratio + mp.mpf( weapon_effect['23007']['Param']['DmgRatio'][ self.weapon_rank - 1 ] @@ -756,64 +873,248 @@ class IncessantRain(BaseWeapon): ) return attribute_bonus -# class HuntWeapon: -# def __new__(cls, weapon: DamageInstanceWeapon): -# if weapon.id_ == 23007: -# return IncessantRain(weapon) -# if weapon.id_ == 21005: -# return TheMolesWelcomeYou(weapon) -# if weapon.id_ == 21019: -# return UndertheBlueSky(weapon) -# if weapon.id_ == 21026: -# return WoofWalkTime(weapon) -# if weapon.id_ == 21033: -# return NowheretoRun(weapon) -# if weapon.id_ == 24000: -# return OntheFallofanAeon(weapon) -# if weapon.id_ == 23002: -# return SomethingIrreplaceable(weapon) -# if weapon.id_ == 23009: -# return TheUnreachableSide(weapon) -# if weapon.id_ == 23015: -# return BrighterThantheSun(weapon) -# if weapon.id_ == 21012: -# return ASecretVow(weapon) -# if weapon.id_ == 21006: -# return TheBirthoftheSelf(weapon) -# if weapon.id_ == 21013: -# return MaketheWorldClamor(weapon) -# if weapon.id_ == 21020: -# return GeniusesRepose(weapon) -# if weapon.id_ == 21027: -# return SeriousnessofBreakfast(weapon) -# if weapon.id_ == 21034: -# return TodayIsAnotherPeacefulDay(weapon) -# if weapon.id_ == 23000: -# return NightontheMilkyWay(weapon) -# if weapon.id_ == 23010: -# return BeforeDawn(weapon) -# if weapon.id_ == 24001: -# return CruisingintheStellarSea(weapon) -# if weapon.id_ == 23001: -# return IntheNight(weapon) -# if weapon.id_ == 21003: -# return OnlySilenceRemains(weapon) -# if weapon.id_ == 21024: -# return RiverFlowsinSpring(weapon) -# if weapon.id_ == 20014: -# return Adversarial(weapon) -# if weapon.id_ == 20007: -# return DartingArrow(weapon) -# if weapon.id_ == 21010: -# return Swordplay(weapon) -# if weapon.id_ == 21031: -# return ReturntoDarkness(weapon) -# if weapon.id_ == 20000: -# return Arrows(weapon) -# raise ValueError(f'未知武器id: {weapon.id_}') -# async def check_ability(self): -# pass +# 只需等待 +class PatienceIsAllYouNeed(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 使装备者造成的伤害提高24% + # 装备者每次施放攻击后,速度提高4.8%,最多叠加3层。 + return True + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + if await self.check(): + all_damage_added_ratio = attribute_bonus.get( + 'AllDamageAddedRatio', 0 + ) + attribute_bonus[ + 'AllDamageAddedRatio' + ] = all_damage_added_ratio + mp.mpf( + weapon_effect['23006']['Param']['AllDamageAddedRatio'][ + self.weapon_rank - 1 + ] + ) + + speed_added_ratio = attribute_bonus.get('SpeedAddedRatio', 0) + attribute_bonus['SpeedAddedRatio'] = ( + speed_added_ratio + + mp.mpf( + weapon_effect['23006']['Param']['SpeedAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * 3 + ) + return attribute_bonus + + +# 以世界之名 +class IntheNameoftheWorld(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 使装备者对陷入负面效果的敌方目标造成的伤害提高24% + # 当装备者施放战技时,装备者此次攻击的效果命中提高18% + # 当装备者施放战技时,装备者此次攻击的攻击力提高24%。 + return True + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + if await self.check(): + all_damage_added_ratio = attribute_bonus.get( + 'AllDamageAddedRatio', 0 + ) + attribute_bonus[ + 'AllDamageAddedRatio' + ] = all_damage_added_ratio + mp.mpf( + weapon_effect['23004']['Param']['AllDamageAddedRatio'][ + self.weapon_rank - 1 + ] + ) + + a2_status_probability = attribute_bonus.get( + 'BPSkillStatusProbabilityBase', 0 + ) + attribute_bonus[ + 'BPSkillStatusProbabilityBase' + ] = a2_status_probability + mp.mpf( + weapon_effect['23004']['Param']['A2_StatusProbability'][ + self.weapon_rank - 1 + ] + ) + + a2_attack_added_ratio = attribute_bonus.get( + 'BPSkillAttackAddedRatio', 0 + ) + attribute_bonus[ + 'BPSkillAttackAddedRatio' + ] = a2_attack_added_ratio + mp.mpf( + weapon_effect['23004']['Param']['A2_AttackAddedRatio'][ + self.weapon_rank - 1 + ] + ) + return attribute_bonus + + +# 孤独的疗愈 +class SolitaryHealing(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 使装备者的击破特攻提高20% + # 装备者施放终结技时,使装备者造成的持续伤害提高24% + pass + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + return attribute_bonus + + +# 新手任务开始前 +class BeforetheTutorialMissionStarts(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 当装备者攻击防御力被降低的敌方目标后,恢复4点能量。 + pass + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + return attribute_bonus + + +# 后会有期 +class WeWillMeetAgain(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 装备者施放普攻或战技后,对随机1个受到攻击的敌方目标造成等同于自身48%攻击力的附加伤害。 + pass + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + return attribute_bonus + + +# 延长记号 +class Fermata(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 对处于触电或风化状态的敌方目标造成的伤害提高16% + return True + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + if await self.check(): + all_damage_added_ratio = attribute_bonus.get( + 'AllDamageAddedRatio', 0 + ) + attribute_bonus[ + 'AllDamageAddedRatio' + ] = all_damage_added_ratio + mp.mpf( + weapon_effect['21022']['Param']['AllDamageAddedRatio'][ + self.weapon_rank - 1 + ] + ) + return attribute_bonus + + +# 决心如汗珠般闪耀 +class ResolutionShinesAsPearlsofSweat(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 对处于触电或风化状态的敌方目标造成的伤害提高16% + return True + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + if await self.check(): + ignore_defence = attribute_bonus.get('ignore_defence', 0) + attribute_bonus['ignore_defence'] = ignore_defence + mp.mpf( + weapon_effect['21015']['Param']['ignore_defence'][ + self.weapon_rank - 1 + ] + ) + return attribute_bonus + + +# 猎物的视线 +class EyesofthePrey(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 造成的持续伤害提高24%。 + pass + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + return attribute_bonus + + +# 晚安与睡颜 +class GoodNightandSleepWell(BaseWeapon): + weapon_base_attributes: Dict + + def __init__(self, weapon: DamageInstanceWeapon): + super().__init__(weapon) + + async def check(self): + # 敌方目标每承受1个负面效果,装备者对其造成的伤害提高12%,最多叠加3层 + return True + + async def weapon_ability( + self, Ultra_Use: int, base_attr: Dict, attribute_bonus: Dict + ): + if await self.check(): + all_damage_added_ratio = attribute_bonus.get( + 'AllDamageAddedRatio', 0 + ) + attribute_bonus['AllDamageAddedRatio'] = ( + all_damage_added_ratio + + mp.mpf( + weapon_effect['21001']['Param']['AllDamageAddedRatio'][ + self.weapon_rank - 1 + ] + ) + * 3 + ) + return attribute_bonus class Weapon: @@ -848,7 +1149,34 @@ class Weapon: 21010, 21031, 20000, + 23006, + 23004, + 24003, + 22000, + 21029, + 21022, + 21015, + 21008, + 21001, ]: + if weapon.id_ == 21001: + return GoodNightandSleepWell(weapon) + if weapon.id_ == 21008: + return EyesofthePrey(weapon) + if weapon.id_ == 21015: + return ResolutionShinesAsPearlsofSweat(weapon) + if weapon.id_ == 21022: + return Fermata(weapon) + if weapon.id_ == 21029: + return WeWillMeetAgain(weapon) + if weapon.id_ == 22000: + return BeforetheTutorialMissionStarts(weapon) + if weapon.id_ == 24003: + return SolitaryHealing(weapon) + if weapon.id_ == 23004: + return IntheNameoftheWorld(weapon) + if weapon.id_ == 23006: + return PatienceIsAllYouNeed(weapon) if weapon.id_ == 23007: return IncessantRain(weapon) if weapon.id_ == 21005: diff --git a/StarRailUID/starrailuid_charinfo/effect/utils.py b/StarRailUID/starrailuid_charinfo/effect/utils.py index 249fac8..9b22e2f 100644 --- a/StarRailUID/starrailuid_charinfo/effect/utils.py +++ b/StarRailUID/starrailuid_charinfo/effect/utils.py @@ -4,6 +4,7 @@ from typing import Dict async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict: # hp attack defence need base_value and add_value merged_attr = {} + attr_list = ['attack', 'defence', 'hp', 'speed'] for attribute in attribute_bonus: if ( attribute.__contains__('Attack') @@ -13,14 +14,16 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict: ): if attribute.__contains__('Delta'): attr = attribute.split('Delta')[0].lower() - attr_value = merged_attr.get(attr, 0) - merged_attr[attr] = attr_value + attribute_bonus[attribute] + if attr in attr_list: + attr_value = merged_attr.get(attr, 0) + merged_attr[attr] = attr_value + attribute_bonus[attribute] elif attribute.__contains__('AddedRatio'): attr = attribute.split('AddedRatio')[0].lower() - attr_value = merged_attr.get(attr, 0) - merged_attr[attr] = attr_value + base_attr[attr] * ( - 1 + attribute_bonus[attribute] - ) + if attr in attr_list: + attr_value = merged_attr.get(attr, 0) + merged_attr[attr] = attr_value + base_attr[attr] * ( + 1 + attribute_bonus[attribute] + ) else: raise Exception(f'attribute error {attribute}') elif attribute.__contains__('Base'): @@ -49,5 +52,5 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict: attr_value = base_attr.get(attribute, 0) merged_attr[attribute] = attr_value + attribute_bonus[attribute] else: - raise Exception(f'attribute error {attribute}') + continue return merged_attr diff --git a/StarRailUID/starrailuid_charinfo/mono/Character.py b/StarRailUID/starrailuid_charinfo/mono/Character.py index 3d1bde0..3f27fd2 100644 --- a/StarRailUID/starrailuid_charinfo/mono/Character.py +++ b/StarRailUID/starrailuid_charinfo/mono/Character.py @@ -1,11 +1,11 @@ import json -from collections import Counter from typing import Dict +from collections import Counter -from loguru import logger from mpmath import mp +from loguru import logger -from ...utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty, RelicSetSkill +from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty mp.dps = 14 diff --git a/StarRailUID/starrailuid_charinfo/to_card.py b/StarRailUID/starrailuid_charinfo/to_card.py index dd3ab23..d5baa87 100644 --- a/StarRailUID/starrailuid_charinfo/to_card.py +++ b/StarRailUID/starrailuid_charinfo/to_card.py @@ -4,13 +4,13 @@ from typing import List, Union from PIL import Image, ImageDraw -from ..utils.fonts.first_world import fw_font_28 -from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58 -from ..utils.image.convert import convert_img -from ..utils.map.name_covert import avatar_id_to_char_star -from ..utils.map.SR_MAP_PATH import avatarId2Name -from ..utils.resource.RESOURCE_PATH import CHAR_ICON_PATH, CHAR_PREVIEW_PATH from .to_data import api_to_dict +from ..utils.image.convert import convert_img +from ..utils.fonts.first_world import fw_font_28 +from ..utils.map.SR_MAP_PATH import avatarId2Name +from ..utils.map.name_covert import avatar_id_to_char_star +from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_58 +from ..utils.resource.RESOURCE_PATH import CHAR_ICON_PATH, CHAR_PREVIEW_PATH half_color = (255, 255, 255, 120) first_color = (29, 29, 29) @@ -39,9 +39,7 @@ async def api_to_card(uid: str) -> Union[str, bytes]: return await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1) -async def draw_enka_card( - uid: str, char_list: List, showfrom: int = 0 -): +async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0): char_data_list = [] if 1102 in char_list: char_list.remove(1102) diff --git a/StarRailUID/starrailuid_charinfo/to_data.py b/StarRailUID/starrailuid_charinfo/to_data.py index 5278935..0ef2513 100644 --- a/StarRailUID/starrailuid_charinfo/to_data.py +++ b/StarRailUID/starrailuid_charinfo/to_data.py @@ -1,36 +1,36 @@ import json from pathlib import Path -from typing import List, Optional, Union +from typing import List, Union, Optional -from httpx import ReadTimeout from mpmath import mp +from httpx import ReadTimeout +from ..utils.error_reply import UID_HINT from ..sruid_utils.api.mihomo import MihomoData from ..sruid_utils.api.mihomo.models import Avatar +from ..utils.resource.RESOURCE_PATH import PLAYER_PATH from ..sruid_utils.api.mihomo.requests import get_char_card_info -from ..utils.error_reply import UID_HINT + +# from gsuid_core.utils.api.minigg.request import get_weapon_info +from .cal_value import cal_relic_sub_affix, cal_relic_main_affix from ..utils.excel.read_excel import AvatarPromotion, EquipmentPromotion from ..utils.map.SR_MAP_PATH import ( - EquipmentID2Name, - EquipmentID2Rarity, + SetId2Name, ItemId2Name, Property2Name, RelicId2SetId, - SetId2Name, - avatarId2DamageType, - avatarId2EnName, + EquipmentID2Name, + EquipmentID2Rarity, + rankId2Name, + skillId2Name, avatarId2Name, + skillId2Effect, + avatarId2EnName, avatarId2Rarity, characterSkillTree, - rankId2Name, skillId2AttackType, - skillId2Effect, - skillId2Name, + avatarId2DamageType, ) -from ..utils.resource.RESOURCE_PATH import PLAYER_PATH - -# from gsuid_core.utils.api.minigg.request import get_weapon_info -from .cal_value import cal_relic_main_affix, cal_relic_sub_affix mp.dps = 14 @@ -65,9 +65,7 @@ async def api_to_dict( PlayerDetailInfo = sr_data['detailInfo'] path = PLAYER_PATH / str(sr_uid) path.mkdir(parents=True, exist_ok=True) - with Path.open( - path / f'{sr_uid!s}.json', 'w', encoding='UTF-8' - ) as file: + with Path.open(path / f'{sr_uid!s}.json', 'w', encoding='UTF-8') as file: json.dump(PlayerDetailInfo, file, ensure_ascii=False) with Path.open(path / 'rawData.json', 'w', encoding='UTF-8') as file: json.dump(sr_data, file, ensure_ascii=False) @@ -334,9 +332,7 @@ async def get_data(char: Avatar, sr_data: MihomoData, sr_uid: str): char_data['equipmentInfo'] = equipment_info - with Path.open( - path / f'{avatarName}.json', 'w', encoding='UTF-8' - ) as file: + with Path.open(path / f'{avatarName}.json', 'w', encoding='UTF-8') as file: json.dump(char_data, file, ensure_ascii=False) return char_data, avatarName diff --git a/StarRailUID/starrailuid_gachalog/__init__.py b/StarRailUID/starrailuid_gachalog/__init__.py index 9e9f099..2c126c1 100644 --- a/StarRailUID/starrailuid_gachalog/__init__.py +++ b/StarRailUID/starrailuid_gachalog/__init__.py @@ -1,12 +1,12 @@ +from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event -from gsuid_core.sv import SV from ..utils.convert import get_uid -from ..utils.error_reply import UID_HINT from ..utils.sr_prefix import PREFIX -from .draw_gachalogs import draw_gachalogs_img +from ..utils.error_reply import UID_HINT from .get_gachalogs import save_gachalogs +from .draw_gachalogs import draw_gachalogs_img sv_gacha_log = SV('sr抽卡记录') sv_get_gachalog_by_link = SV('sr导入抽卡链接', area='DIRECT') diff --git a/StarRailUID/starrailuid_gachalog/draw_gachalogs.py b/StarRailUID/starrailuid_gachalog/draw_gachalogs.py index 4fe6f69..bee1a08 100644 --- a/StarRailUID/starrailuid_gachalog/draw_gachalogs.py +++ b/StarRailUID/starrailuid_gachalog/draw_gachalogs.py @@ -1,18 +1,24 @@ +import json import asyncio import datetime -import json from pathlib import Path from typing import List, Tuple, Union from PIL import Image, ImageDraw - from gsuid_core.logger import logger from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, get_color_bg, get_qq_avatar, + draw_pic_with_ring, ) +from ..utils.image.convert import convert_img +from ..utils.map.name_covert import name_to_avatar_id, name_to_weapon_id +from ..utils.resource.RESOURCE_PATH import ( + PLAYER_PATH, + WEAPON_PATH, + CHAR_ICON_PATH, +) from ..utils.fonts.starrail_fonts import ( sr_font_20, sr_font_24, @@ -20,13 +26,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_38, sr_font_40, ) -from ..utils.image.convert import convert_img -from ..utils.map.name_covert import name_to_avatar_id, name_to_weapon_id -from ..utils.resource.RESOURCE_PATH import ( - CHAR_ICON_PATH, - PLAYER_PATH, - WEAPON_PATH, -) TEXT_PATH = Path(__file__).parent / 'texture2d' EMO_PATH = Path(__file__).parent / 'texture2d' / 'emo' diff --git a/StarRailUID/starrailuid_gachalog/get_gachalogs.py b/StarRailUID/starrailuid_gachalog/get_gachalogs.py index 0508f55..46e7494 100644 --- a/StarRailUID/starrailuid_gachalog/get_gachalogs.py +++ b/StarRailUID/starrailuid_gachalog/get_gachalogs.py @@ -1,9 +1,9 @@ -import asyncio import json -from datetime import datetime +import asyncio from pathlib import Path -from typing import Dict, Optional from urllib import parse +from datetime import datetime +from typing import Dict, Optional from ..utils.mys_api import mys_api from ..utils.resource.RESOURCE_PATH import PLAYER_PATH diff --git a/StarRailUID/starrailuid_note/draw_note_card.py b/StarRailUID/starrailuid_note/draw_note_card.py index 80dd720..90db4b6 100644 --- a/StarRailUID/starrailuid_note/draw_note_card.py +++ b/StarRailUID/starrailuid_note/draw_note_card.py @@ -1,17 +1,16 @@ import json -from datetime import datetime from pathlib import Path from typing import Union +from datetime import datetime from PIL import Image, ImageDraw - from gsuid_core.logger import logger -from ..utils.error_reply import get_error -from ..utils.fonts.starrail_fonts import sr_font_20, sr_font_28, sr_font_34 -from ..utils.image.convert import convert_img from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error +from ..utils.image.convert import convert_img from ..utils.resource.RESOURCE_PATH import PLAYER_PATH +from ..utils.fonts.starrail_fonts import sr_font_20, sr_font_28, sr_font_34 TEXT_PATH = Path(__file__).parent / 'texture2d' @@ -242,7 +241,9 @@ async def draw_note_img(sr_uid: str) -> Union[bytes, str]: if last_monthly_data: pie_image = Image.new("RGBA", (2100, 2100), color=(255, 255, 255, 0)) pie_image_draw = ImageDraw.Draw(pie_image) - for _index, i in enumerate(last_monthly_data['month_data']['group_by']): + for _index, i in enumerate( + last_monthly_data['month_data']['group_by'] + ): pie_image_draw.pieslice( xy, temp, diff --git a/StarRailUID/starrailuid_note/note_text.py b/StarRailUID/starrailuid_note/note_text.py index a49349d..d347c8e 100644 --- a/StarRailUID/starrailuid_note/note_text.py +++ b/StarRailUID/starrailuid_note/note_text.py @@ -1,7 +1,7 @@ from datetime import datetime -from ..utils.error_reply import get_error from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error month_im = """============== SR_UID:{} diff --git a/StarRailUID/starrailuid_rogue/__init__.py b/StarRailUID/starrailuid_rogue/__init__.py index 8d063c8..6f9b6d9 100644 --- a/StarRailUID/starrailuid_rogue/__init__.py +++ b/StarRailUID/starrailuid_rogue/__init__.py @@ -1,8 +1,8 @@ import re +from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event -from gsuid_core.sv import SV from gsuid_core.utils.error_reply import UID_HINT from ..utils.convert import get_uid diff --git a/StarRailUID/starrailuid_rogue/draw_rogue_card.py b/StarRailUID/starrailuid_rogue/draw_rogue_card.py index 603c9e3..805cfb5 100644 --- a/StarRailUID/starrailuid_rogue/draw_rogue_card.py +++ b/StarRailUID/starrailuid_rogue/draw_rogue_card.py @@ -1,30 +1,29 @@ import math from pathlib import Path -from typing import List, Optional, Union +from typing import List, Union, Optional from PIL import Image, ImageDraw - from gsuid_core.logger import logger from gsuid_core.utils.error_reply import get_error from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, get_qq_avatar, + draw_pic_with_ring, ) +from .utils import get_icon +from ..utils.convert import GsCookie +from ..utils.image.convert import convert_img from ..sruid_utils.api.mys.models import ( RogueAvatar, - RogueBuffitems, RogueMiracles, + RogueBuffitems, ) -from ..utils.convert import GsCookie from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, sr_font_34, sr_font_42, ) -from ..utils.image.convert import convert_img -from .utils import get_icon TEXT_PATH = Path(__file__).parent / 'texture2D' white_color = (255, 255, 255) diff --git a/StarRailUID/starrailuid_rogue/utils.py b/StarRailUID/starrailuid_rogue/utils.py index e980c13..3f7e35e 100644 --- a/StarRailUID/starrailuid_rogue/utils.py +++ b/StarRailUID/starrailuid_rogue/utils.py @@ -2,9 +2,8 @@ from io import BytesIO from pathlib import Path from typing import TypeVar -from aiohttp import ClientSession from PIL import Image - +from aiohttp import ClientSession from gsuid_core.data_store import get_res_path T = TypeVar("T") diff --git a/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py b/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py index ddd1a60..3e86217 100644 --- a/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py +++ b/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py @@ -1,16 +1,15 @@ import asyncio from pathlib import Path -from typing import Dict, List, Optional, Union +from typing import Dict, List, Union, Optional from PIL import Image, ImageDraw - from gsuid_core.utils.error_reply import get_error -from ..sruid_utils.api.mys.models import AvatarListItem, RoleBasicInfo, Stats -from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_36 -from ..utils.image.convert import convert_img from ..utils.mys_api import mys_api from .utils import get_icon, wrap_list +from ..utils.image.convert import convert_img +from ..utils.fonts.starrail_fonts import sr_font_24, sr_font_30, sr_font_36 +from ..sruid_utils.api.mys.models import Stats, RoleBasicInfo, AvatarListItem TEXT_PATH = Path(__file__).parent / 'texture2D' @@ -226,7 +225,7 @@ async def draw_role_card(sr_uid: str) -> Union[bytes, str]: # 绘制总图 img1, img2 = await asyncio.gather( *[ - _draw_card_1(sr_uid, role_basic_info, stats), # type: ignore + _draw_card_1(sr_uid, role_basic_info, stats), # type: ignore _draw_card_2(avatars, equips), ] ) diff --git a/StarRailUID/starrailuid_roleinfo/utils.py b/StarRailUID/starrailuid_roleinfo/utils.py index 36a696e..3565d42 100644 --- a/StarRailUID/starrailuid_roleinfo/utils.py +++ b/StarRailUID/starrailuid_roleinfo/utils.py @@ -1,10 +1,9 @@ from io import BytesIO from pathlib import Path -from typing import Generator, List, TypeVar +from typing import List, TypeVar, Generator -from aiohttp import ClientSession from PIL import Image - +from aiohttp import ClientSession from gsuid_core.data_store import get_res_path T = TypeVar("T") diff --git a/StarRailUID/starrailuid_signin/sign.py b/StarRailUID/starrailuid_signin/sign.py index 647a079..1a1f611 100644 --- a/StarRailUID/starrailuid_signin/sign.py +++ b/StarRailUID/starrailuid_signin/sign.py @@ -1,14 +1,14 @@ -import asyncio import random +import asyncio from copy import deepcopy from gsuid_core.gss import gss from gsuid_core.logger import logger from gsuid_core.utils.plugins_config.gs_config import core_plugins_config -from ..starrailuid_config.sr_config import srconfig from ..utils.api import get_sqla from ..utils.mys_api import mys_api +from ..starrailuid_config.sr_config import srconfig private_msg_list = {} group_msg_list = {} @@ -49,7 +49,9 @@ async def sign_in(sr_uid: str) -> str: if core_plugins_config.get_config('CaptchaPass').data: gt = sign_data['gt'] ch = sign_data['challenge'] - vl, ch = await mys_api._pass(gt, ch, Header) # noqa: SLF001 + vl, ch = await mys_api._pass( + gt, ch, Header + ) # noqa: SLF001 if vl: delay = 1 Header['x-rpc-challenge'] = ch diff --git a/StarRailUID/starrailuid_stamina/draw_stamina_card.py b/StarRailUID/starrailuid_stamina/draw_stamina_card.py index 100c3f3..ac2f560 100644 --- a/StarRailUID/starrailuid_stamina/draw_stamina_card.py +++ b/StarRailUID/starrailuid_stamina/draw_stamina_card.py @@ -5,12 +5,14 @@ from typing import Optional import aiohttp from PIL import Image, ImageDraw - from gsuid_core.logger import logger +from ..utils.api import get_sqla +from ..utils.mys_api import mys_api +from ..utils.image.convert import convert_img from ..sruid_utils.api.mys.models import Expedition from ..starrailuid_config.sr_config import srconfig -from ..utils.api import get_sqla +from ..utils.image.image_tools import get_simple_bg from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_24, @@ -18,9 +20,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_36, sr_font_50, ) -from ..utils.image.convert import convert_img -from ..utils.image.image_tools import get_simple_bg -from ..utils.mys_api import mys_api use_widget = srconfig.get_config('WidgetResin').data diff --git a/StarRailUID/starrailuid_stamina/notice.py b/StarRailUID/starrailuid_stamina/notice.py index feb2e03..03ac84f 100644 --- a/StarRailUID/starrailuid_stamina/notice.py +++ b/StarRailUID/starrailuid_stamina/notice.py @@ -3,10 +3,10 @@ from typing import Dict from gsuid_core.gss import gss from gsuid_core.logger import logger -from ..sruid_utils.api.mys.models import DailyNoteData -from ..starrailuid_config.sr_config import srconfig from ..utils.api import get_sqla from ..utils.mys_api import mys_api +from ..starrailuid_config.sr_config import srconfig +from ..sruid_utils.api.mys.models import DailyNoteData MR_NOTICE = '\n可发送[srmr]或者[sr每日]来查看更多信息!\n' diff --git a/StarRailUID/starrailuid_stamina/stamina_text.py b/StarRailUID/starrailuid_stamina/stamina_text.py index bc31415..2150b5e 100644 --- a/StarRailUID/starrailuid_stamina/stamina_text.py +++ b/StarRailUID/starrailuid_stamina/stamina_text.py @@ -2,8 +2,8 @@ from typing import List from gsuid_core.logger import logger -from ..utils.error_reply import get_error from ..utils.mys_api import mys_api +from ..utils.error_reply import get_error daily_im = """*数据刷新可能存在一定延迟,请以当前游戏实际数据为准 ============== diff --git a/StarRailUID/starrailuid_user/__init__.py b/StarRailUID/starrailuid_user/__init__.py index 066c73a..61b66db 100644 --- a/StarRailUID/starrailuid_user/__init__.py +++ b/StarRailUID/starrailuid_user/__init__.py @@ -1,12 +1,12 @@ from typing import List +from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event -from gsuid_core.sv import SV from ..utils.api import get_sqla -from ..utils.message import send_diff_msg from ..utils.sr_prefix import PREFIX +from ..utils.message import send_diff_msg from .draw_user_card import get_user_card sv_user_config = SV('sr用户管理', pm=2) diff --git a/StarRailUID/starrailuid_user/add_ck.py b/StarRailUID/starrailuid_user/add_ck.py index 9f86bb7..d1c8226 100644 --- a/StarRailUID/starrailuid_user/add_ck.py +++ b/StarRailUID/starrailuid_user/add_ck.py @@ -1,10 +1,10 @@ -from http.cookies import SimpleCookie from pathlib import Path from typing import Dict, List +from http.cookies import SimpleCookie from ..utils.api import get_sqla -from ..utils.error_reply import UID_HINT from ..utils.mys_api import mys_api +from ..utils.error_reply import UID_HINT pic_path = Path(__file__).parent / 'pic' id_list = [ @@ -79,7 +79,6 @@ async def refresh_ck_by_uid_list(bot_id: str, uid_dict: Dict) -> str: return f'{s_im}\n{f_im}' if f_im else s_im - async def deal_ck(bot_id: str, mes: str, user_id: str, mode: str = 'PIC'): im = await _deal_ck(bot_id, mes, user_id) if mode == 'PIC': @@ -236,10 +235,8 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str: 'Cookies和Stoken属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!' ) im_list.append( - - '如果需要【sr开启自动签到】和【sr开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。' - '\n例如:绑定uid123456789。' - + '如果需要【sr开启自动签到】和【sr开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。' + '\n例如:绑定uid123456789。' ) im_list.append('你可以使用命令【sr绑定信息】检查你的账号绑定情况!') return '\n'.join(im_list) diff --git a/StarRailUID/starrailuid_user/draw_user_card.py b/StarRailUID/starrailuid_user/draw_user_card.py index 408b093..f99f569 100644 --- a/StarRailUID/starrailuid_user/draw_user_card.py +++ b/StarRailUID/starrailuid_user/draw_user_card.py @@ -1,5 +1,5 @@ # from pathlib import Path -from typing import Optional, Tuple +from typing import Tuple, Optional from PIL import Image diff --git a/StarRailUID/starrailuid_user/qrlogin.py b/StarRailUID/starrailuid_user/qrlogin.py index 229dbe2..b0ae4ae 100644 --- a/StarRailUID/starrailuid_user/qrlogin.py +++ b/StarRailUID/starrailuid_user/qrlogin.py @@ -1,16 +1,15 @@ -import asyncio -import base64 import io import json +import base64 +import asyncio from http.cookies import SimpleCookie -from typing import Any, List, Literal, Tuple, Union +from typing import Any, List, Tuple, Union, Literal import qrcode -from qrcode.constants import ERROR_CORRECT_L - from gsuid_core.bot import Bot -from gsuid_core.logger import logger from gsuid_core.models import Event +from gsuid_core.logger import logger +from qrcode.constants import ERROR_CORRECT_L from gsuid_core.segment import MessageSegment from ..utils.api import get_sqla @@ -25,7 +24,7 @@ disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。 def get_qrcode_base64(url): - qr = qrcode.QRCode( # type: ignore + qr = qrcode.QRCode( # type: ignore version=1, error_correction=ERROR_CORRECT_L, box_size=10, diff --git a/StarRailUID/utils/convert.py b/StarRailUID/utils/convert.py index 0c14a6c..059ff33 100644 --- a/StarRailUID/utils/convert.py +++ b/StarRailUID/utils/convert.py @@ -1,14 +1,14 @@ import re -from typing import Optional, Tuple, Union, overload +from typing import Tuple, Union, Optional, overload from gsuid_core.bot import Bot from gsuid_core.models import Event from gsuid_core.utils.api.mys.models import IndexData -from ..sruid_utils.api.mys.models import AbyssData, RogueData from .api import get_sqla -from .error_reply import VERIFY_HINT from .mys_api import mys_api +from .error_reply import VERIFY_HINT +from ..sruid_utils.api.mys.models import AbyssData, RogueData @overload diff --git a/StarRailUID/utils/image/convert.py b/StarRailUID/utils/image/convert.py index c0e22d0..6f6a0f3 100644 --- a/StarRailUID/utils/image/convert.py +++ b/StarRailUID/utils/image/convert.py @@ -1,6 +1,6 @@ -from base64 import b64encode from io import BytesIO from pathlib import Path +from base64 import b64encode from typing import Union, overload import aiofiles @@ -96,7 +96,7 @@ def get_str_size( line += i if hasattr(font, 'getsize'): - size, _ = font.getsize(line) # type: ignore + size, _ = font.getsize(line) # type: ignore else: size, _, _, _ = font.getbbox(line) if size >= limit: diff --git a/StarRailUID/utils/map/gen.py b/StarRailUID/utils/map/gen.py index 1c409a3..6e1339b 100644 --- a/StarRailUID/utils/map/gen.py +++ b/StarRailUID/utils/map/gen.py @@ -156,7 +156,9 @@ for skill in AvatarSkillConfig: for avatar_property in AvatarPropertyConfig: PropertyType = AvatarPropertyConfig[avatar_property]['PropertyType'] PropertyName = AvatarPropertyConfig[avatar_property]['PropertyName'] - PropertyNameHash = AvatarPropertyConfig[avatar_property]['PropertyNameFilter']['Hash'] + PropertyNameHash = AvatarPropertyConfig[avatar_property][ + 'PropertyNameFilter' + ]['Hash'] for item in TextMapCN: if str(item) == str(PropertyNameHash): Property_Name = TextMapCN[item] @@ -180,7 +182,11 @@ for set_group in RelicSetConfig: for character in characters: char_id = characters[character]['id'] - characterSkillTree[str(char_id)] = {} if str(char_id) not in characterSkillTree else characterSkillTree[str(char_id)] + characterSkillTree[str(char_id)] = ( + {} + if str(char_id) not in characterSkillTree + else characterSkillTree[str(char_id)] + ) skill_tree_list = characters[character]['skill_trees'] for skill in skill_tree_list: skill_tree = character_skill_trees[skill] @@ -191,8 +197,14 @@ for set_ in RelicSetSkillConfig: for item in RelicSetSkillConfig[set_]: set_id = RelicSetSkillConfig[set_][item]['SetID'] property_list = RelicSetSkillConfig[set_][item]['PropertyList'] - RelicSetSkill[set_] = {} if set_ not in RelicSetSkill else RelicSetSkill[set_] - RelicSetSkill[set_][item] = {} if item not in RelicSetSkill[set_] else RelicSetSkill[set_][item] + RelicSetSkill[set_] = ( + {} if set_ not in RelicSetSkill else RelicSetSkill[set_] + ) + RelicSetSkill[set_][item] = ( + {} + if item not in RelicSetSkill[set_] + else RelicSetSkill[set_][item] + ) for property_ in property_list: property_id = property_['NAOGDGBJNOJ'] property_value = property_['MBOHKHKHFPD']['Value'] @@ -234,7 +246,9 @@ Property2Name = json.dumps(Property2Name, ensure_ascii=False) Relic2SetId = json.dumps(Relic2SetId, ensure_ascii=False) SetId2Name = json.dumps(SetId2Name, ensure_ascii=False) characterSkillTree = json.dumps(characterSkillTree, ensure_ascii=False) -EquipmentID2AbilityProperty = json.dumps(EquipmentID2AbilityProperty, ensure_ascii=False) +EquipmentID2AbilityProperty = json.dumps( + EquipmentID2AbilityProperty, ensure_ascii=False +) RelicSetSkill = json.dumps(RelicSetSkill, ensure_ascii=False) skillId2AttackType = json.dumps(skillId2AttackType, ensure_ascii=False) EquipmentID2Rarity = json.dumps(EquipmentID2Rarity, ensure_ascii=False) diff --git a/StarRailUID/utils/resource/download_from_cos.py b/StarRailUID/utils/resource/download_from_cos.py index 55bfdb3..038e3b6 100644 --- a/StarRailUID/utils/resource/download_from_cos.py +++ b/StarRailUID/utils/resource/download_from_cos.py @@ -2,13 +2,12 @@ import asyncio from pathlib import Path from typing import Dict, List, Tuple, Union -from aiohttp.client import ClientSession from msgspec import json as msgjson - from gsuid_core.logger import logger +from aiohttp.client import ClientSession from .download_url import download_file -from .RESOURCE_PATH import GUIDE_PATH, RESOURCE_PATH, WIKI_PATH +from .RESOURCE_PATH import WIKI_PATH, GUIDE_PATH, RESOURCE_PATH with Path.open( Path(__file__).parent / 'resource_map.json', encoding='UTF-8' diff --git a/StarRailUID/utils/resource/download_url.py b/StarRailUID/utils/resource/download_url.py index 2af6520..065454d 100644 --- a/StarRailUID/utils/resource/download_url.py +++ b/StarRailUID/utils/resource/download_url.py @@ -1,12 +1,11 @@ -from typing import Optional, Tuple +from typing import Tuple, Optional import aiofiles +from gsuid_core.logger import logger from aiohttp.client import ClientSession from aiohttp.client_exceptions import ClientConnectorError -from gsuid_core.logger import logger - -from .RESOURCE_PATH import GUIDE_PATH, RESOURCE_PATH, WIKI_PATH +from .RESOURCE_PATH import WIKI_PATH, GUIDE_PATH, RESOURCE_PATH PATHDICT = { 'resource': RESOURCE_PATH,