mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-07 04:03:44 +08:00
Merge branch 'master' of https://github.com/qwerdvd/StarRailUID
This commit is contained in:
commit
6d1d4e656f
@ -1,6 +1,5 @@
|
|||||||
"""Mihomo.me api 包装
|
"""Mihomo.me api 包装
|
||||||
"""
|
"""
|
||||||
from .models import MihomoData as MihomoData
|
from .models import MihomoData as MihomoData
|
||||||
from .requests import get_char_card_info as get_char_card_info
|
|
||||||
|
|
||||||
__all__ = ["requests", "MihomoData"]
|
__all__ = ["requests", "MihomoData"]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TypedDict, Union
|
from typing import Union, TypedDict
|
||||||
|
|
||||||
|
|
||||||
class MihomoData(TypedDict):
|
class MihomoData(TypedDict):
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from typing import Any, Dict, List, TypedDict, Union
|
from typing import Any, Dict, List, Union, TypedDict
|
||||||
|
|
||||||
################
|
################
|
||||||
# 抽卡记录相关 #
|
# 抽卡记录相关 #
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.sv import SV
|
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
from gsuid_core.utils.error_reply import UID_HINT
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional, Union
|
from typing import Union, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import (
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
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.convert import GsCookie
|
||||||
|
from ..utils.image.convert import convert_img
|
||||||
|
from ..sruid_utils.api.mys.models import AbyssAvatar
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
@ -19,8 +20,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_42,
|
sr_font_42,
|
||||||
)
|
)
|
||||||
from ..utils.image.convert import convert_img
|
|
||||||
from .utils import get_icon
|
|
||||||
|
|
||||||
abyss_list = {
|
abyss_list = {
|
||||||
'1': '琥珀恩赐其一',
|
'1': '琥珀恩赐其一',
|
||||||
|
@ -2,9 +2,8 @@ from io import BytesIO
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
from aiohttp import ClientSession
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from aiohttp import ClientSession
|
||||||
from gsuid_core.data_store import get_res_path
|
from gsuid_core.data_store import get_res_path
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
@ -3,24 +3,24 @@ from pathlib import Path
|
|||||||
from typing import Tuple, cast
|
from typing import Tuple, cast
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
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.convert import get_uid
|
||||||
|
from ..utils.sr_prefix import PREFIX
|
||||||
from ..utils.error_reply import UID_HINT
|
from ..utils.error_reply import UID_HINT
|
||||||
from ..utils.image.convert import convert_img
|
from ..utils.image.convert import convert_img
|
||||||
from ..utils.resource.RESOURCE_PATH import TEMP_PATH
|
from ..utils.resource.RESOURCE_PATH import TEMP_PATH
|
||||||
from ..utils.sr_prefix import PREFIX
|
from .draw_char_img import cal, get_char_data, draw_char_info_img
|
||||||
from .draw_char_img import cal, draw_char_info_img, get_char_data
|
|
||||||
from .to_card import api_to_card
|
|
||||||
|
|
||||||
sv_char_info_config = SV('sr面板设置', pm=2)
|
sv_char_info_config = SV('sr面板设置', pm=2)
|
||||||
sv_get_char_info = SV('sr面板查询', priority=10)
|
sv_get_char_info = SV('sr面板查询', priority=10)
|
||||||
sv_get_sr_original_pic = SV('sr查看面板原图', priority=5)
|
sv_get_sr_original_pic = SV('sr查看面板原图', priority=5)
|
||||||
sv_char_damage_cal = SV('sr伤害计算')
|
sv_char_damage_cal = SV('sr伤害计算')
|
||||||
|
|
||||||
|
|
||||||
@sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算')
|
@sv_char_damage_cal.on_prefix(f'{PREFIX}伤害计算')
|
||||||
async def send_damage_msg(bot: Bot, ev: Event):
|
async def send_damage_msg(bot: Bot, ev: Event):
|
||||||
msg = ''.join(re.findall('[\u4e00-\u9fa5 ]', ev.text))
|
msg = ''.join(re.findall('[\u4e00-\u9fa5 ]', ev.text))
|
||||||
|
@ -1,19 +1,35 @@
|
|||||||
|
import re
|
||||||
import json
|
import json
|
||||||
import math
|
import math
|
||||||
import re
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, Union
|
from typing import Dict, Union
|
||||||
|
|
||||||
from mpmath import mp, nstr
|
from mpmath import mp, nstr
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.image.convert import convert_img
|
from gsuid_core.utils.image.convert import convert_img
|
||||||
from gsuid_core.utils.image.image_tools import draw_text_by_line
|
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.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.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 (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_20,
|
sr_font_20,
|
||||||
sr_font_23,
|
sr_font_23,
|
||||||
@ -23,23 +39,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_38,
|
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'
|
Excel_path = Path(__file__).parent / 'effect'
|
||||||
with Path.open(Excel_path / 'Excel' / 'seele.json', encoding='utf-8') as f:
|
with Path.open(Excel_path / 'Excel' / 'seele.json', encoding='utf-8') as f:
|
||||||
@ -722,7 +721,13 @@ async def cal(char_data: Dict):
|
|||||||
skill_info_list = []
|
skill_info_list = []
|
||||||
if char.char_id in [1102, 1204, 1107, 1213, 1006]:
|
if char.char_id in [1102, 1204, 1107, 1213, 1006]:
|
||||||
if char.char_id == 1213:
|
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)
|
role = RoleInstance(char)
|
||||||
im_tmp = await role.cal_damage(skill_type)
|
im_tmp = await role.cal_damage(skill_type)
|
||||||
skill_info_list.append(im_tmp)
|
skill_info_list.append(im_tmp)
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from mpmath import mp
|
from mpmath import mp
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
|
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
|
||||||
from ..Base.model import (
|
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
|
||||||
DamageInstanceAvatar,
|
|
||||||
DamageInstanceSkill,
|
|
||||||
)
|
|
||||||
|
|
||||||
mp.dps = 14
|
mp.dps = 14
|
||||||
|
|
||||||
@ -16,7 +12,9 @@ mp.dps = 14
|
|||||||
class Seele(BaseAvatar):
|
class Seele(BaseAvatar):
|
||||||
Buff: BaseAvatarBuff
|
Buff: BaseAvatarBuff
|
||||||
|
|
||||||
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def __init__(
|
||||||
|
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
super().__init__(char=char, skills=skills)
|
super().__init__(char=char, skills=skills)
|
||||||
self.eidolon_attribute = {}
|
self.eidolon_attribute = {}
|
||||||
self.extra_ability_attribute = {}
|
self.extra_ability_attribute = {}
|
||||||
@ -36,14 +34,17 @@ class Seele(BaseAvatar):
|
|||||||
|
|
||||||
def extra_ability(self):
|
def extra_ability(self):
|
||||||
# 额外能力 割裂 抗性穿透提高20
|
# 额外能力 割裂 抗性穿透提高20
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['QuantumResistancePenetration'] = mp.mpf(
|
||||||
'QuantumResistancePenetration'
|
0.2
|
||||||
] = mp.mpf(0.2)
|
)
|
||||||
|
|
||||||
|
|
||||||
class JingYuan(BaseAvatar):
|
class JingYuan(BaseAvatar):
|
||||||
Buff: BaseAvatarBuff
|
Buff: BaseAvatarBuff
|
||||||
|
|
||||||
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def __init__(
|
||||||
|
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
super().__init__(char=char, skills=skills)
|
super().__init__(char=char, skills=skills)
|
||||||
self.eidolon_attribute = {}
|
self.eidolon_attribute = {}
|
||||||
self.extra_ability_attribute = {}
|
self.extra_ability_attribute = {}
|
||||||
@ -64,18 +65,17 @@ class JingYuan(BaseAvatar):
|
|||||||
def extra_ability(self):
|
def extra_ability(self):
|
||||||
logger.info('额外能力')
|
logger.info('额外能力')
|
||||||
logger.info('【神君】下回合的攻击段数大于等于6段,则其下回合的暴击伤害提高25%。')
|
logger.info('【神君】下回合的攻击段数大于等于6段,则其下回合的暴击伤害提高25%。')
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['CriticalDamageBase'] = mp.mpf(0.25)
|
||||||
'CriticalDamageBase'
|
|
||||||
] = mp.mpf(0.25)
|
|
||||||
logger.info('施放战技后,暴击率提升10%')
|
logger.info('施放战技后,暴击率提升10%')
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['CriticalChanceBase'] = mp.mpf(0.1)
|
||||||
'CriticalChanceBase'
|
|
||||||
] = mp.mpf(0.1)
|
|
||||||
|
|
||||||
class Clara(BaseAvatar):
|
class Clara(BaseAvatar):
|
||||||
Buff: BaseAvatarBuff
|
Buff: BaseAvatarBuff
|
||||||
|
|
||||||
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def __init__(
|
||||||
|
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
super().__init__(char=char, skills=skills)
|
super().__init__(char=char, skills=skills)
|
||||||
self.eidolon_attribute = {}
|
self.eidolon_attribute = {}
|
||||||
self.extra_ability_attribute = {}
|
self.extra_ability_attribute = {}
|
||||||
@ -92,17 +92,16 @@ class Clara(BaseAvatar):
|
|||||||
def extra_ability(self):
|
def extra_ability(self):
|
||||||
logger.info('额外能力')
|
logger.info('额外能力')
|
||||||
logger.info('史瓦罗的反击造成的伤害提高30%')
|
logger.info('史瓦罗的反击造成的伤害提高30%')
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['TalentDmgAdd'] = mp.mpf(0.3)
|
||||||
'TalentDmgAdd'
|
self.extra_ability_attribute['UltraDmgAdd'] = mp.mpf(0.3)
|
||||||
] = mp.mpf(0.3)
|
|
||||||
self.extra_ability_attribute[
|
|
||||||
'UltraDmgAdd'
|
|
||||||
] = mp.mpf(0.3)
|
|
||||||
|
|
||||||
class Danhengil(BaseAvatar):
|
class Danhengil(BaseAvatar):
|
||||||
Buff: BaseAvatarBuff
|
Buff: BaseAvatarBuff
|
||||||
|
|
||||||
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def __init__(
|
||||||
|
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
super().__init__(char=char, skills=skills)
|
super().__init__(char=char, skills=skills)
|
||||||
self.eidolon_attribute = {}
|
self.eidolon_attribute = {}
|
||||||
self.extra_ability_attribute = {}
|
self.extra_ability_attribute = {}
|
||||||
@ -125,14 +124,15 @@ class Danhengil(BaseAvatar):
|
|||||||
def extra_ability(self):
|
def extra_ability(self):
|
||||||
logger.info('额外能力')
|
logger.info('额外能力')
|
||||||
logger.info('对拥有虚数属性弱点的敌方目标造成伤害时,暴击伤害提高24%。')
|
logger.info('对拥有虚数属性弱点的敌方目标造成伤害时,暴击伤害提高24%。')
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['CriticalDamageBase'] = mp.mpf(0.24)
|
||||||
'CriticalDamageBase'
|
|
||||||
] = mp.mpf(0.24)
|
|
||||||
|
|
||||||
class Silverwolf(BaseAvatar):
|
class Silverwolf(BaseAvatar):
|
||||||
Buff: BaseAvatarBuff
|
Buff: BaseAvatarBuff
|
||||||
|
|
||||||
def __init__(self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def __init__(
|
||||||
|
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
super().__init__(char=char, skills=skills)
|
super().__init__(char=char, skills=skills)
|
||||||
self.eidolon_attribute = {}
|
self.eidolon_attribute = {}
|
||||||
self.extra_ability_attribute = {}
|
self.extra_ability_attribute = {}
|
||||||
@ -144,30 +144,29 @@ class Silverwolf(BaseAvatar):
|
|||||||
|
|
||||||
def eidolons(self):
|
def eidolons(self):
|
||||||
if self.avatar_rank >= 6:
|
if self.avatar_rank >= 6:
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['AllDamageAddedRatio'] = mp.mpf(1)
|
||||||
'AllDamageAddedRatio'
|
|
||||||
] = mp.mpf(1)
|
|
||||||
|
|
||||||
def extra_ability(self):
|
def extra_ability(self):
|
||||||
logger.info('额外能力')
|
logger.info('额外能力')
|
||||||
logger.info('战技降抗')
|
logger.info('战技降抗')
|
||||||
logger.info('战技使目标全属性抗性降低的效果额外降低3%')
|
logger.info('战技使目标全属性抗性降低的效果额外降低3%')
|
||||||
enemy_status_resistance = self.BPSkill_d() + 0.03
|
enemy_status_resistance = self.BPSkill_d() + 0.03
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['QuantumResistancePenetration'] = mp.mpf(
|
||||||
'QuantumResistancePenetration'
|
enemy_status_resistance
|
||||||
] = mp.mpf(enemy_status_resistance)
|
)
|
||||||
logger.info('终结技降防')
|
logger.info('终结技降防')
|
||||||
ultra_defence = self.Ultra_d()
|
ultra_defence = self.Ultra_d()
|
||||||
logger.info('天赋降防')
|
logger.info('天赋降防')
|
||||||
talent_defence = self.Talent()
|
talent_defence = self.Talent()
|
||||||
ignore_defence = ultra_defence + talent_defence
|
ignore_defence = ultra_defence + talent_defence
|
||||||
self.extra_ability_attribute[
|
self.extra_ability_attribute['ignore_defence'] = mp.mpf(ignore_defence)
|
||||||
'ignore_defence'
|
|
||||||
] = mp.mpf(ignore_defence)
|
|
||||||
|
|
||||||
class Avatar:
|
class Avatar:
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def create(
|
||||||
|
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
if char.id_ == 1006:
|
if char.id_ == 1006:
|
||||||
return Silverwolf(char, skills)
|
return Silverwolf(char, skills)
|
||||||
if char.id_ == 1213:
|
if char.id_ == 1213:
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import json
|
import json
|
||||||
from abc import abstractmethod
|
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
from pathlib import Path
|
||||||
|
from abc import abstractmethod
|
||||||
|
|
||||||
from mpmath import mp
|
from mpmath import mp
|
||||||
|
|
||||||
from ....utils.excel.read_excel import AvatarPromotion
|
|
||||||
from .model import DamageInstanceAvatar, DamageInstanceSkill
|
|
||||||
from .SkillBase import BaseSkills
|
from .SkillBase import BaseSkills
|
||||||
|
from ....utils.excel.read_excel import AvatarPromotion
|
||||||
|
from .model import DamageInstanceSkill, DamageInstanceAvatar
|
||||||
|
|
||||||
path = Path(__file__).parent.parent
|
path = Path(__file__).parent.parent
|
||||||
with Path.open(path / 'Excel' / 'seele.json', encoding='utf-8') as f:
|
with Path.open(path / 'Excel' / 'seele.json', encoding='utf-8') as f:
|
||||||
@ -18,7 +18,9 @@ mp.dps = 14
|
|||||||
|
|
||||||
class BaseAvatarBuff:
|
class BaseAvatarBuff:
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def create(
|
||||||
|
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
cls.extra_ability_id = []
|
cls.extra_ability_id = []
|
||||||
if char.extra_ability:
|
if char.extra_ability:
|
||||||
for extra_ability in char.extra_ability:
|
for extra_ability in char.extra_ability:
|
||||||
@ -39,7 +41,9 @@ class BaseAvatarBuff:
|
|||||||
|
|
||||||
|
|
||||||
class BaseAvatar:
|
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.Skill = BaseSkills.create(char=char, skills=skills)
|
||||||
self.Buff = BaseAvatarBuff.create(char=char, skills=skills)
|
self.Buff = BaseAvatarBuff.create(char=char, skills=skills)
|
||||||
self.avatar_id = char.id_
|
self.avatar_id = char.id_
|
||||||
@ -125,7 +129,9 @@ class BaseAvatar:
|
|||||||
|
|
||||||
def Talent(self):
|
def Talent(self):
|
||||||
return mp.mpf(
|
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):
|
def BPSkill_d(self):
|
||||||
@ -145,7 +151,9 @@ class BaseAvatar:
|
|||||||
def Talent_add(self):
|
def Talent_add(self):
|
||||||
if self.avatar_id in [1102]:
|
if self.avatar_id in [1102]:
|
||||||
return mp.mpf(
|
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:
|
else:
|
||||||
return mp.mpf(0)
|
return mp.mpf(0)
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
from abc import abstractmethod
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from abc import abstractmethod
|
||||||
|
|
||||||
from mpmath import mp
|
from mpmath import mp
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
from ....utils.map.SR_MAP_PATH import RelicSetSkill
|
|
||||||
from .model import DamageInstanceRelic
|
from .model import DamageInstanceRelic
|
||||||
|
from ....utils.map.SR_MAP_PATH import RelicSetSkill
|
||||||
|
|
||||||
mp.dps = 14
|
mp.dps = 14
|
||||||
|
|
||||||
@ -22,10 +21,7 @@ class SingleRelic:
|
|||||||
|
|
||||||
def get_attribute_(self):
|
def get_attribute_(self):
|
||||||
# MainAffix
|
# MainAffix
|
||||||
if (
|
if self.raw_relic.MainAffix.Property in self.relic_attribute_bonus:
|
||||||
self.raw_relic.MainAffix.Property
|
|
||||||
in self.relic_attribute_bonus
|
|
||||||
):
|
|
||||||
self.relic_attribute_bonus[
|
self.relic_attribute_bonus[
|
||||||
self.raw_relic.MainAffix.Property
|
self.raw_relic.MainAffix.Property
|
||||||
] += mp.mpf(self.raw_relic.MainAffix.Value)
|
] += mp.mpf(self.raw_relic.MainAffix.Value)
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from mpmath import mp
|
from mpmath import mp
|
||||||
|
|
||||||
from .model import DamageInstanceAvatar, DamageInstanceSkill
|
from .model import DamageInstanceSkill, DamageInstanceAvatar
|
||||||
|
|
||||||
mp.dps = 14
|
mp.dps = 14
|
||||||
|
|
||||||
@ -28,7 +28,9 @@ class BaseSkills:
|
|||||||
Talent_: SingleSkill
|
Talent_: SingleSkill
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]):
|
def create(
|
||||||
|
cls, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
|
||||||
|
):
|
||||||
for skill in skills:
|
for skill in skills:
|
||||||
skill_attack_type = skill.skillAttackType
|
skill_attack_type = skill.skillAttackType
|
||||||
if skill_attack_type == 'Normal':
|
if skill_attack_type == 'Normal':
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from abc import abstractmethod
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from abc import abstractmethod
|
||||||
|
|
||||||
from mpmath import mp
|
from mpmath import mp
|
||||||
|
|
||||||
|
from .model import DamageInstanceWeapon
|
||||||
from ....utils.excel.read_excel import EquipmentPromotion
|
from ....utils.excel.read_excel import EquipmentPromotion
|
||||||
from ....utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty
|
from ....utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty
|
||||||
from .model import DamageInstanceWeapon
|
|
||||||
|
|
||||||
mp.dps = 14
|
mp.dps = 14
|
||||||
|
|
||||||
|
@ -218,6 +218,64 @@
|
|||||||
0.50000000044703484
|
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": {
|
"23007": {
|
||||||
"Param": {
|
"Param": {
|
||||||
@ -236,6 +294,24 @@
|
|||||||
0.20000000044703484
|
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": {
|
"21020": {
|
||||||
"Param": {
|
"Param": {
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from collections import Counter
|
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
|
||||||
from mpmath import mp
|
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 ..utils import merge_attribute
|
||||||
|
from ..Base.model import DamageInstanceRelic
|
||||||
|
from ..Base.RelicBase import SingleRelic, BaseRelicSetSkill
|
||||||
|
|
||||||
|
|
||||||
class Relic101(BaseRelicSetSkill):
|
class Relic101(BaseRelicSetSkill):
|
||||||
@ -173,6 +173,7 @@ class Relic108(BaseRelicSetSkill):
|
|||||||
)
|
)
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
|
||||||
class Relic109(BaseRelicSetSkill):
|
class Relic109(BaseRelicSetSkill):
|
||||||
def __init__(self, set_id: int, count: int):
|
def __init__(self, set_id: int, count: int):
|
||||||
super().__init__(set_id, count)
|
super().__init__(set_id, count)
|
||||||
@ -193,6 +194,7 @@ class Relic109(BaseRelicSetSkill):
|
|||||||
)
|
)
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
|
||||||
class Relic110(BaseRelicSetSkill):
|
class Relic110(BaseRelicSetSkill):
|
||||||
def __init__(self, set_id: int, count: int):
|
def __init__(self, set_id: int, count: int):
|
||||||
super().__init__(set_id, count)
|
super().__init__(set_id, count)
|
||||||
@ -259,6 +261,49 @@ class Relic112(BaseRelicSetSkill):
|
|||||||
return attribute_bonus
|
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):
|
class Relic301(BaseRelicSetSkill):
|
||||||
def __init__(self, set_id: int, count: int):
|
def __init__(self, set_id: int, count: int):
|
||||||
super().__init__(set_id, count)
|
super().__init__(set_id, count)
|
||||||
@ -334,7 +379,7 @@ class Relic304(BaseRelicSetSkill):
|
|||||||
备者的效果命中大于等于50%
|
备者的效果命中大于等于50%
|
||||||
'''
|
'''
|
||||||
merged_attr = await merge_attribute(base_attr, attribute_bonus)
|
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')
|
logger.info('Relic306 check success')
|
||||||
return True
|
return True
|
||||||
return None
|
return None
|
||||||
@ -440,6 +485,7 @@ class Relic308(BaseRelicSetSkill):
|
|||||||
logger.info('ModifyActionDelay')
|
logger.info('ModifyActionDelay')
|
||||||
return attribute_bonus
|
return attribute_bonus
|
||||||
|
|
||||||
|
|
||||||
class Relic309(BaseRelicSetSkill):
|
class Relic309(BaseRelicSetSkill):
|
||||||
def __init__(self, set_id: int, count: int):
|
def __init__(self, set_id: int, count: int):
|
||||||
super().__init__(set_id, count)
|
super().__init__(set_id, count)
|
||||||
@ -466,6 +512,30 @@ class Relic309(BaseRelicSetSkill):
|
|||||||
)
|
)
|
||||||
return attribute_bonus
|
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:
|
class RelicSet:
|
||||||
HEAD: SingleRelic
|
HEAD: SingleRelic
|
||||||
HAND: SingleRelic
|
HAND: SingleRelic
|
||||||
@ -543,6 +613,10 @@ class RelicSet:
|
|||||||
cls.SetSkill.append(Relic111(set_id, count))
|
cls.SetSkill.append(Relic111(set_id, count))
|
||||||
elif set_id == 112:
|
elif set_id == 112:
|
||||||
cls.SetSkill.append(Relic112(set_id, count))
|
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:
|
elif set_id == 301:
|
||||||
cls.SetSkill.append(Relic301(set_id, count))
|
cls.SetSkill.append(Relic301(set_id, count))
|
||||||
elif set_id == 302:
|
elif set_id == 302:
|
||||||
@ -561,5 +635,7 @@ class RelicSet:
|
|||||||
cls.SetSkill.append(Relic308(set_id, count))
|
cls.SetSkill.append(Relic308(set_id, count))
|
||||||
elif set_id == 309:
|
elif set_id == 309:
|
||||||
cls.SetSkill.append(Relic309(set_id, count))
|
cls.SetSkill.append(Relic309(set_id, count))
|
||||||
|
elif set_id == 310:
|
||||||
|
cls.SetSkill.append(Relic310(set_id, count))
|
||||||
else:
|
else:
|
||||||
raise Exception(f'Unknow SetId: {set_id}')
|
raise Exception(f'Unknow SetId: {set_id}')
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from gsuid_core.logger import logger
|
|
||||||
from mpmath import mp
|
from mpmath import mp
|
||||||
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
from ..mono.Character import Character
|
|
||||||
from .Avatar.Avatar import Avatar
|
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 .Base.model import DamageInstance
|
||||||
from .Relic.Relic import RelicSet, SingleRelic
|
from .Relic.Relic import RelicSet, SingleRelic
|
||||||
from .utils import merge_attribute
|
|
||||||
from .Weapon.Weapon import Weapon
|
|
||||||
|
|
||||||
mp.dps = 14
|
mp.dps = 14
|
||||||
|
|
||||||
@ -115,44 +115,22 @@ class RoleInstance:
|
|||||||
raise Exception('attribute_bonus is None')
|
raise Exception('attribute_bonus is None')
|
||||||
for attribute in self.weapon.__dict__['weapon_attribute']:
|
for attribute in self.weapon.__dict__['weapon_attribute']:
|
||||||
if attribute in self.attribute_bonus:
|
if attribute in self.attribute_bonus:
|
||||||
self.attribute_bonus[
|
self.attribute_bonus[attribute] += self.weapon.__dict__[
|
||||||
attribute
|
'weapon_attribute'
|
||||||
] += self.weapon.__dict__['weapon_attribute'][attribute]
|
][attribute]
|
||||||
else:
|
else:
|
||||||
self.attribute_bonus[
|
self.attribute_bonus[attribute] = self.weapon.__dict__[
|
||||||
attribute
|
'weapon_attribute'
|
||||||
] = self.weapon.__dict__['weapon_attribute'][attribute]
|
][attribute]
|
||||||
|
|
||||||
async def cal_damage(self, skill_type):
|
async def cal_damage(self, skill_type):
|
||||||
logger.info('base_attr')
|
logger.info('base_attr')
|
||||||
logger.info(self.base_attr)
|
logger.info(self.base_attr)
|
||||||
logger.info('attribute_bonus')
|
logger.info('attribute_bonus')
|
||||||
logger.info(self.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':
|
if skill_type == 'Normal':
|
||||||
skill_multiplier = self.avatar.Normal()
|
skill_multiplier = self.avatar.Normal()
|
||||||
elif skill_type == 'BPSkill':
|
elif skill_type == 'BPSkill':
|
||||||
@ -160,7 +138,10 @@ class RoleInstance:
|
|||||||
elif skill_type == 'Ultra':
|
elif skill_type == 'Ultra':
|
||||||
if self.raw_data.avatar.id_ == 1107:
|
if self.raw_data.avatar.id_ == 1107:
|
||||||
skill_multiplier = self.avatar.Talent() + self.avatar.Ultra()
|
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
|
skill_multiplier = self.avatar.Ultra() + 1
|
||||||
else:
|
else:
|
||||||
skill_multiplier = self.avatar.Ultra()
|
skill_multiplier = self.avatar.Ultra()
|
||||||
@ -175,10 +156,56 @@ class RoleInstance:
|
|||||||
|
|
||||||
logger.info(f'技能区总: {skill_multiplier}')
|
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':
|
if skill_info[0] == 'attack':
|
||||||
skill_multiplier = skill_multiplier/skill_info[2]
|
skill_multiplier = skill_multiplier / skill_info[2]
|
||||||
logger.info(f'技能区单段: {skill_multiplier}')
|
logger.info(f'技能区单段: {skill_multiplier}')
|
||||||
attack = merged_attr['attack']
|
attack = merged_attr['attack']
|
||||||
logger.info(f'攻击力: {attack}')
|
logger.info(f'攻击力: {attack}')
|
||||||
@ -199,7 +226,9 @@ class RoleInstance:
|
|||||||
Normal_Penetration = merged_attr.get(
|
Normal_Penetration = merged_attr.get(
|
||||||
'Normal_ImaginaryResistancePenetration', 0
|
'Normal_ImaginaryResistancePenetration', 0
|
||||||
)
|
)
|
||||||
resistance_area = resistance_area - (0 - Normal_Penetration)
|
resistance_area = resistance_area - (
|
||||||
|
0 - Normal_Penetration
|
||||||
|
)
|
||||||
logger.info(f'抗性区: {resistance_area}')
|
logger.info(f'抗性区: {resistance_area}')
|
||||||
|
|
||||||
# 防御区
|
# 防御区
|
||||||
@ -211,7 +240,9 @@ class RoleInstance:
|
|||||||
ignore_defence = 1 - merged_attr[attr]
|
ignore_defence = 1 - merged_attr[attr]
|
||||||
break
|
break
|
||||||
logger.info(f'ignore_defence {ignore_defence}')
|
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) / (
|
defence_multiplier = (self.avatar.avatar_level * 10 + 200) / (
|
||||||
self.avatar.avatar_level * 10 + 200 + enemy_defence
|
self.avatar.avatar_level * 10 + 200 + enemy_defence
|
||||||
)
|
)
|
||||||
@ -236,7 +267,10 @@ class RoleInstance:
|
|||||||
for attr in merged_attr:
|
for attr in merged_attr:
|
||||||
if attr.__contains__('AddedRatio'):
|
if attr.__contains__('AddedRatio'):
|
||||||
attr_name = attr.split('AddedRatio')[0]
|
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(
|
logger.info(
|
||||||
f'{attr} 对 {self.avatar.avatar_element} '
|
f'{attr} 对 {self.avatar.avatar_element} '
|
||||||
f'有 {merged_attr[attr]} 伤害加成'
|
f'有 {merged_attr[attr]} 伤害加成'
|
||||||
@ -285,7 +319,7 @@ class RoleInstance:
|
|||||||
critical_chance_base = min(1, merged_attr['CriticalChanceBase'])
|
critical_chance_base = min(1, merged_attr['CriticalChanceBase'])
|
||||||
logger.info(f'暴击: {critical_chance_base}')
|
logger.info(f'暴击: {critical_chance_base}')
|
||||||
|
|
||||||
#期望伤害
|
# 期望伤害
|
||||||
qiwang_damage = (critical_chance_base * critical_damage_base) + 1
|
qiwang_damage = (critical_chance_base * critical_damage_base) + 1
|
||||||
logger.info(f'暴击期望: {qiwang_damage}')
|
logger.info(f'暴击期望: {qiwang_damage}')
|
||||||
damage_cd_z = 0
|
damage_cd_z = 0
|
||||||
@ -294,7 +328,7 @@ class RoleInstance:
|
|||||||
attack_tz = 0
|
attack_tz = 0
|
||||||
injury_add = 0
|
injury_add = 0
|
||||||
critical_damage_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}')
|
logger.info(f'段数: {i}')
|
||||||
injury_add = 0
|
injury_add = 0
|
||||||
critical_damage_add = 0
|
critical_damage_add = 0
|
||||||
@ -303,17 +337,16 @@ class RoleInstance:
|
|||||||
critical_damage_add = self.avatar.BPSkill()
|
critical_damage_add = self.avatar.BPSkill()
|
||||||
normal_buff = merged_attr.get('Normal_buff', 0)
|
normal_buff = merged_attr.get('Normal_buff', 0)
|
||||||
if i >= 4:
|
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:
|
if normal_buff >= 1:
|
||||||
critical_damage_add = normal_buff * critical_damage_add
|
critical_damage_add = normal_buff * critical_damage_add
|
||||||
atk_buff = merged_attr.get('Atk_buff', 0)
|
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
|
injury_add = atk_buff * injury_add
|
||||||
qiwang_damage = (
|
qiwang_damage = (
|
||||||
(critical_chance_base *
|
critical_chance_base
|
||||||
(critical_damage_base + critical_damage_add))
|
* (critical_damage_base + critical_damage_add)
|
||||||
+ 1
|
) + 1
|
||||||
)
|
|
||||||
|
|
||||||
damage_cd = (
|
damage_cd = (
|
||||||
attack
|
attack
|
||||||
@ -338,10 +371,13 @@ class RoleInstance:
|
|||||||
)
|
)
|
||||||
damage_qw_z += damage_qw
|
damage_qw_z += damage_qw
|
||||||
|
|
||||||
attr_value_tz: float= self.base_attr.get('attack', 0)
|
attr_value_tz: float = self.base_attr.get('attack', 0)
|
||||||
attack_tz = attr_value_tz + attr_value_tz * (
|
attack_tz = (
|
||||||
1 + self.attribute_bonus['AttackAddedRatio'] + 2.144
|
attr_value_tz
|
||||||
) + self.attribute_bonus['AttackDelta']
|
+ attr_value_tz
|
||||||
|
* (1 + self.attribute_bonus['AttackAddedRatio'] + 2.144)
|
||||||
|
+ self.attribute_bonus['AttackDelta']
|
||||||
|
)
|
||||||
injury_add_tz = 0
|
injury_add_tz = 0
|
||||||
if self.avatar.avatar_element == 'Imaginary':
|
if self.avatar.avatar_element == 'Imaginary':
|
||||||
injury_add_tz = 0.12
|
injury_add_tz = 0.12
|
||||||
@ -358,9 +394,6 @@ class RoleInstance:
|
|||||||
)
|
)
|
||||||
|
|
||||||
damage_tz_z += damage_tz
|
damage_tz_z += damage_tz
|
||||||
logger.info(
|
|
||||||
f'{skill_info[1]}第{i}段 暴击伤害: {damage_cd} 期望伤害{damage_qw}'
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.avatar.avatar_element == 'Thunder':
|
if self.avatar.avatar_element == 'Thunder':
|
||||||
element_area = 0
|
element_area = 0
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,7 @@ from typing import Dict
|
|||||||
async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
|
async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
|
||||||
# hp attack defence need base_value and add_value
|
# hp attack defence need base_value and add_value
|
||||||
merged_attr = {}
|
merged_attr = {}
|
||||||
|
attr_list = ['attack', 'defence', 'hp', 'speed']
|
||||||
for attribute in attribute_bonus:
|
for attribute in attribute_bonus:
|
||||||
if (
|
if (
|
||||||
attribute.__contains__('Attack')
|
attribute.__contains__('Attack')
|
||||||
@ -13,10 +14,12 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
|
|||||||
):
|
):
|
||||||
if attribute.__contains__('Delta'):
|
if attribute.__contains__('Delta'):
|
||||||
attr = attribute.split('Delta')[0].lower()
|
attr = attribute.split('Delta')[0].lower()
|
||||||
|
if attr in attr_list:
|
||||||
attr_value = merged_attr.get(attr, 0)
|
attr_value = merged_attr.get(attr, 0)
|
||||||
merged_attr[attr] = attr_value + attribute_bonus[attribute]
|
merged_attr[attr] = attr_value + attribute_bonus[attribute]
|
||||||
elif attribute.__contains__('AddedRatio'):
|
elif attribute.__contains__('AddedRatio'):
|
||||||
attr = attribute.split('AddedRatio')[0].lower()
|
attr = attribute.split('AddedRatio')[0].lower()
|
||||||
|
if attr in attr_list:
|
||||||
attr_value = merged_attr.get(attr, 0)
|
attr_value = merged_attr.get(attr, 0)
|
||||||
merged_attr[attr] = attr_value + base_attr[attr] * (
|
merged_attr[attr] = attr_value + base_attr[attr] * (
|
||||||
1 + attribute_bonus[attribute]
|
1 + attribute_bonus[attribute]
|
||||||
@ -49,5 +52,5 @@ async def merge_attribute(base_attr: Dict, attribute_bonus: Dict) -> Dict:
|
|||||||
attr_value = base_attr.get(attribute, 0)
|
attr_value = base_attr.get(attribute, 0)
|
||||||
merged_attr[attribute] = attr_value + attribute_bonus[attribute]
|
merged_attr[attribute] = attr_value + attribute_bonus[attribute]
|
||||||
else:
|
else:
|
||||||
raise Exception(f'attribute error {attribute}')
|
continue
|
||||||
return merged_attr
|
return merged_attr
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import json
|
import json
|
||||||
from collections import Counter
|
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
from loguru import logger
|
|
||||||
from mpmath import mp
|
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
|
mp.dps = 14
|
||||||
|
|
||||||
|
@ -4,13 +4,13 @@ from typing import List, Union
|
|||||||
|
|
||||||
from PIL import Image, ImageDraw
|
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 .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)
|
half_color = (255, 255, 255, 120)
|
||||||
first_color = (29, 29, 29)
|
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)
|
return await draw_enka_card(uid=uid, char_list=char_data_list, showfrom=1)
|
||||||
|
|
||||||
|
|
||||||
async def draw_enka_card(
|
async def draw_enka_card(uid: str, char_list: List, showfrom: int = 0):
|
||||||
uid: str, char_list: List, showfrom: int = 0
|
|
||||||
):
|
|
||||||
char_data_list = []
|
char_data_list = []
|
||||||
if 1102 in char_list:
|
if 1102 in char_list:
|
||||||
char_list.remove(1102)
|
char_list.remove(1102)
|
||||||
|
@ -1,36 +1,36 @@
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
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 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 import MihomoData
|
||||||
from ..sruid_utils.api.mihomo.models import Avatar
|
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 ..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.excel.read_excel import AvatarPromotion, EquipmentPromotion
|
||||||
from ..utils.map.SR_MAP_PATH import (
|
from ..utils.map.SR_MAP_PATH import (
|
||||||
EquipmentID2Name,
|
SetId2Name,
|
||||||
EquipmentID2Rarity,
|
|
||||||
ItemId2Name,
|
ItemId2Name,
|
||||||
Property2Name,
|
Property2Name,
|
||||||
RelicId2SetId,
|
RelicId2SetId,
|
||||||
SetId2Name,
|
EquipmentID2Name,
|
||||||
avatarId2DamageType,
|
EquipmentID2Rarity,
|
||||||
avatarId2EnName,
|
rankId2Name,
|
||||||
|
skillId2Name,
|
||||||
avatarId2Name,
|
avatarId2Name,
|
||||||
|
skillId2Effect,
|
||||||
|
avatarId2EnName,
|
||||||
avatarId2Rarity,
|
avatarId2Rarity,
|
||||||
characterSkillTree,
|
characterSkillTree,
|
||||||
rankId2Name,
|
|
||||||
skillId2AttackType,
|
skillId2AttackType,
|
||||||
skillId2Effect,
|
avatarId2DamageType,
|
||||||
skillId2Name,
|
|
||||||
)
|
)
|
||||||
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
|
mp.dps = 14
|
||||||
|
|
||||||
@ -65,9 +65,7 @@ async def api_to_dict(
|
|||||||
PlayerDetailInfo = sr_data['detailInfo']
|
PlayerDetailInfo = sr_data['detailInfo']
|
||||||
path = PLAYER_PATH / str(sr_uid)
|
path = PLAYER_PATH / str(sr_uid)
|
||||||
path.mkdir(parents=True, exist_ok=True)
|
path.mkdir(parents=True, exist_ok=True)
|
||||||
with Path.open(
|
with Path.open(path / f'{sr_uid!s}.json', 'w', encoding='UTF-8') as file:
|
||||||
path / f'{sr_uid!s}.json', 'w', encoding='UTF-8'
|
|
||||||
) as file:
|
|
||||||
json.dump(PlayerDetailInfo, file, ensure_ascii=False)
|
json.dump(PlayerDetailInfo, file, ensure_ascii=False)
|
||||||
with Path.open(path / 'rawData.json', 'w', encoding='UTF-8') as file:
|
with Path.open(path / 'rawData.json', 'w', encoding='UTF-8') as file:
|
||||||
json.dump(sr_data, file, ensure_ascii=False)
|
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
|
char_data['equipmentInfo'] = equipment_info
|
||||||
|
|
||||||
with Path.open(
|
with Path.open(path / f'{avatarName}.json', 'w', encoding='UTF-8') as file:
|
||||||
path / f'{avatarName}.json', 'w', encoding='UTF-8'
|
|
||||||
) as file:
|
|
||||||
json.dump(char_data, file, ensure_ascii=False)
|
json.dump(char_data, file, ensure_ascii=False)
|
||||||
return char_data, avatarName
|
return char_data, avatarName
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.sv import SV
|
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
from ..utils.error_reply import UID_HINT
|
|
||||||
from ..utils.sr_prefix import PREFIX
|
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 .get_gachalogs import save_gachalogs
|
||||||
|
from .draw_gachalogs import draw_gachalogs_img
|
||||||
|
|
||||||
sv_gacha_log = SV('sr抽卡记录')
|
sv_gacha_log = SV('sr抽卡记录')
|
||||||
sv_get_gachalog_by_link = SV('sr导入抽卡链接', area='DIRECT')
|
sv_get_gachalog_by_link = SV('sr导入抽卡链接', area='DIRECT')
|
||||||
|
@ -1,18 +1,24 @@
|
|||||||
|
import json
|
||||||
import asyncio
|
import asyncio
|
||||||
import datetime
|
import datetime
|
||||||
import json
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Tuple, Union
|
from typing import List, Tuple, Union
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import (
|
||||||
draw_pic_with_ring,
|
|
||||||
get_color_bg,
|
get_color_bg,
|
||||||
get_qq_avatar,
|
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 (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_20,
|
sr_font_20,
|
||||||
sr_font_24,
|
sr_font_24,
|
||||||
@ -20,13 +26,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_38,
|
sr_font_38,
|
||||||
sr_font_40,
|
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'
|
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
||||||
EMO_PATH = Path(__file__).parent / 'texture2d' / 'emo'
|
EMO_PATH = Path(__file__).parent / 'texture2d' / 'emo'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import asyncio
|
|
||||||
import json
|
import json
|
||||||
from datetime import datetime
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, Optional
|
|
||||||
from urllib import parse
|
from urllib import parse
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Dict, Optional
|
||||||
|
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
import json
|
import json
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
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.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.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'
|
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:
|
if last_monthly_data:
|
||||||
pie_image = Image.new("RGBA", (2100, 2100), color=(255, 255, 255, 0))
|
pie_image = Image.new("RGBA", (2100, 2100), color=(255, 255, 255, 0))
|
||||||
pie_image_draw = ImageDraw.Draw(pie_image)
|
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(
|
pie_image_draw.pieslice(
|
||||||
xy,
|
xy,
|
||||||
temp,
|
temp,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from ..utils.error_reply import get_error
|
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
|
from ..utils.error_reply import get_error
|
||||||
|
|
||||||
month_im = """==============
|
month_im = """==============
|
||||||
SR_UID:{}
|
SR_UID:{}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.sv import SV
|
|
||||||
from gsuid_core.utils.error_reply import UID_HINT
|
from gsuid_core.utils.error_reply import UID_HINT
|
||||||
|
|
||||||
from ..utils.convert import get_uid
|
from ..utils.convert import get_uid
|
||||||
|
@ -1,30 +1,29 @@
|
|||||||
import math
|
import math
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Optional, Union
|
from typing import List, Union, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.error_reply import get_error
|
from gsuid_core.utils.error_reply import get_error
|
||||||
from gsuid_core.utils.image.image_tools import (
|
from gsuid_core.utils.image.image_tools import (
|
||||||
draw_pic_with_ring,
|
|
||||||
get_qq_avatar,
|
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 (
|
from ..sruid_utils.api.mys.models import (
|
||||||
RogueAvatar,
|
RogueAvatar,
|
||||||
RogueBuffitems,
|
|
||||||
RogueMiracles,
|
RogueMiracles,
|
||||||
|
RogueBuffitems,
|
||||||
)
|
)
|
||||||
from ..utils.convert import GsCookie
|
|
||||||
from ..utils.fonts.starrail_fonts import (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_28,
|
sr_font_28,
|
||||||
sr_font_34,
|
sr_font_34,
|
||||||
sr_font_42,
|
sr_font_42,
|
||||||
)
|
)
|
||||||
from ..utils.image.convert import convert_img
|
|
||||||
from .utils import get_icon
|
|
||||||
|
|
||||||
TEXT_PATH = Path(__file__).parent / 'texture2D'
|
TEXT_PATH = Path(__file__).parent / 'texture2D'
|
||||||
white_color = (255, 255, 255)
|
white_color = (255, 255, 255)
|
||||||
|
@ -2,9 +2,8 @@ from io import BytesIO
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TypeVar
|
from typing import TypeVar
|
||||||
|
|
||||||
from aiohttp import ClientSession
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
from aiohttp import ClientSession
|
||||||
from gsuid_core.data_store import get_res_path
|
from gsuid_core.data_store import get_res_path
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Optional, Union
|
from typing import Dict, List, Union, Optional
|
||||||
|
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.utils.error_reply import get_error
|
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.mys_api import mys_api
|
||||||
from .utils import get_icon, wrap_list
|
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'
|
TEXT_PATH = Path(__file__).parent / 'texture2D'
|
||||||
|
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from pathlib import Path
|
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 PIL import Image
|
||||||
|
from aiohttp import ClientSession
|
||||||
from gsuid_core.data_store import get_res_path
|
from gsuid_core.data_store import get_res_path
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import asyncio
|
|
||||||
import random
|
import random
|
||||||
|
import asyncio
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from gsuid_core.gss import gss
|
from gsuid_core.gss import gss
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
from gsuid_core.utils.plugins_config.gs_config import core_plugins_config
|
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.api import get_sqla
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
|
from ..starrailuid_config.sr_config import srconfig
|
||||||
|
|
||||||
private_msg_list = {}
|
private_msg_list = {}
|
||||||
group_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:
|
if core_plugins_config.get_config('CaptchaPass').data:
|
||||||
gt = sign_data['gt']
|
gt = sign_data['gt']
|
||||||
ch = sign_data['challenge']
|
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:
|
if vl:
|
||||||
delay = 1
|
delay = 1
|
||||||
Header['x-rpc-challenge'] = ch
|
Header['x-rpc-challenge'] = ch
|
||||||
|
@ -5,12 +5,14 @@ from typing import Optional
|
|||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
from PIL import Image, ImageDraw
|
from PIL import Image, ImageDraw
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
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 ..sruid_utils.api.mys.models import Expedition
|
||||||
from ..starrailuid_config.sr_config import srconfig
|
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 (
|
from ..utils.fonts.starrail_fonts import (
|
||||||
sr_font_22,
|
sr_font_22,
|
||||||
sr_font_24,
|
sr_font_24,
|
||||||
@ -18,9 +20,6 @@ from ..utils.fonts.starrail_fonts import (
|
|||||||
sr_font_36,
|
sr_font_36,
|
||||||
sr_font_50,
|
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
|
use_widget = srconfig.get_config('WidgetResin').data
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@ from typing import Dict
|
|||||||
from gsuid_core.gss import gss
|
from gsuid_core.gss import gss
|
||||||
from gsuid_core.logger import logger
|
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.api import get_sqla
|
||||||
from ..utils.mys_api import mys_api
|
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'
|
MR_NOTICE = '\n可发送[srmr]或者[sr每日]来查看更多信息!\n'
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ from typing import List
|
|||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
|
||||||
from ..utils.error_reply import get_error
|
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
|
from ..utils.error_reply import get_error
|
||||||
|
|
||||||
daily_im = """*数据刷新可能存在一定延迟,请以当前游戏实际数据为准
|
daily_im = """*数据刷新可能存在一定延迟,请以当前游戏实际数据为准
|
||||||
==============
|
==============
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from gsuid_core.sv import SV
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.sv import SV
|
|
||||||
|
|
||||||
from ..utils.api import get_sqla
|
from ..utils.api import get_sqla
|
||||||
from ..utils.message import send_diff_msg
|
|
||||||
from ..utils.sr_prefix import PREFIX
|
from ..utils.sr_prefix import PREFIX
|
||||||
|
from ..utils.message import send_diff_msg
|
||||||
from .draw_user_card import get_user_card
|
from .draw_user_card import get_user_card
|
||||||
|
|
||||||
sv_user_config = SV('sr用户管理', pm=2)
|
sv_user_config = SV('sr用户管理', pm=2)
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
from http.cookies import SimpleCookie
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
from http.cookies import SimpleCookie
|
||||||
|
|
||||||
from ..utils.api import get_sqla
|
from ..utils.api import get_sqla
|
||||||
from ..utils.error_reply import UID_HINT
|
|
||||||
from ..utils.mys_api import mys_api
|
from ..utils.mys_api import mys_api
|
||||||
|
from ..utils.error_reply import UID_HINT
|
||||||
|
|
||||||
pic_path = Path(__file__).parent / 'pic'
|
pic_path = Path(__file__).parent / 'pic'
|
||||||
id_list = [
|
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
|
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'):
|
async def deal_ck(bot_id: str, mes: str, user_id: str, mode: str = 'PIC'):
|
||||||
im = await _deal_ck(bot_id, mes, user_id)
|
im = await _deal_ck(bot_id, mes, user_id)
|
||||||
if mode == 'PIC':
|
if mode == 'PIC':
|
||||||
@ -236,10 +235,8 @@ async def _deal_ck(bot_id: str, mes: str, user_id: str) -> str:
|
|||||||
'Cookies和Stoken属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!'
|
'Cookies和Stoken属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!'
|
||||||
)
|
)
|
||||||
im_list.append(
|
im_list.append(
|
||||||
|
|
||||||
'如果需要【sr开启自动签到】和【sr开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。'
|
'如果需要【sr开启自动签到】和【sr开启推送】还需要在【群聊中】使用命令“绑定uid”绑定你的uid。'
|
||||||
'\n例如:绑定uid123456789。'
|
'\n例如:绑定uid123456789。'
|
||||||
|
|
||||||
)
|
)
|
||||||
im_list.append('你可以使用命令【sr绑定信息】检查你的账号绑定情况!')
|
im_list.append('你可以使用命令【sr绑定信息】检查你的账号绑定情况!')
|
||||||
return '\n'.join(im_list)
|
return '\n'.join(im_list)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# from pathlib import Path
|
# from pathlib import Path
|
||||||
from typing import Optional, Tuple
|
from typing import Tuple, Optional
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
import asyncio
|
|
||||||
import base64
|
|
||||||
import io
|
import io
|
||||||
import json
|
import json
|
||||||
|
import base64
|
||||||
|
import asyncio
|
||||||
from http.cookies import SimpleCookie
|
from http.cookies import SimpleCookie
|
||||||
from typing import Any, List, Literal, Tuple, Union
|
from typing import Any, List, Tuple, Union, Literal
|
||||||
|
|
||||||
import qrcode
|
import qrcode
|
||||||
from qrcode.constants import ERROR_CORRECT_L
|
|
||||||
|
|
||||||
from gsuid_core.bot import Bot
|
from gsuid_core.bot import Bot
|
||||||
from gsuid_core.logger import logger
|
|
||||||
from gsuid_core.models import Event
|
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 gsuid_core.segment import MessageSegment
|
||||||
|
|
||||||
from ..utils.api import get_sqla
|
from ..utils.api import get_sqla
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import re
|
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.bot import Bot
|
||||||
from gsuid_core.models import Event
|
from gsuid_core.models import Event
|
||||||
from gsuid_core.utils.api.mys.models import IndexData
|
from gsuid_core.utils.api.mys.models import IndexData
|
||||||
|
|
||||||
from ..sruid_utils.api.mys.models import AbyssData, RogueData
|
|
||||||
from .api import get_sqla
|
from .api import get_sqla
|
||||||
from .error_reply import VERIFY_HINT
|
|
||||||
from .mys_api import mys_api
|
from .mys_api import mys_api
|
||||||
|
from .error_reply import VERIFY_HINT
|
||||||
|
from ..sruid_utils.api.mys.models import AbyssData, RogueData
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from base64 import b64encode
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from base64 import b64encode
|
||||||
from typing import Union, overload
|
from typing import Union, overload
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
|
@ -156,7 +156,9 @@ for skill in AvatarSkillConfig:
|
|||||||
for avatar_property in AvatarPropertyConfig:
|
for avatar_property in AvatarPropertyConfig:
|
||||||
PropertyType = AvatarPropertyConfig[avatar_property]['PropertyType']
|
PropertyType = AvatarPropertyConfig[avatar_property]['PropertyType']
|
||||||
PropertyName = AvatarPropertyConfig[avatar_property]['PropertyName']
|
PropertyName = AvatarPropertyConfig[avatar_property]['PropertyName']
|
||||||
PropertyNameHash = AvatarPropertyConfig[avatar_property]['PropertyNameFilter']['Hash']
|
PropertyNameHash = AvatarPropertyConfig[avatar_property][
|
||||||
|
'PropertyNameFilter'
|
||||||
|
]['Hash']
|
||||||
for item in TextMapCN:
|
for item in TextMapCN:
|
||||||
if str(item) == str(PropertyNameHash):
|
if str(item) == str(PropertyNameHash):
|
||||||
Property_Name = TextMapCN[item]
|
Property_Name = TextMapCN[item]
|
||||||
@ -180,7 +182,11 @@ for set_group in RelicSetConfig:
|
|||||||
|
|
||||||
for character in characters:
|
for character in characters:
|
||||||
char_id = characters[character]['id']
|
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']
|
skill_tree_list = characters[character]['skill_trees']
|
||||||
for skill in skill_tree_list:
|
for skill in skill_tree_list:
|
||||||
skill_tree = character_skill_trees[skill]
|
skill_tree = character_skill_trees[skill]
|
||||||
@ -191,8 +197,14 @@ for set_ in RelicSetSkillConfig:
|
|||||||
for item in RelicSetSkillConfig[set_]:
|
for item in RelicSetSkillConfig[set_]:
|
||||||
set_id = RelicSetSkillConfig[set_][item]['SetID']
|
set_id = RelicSetSkillConfig[set_][item]['SetID']
|
||||||
property_list = RelicSetSkillConfig[set_][item]['PropertyList']
|
property_list = RelicSetSkillConfig[set_][item]['PropertyList']
|
||||||
RelicSetSkill[set_] = {} if set_ not in RelicSetSkill else RelicSetSkill[set_]
|
RelicSetSkill[set_] = (
|
||||||
RelicSetSkill[set_][item] = {} if item not in RelicSetSkill[set_] else RelicSetSkill[set_][item]
|
{} 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:
|
for property_ in property_list:
|
||||||
property_id = property_['NAOGDGBJNOJ']
|
property_id = property_['NAOGDGBJNOJ']
|
||||||
property_value = property_['MBOHKHKHFPD']['Value']
|
property_value = property_['MBOHKHKHFPD']['Value']
|
||||||
@ -234,7 +246,9 @@ Property2Name = json.dumps(Property2Name, ensure_ascii=False)
|
|||||||
Relic2SetId = json.dumps(Relic2SetId, ensure_ascii=False)
|
Relic2SetId = json.dumps(Relic2SetId, ensure_ascii=False)
|
||||||
SetId2Name = json.dumps(SetId2Name, ensure_ascii=False)
|
SetId2Name = json.dumps(SetId2Name, ensure_ascii=False)
|
||||||
characterSkillTree = json.dumps(characterSkillTree, 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)
|
RelicSetSkill = json.dumps(RelicSetSkill, ensure_ascii=False)
|
||||||
skillId2AttackType = json.dumps(skillId2AttackType, ensure_ascii=False)
|
skillId2AttackType = json.dumps(skillId2AttackType, ensure_ascii=False)
|
||||||
EquipmentID2Rarity = json.dumps(EquipmentID2Rarity, ensure_ascii=False)
|
EquipmentID2Rarity = json.dumps(EquipmentID2Rarity, ensure_ascii=False)
|
||||||
|
@ -2,13 +2,12 @@ import asyncio
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Tuple, Union
|
from typing import Dict, List, Tuple, Union
|
||||||
|
|
||||||
from aiohttp.client import ClientSession
|
|
||||||
from msgspec import json as msgjson
|
from msgspec import json as msgjson
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from gsuid_core.logger import logger
|
||||||
|
from aiohttp.client import ClientSession
|
||||||
|
|
||||||
from .download_url import download_file
|
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(
|
with Path.open(
|
||||||
Path(__file__).parent / 'resource_map.json', encoding='UTF-8'
|
Path(__file__).parent / 'resource_map.json', encoding='UTF-8'
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
from typing import Optional, Tuple
|
from typing import Tuple, Optional
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
|
from gsuid_core.logger import logger
|
||||||
from aiohttp.client import ClientSession
|
from aiohttp.client import ClientSession
|
||||||
from aiohttp.client_exceptions import ClientConnectorError
|
from aiohttp.client_exceptions import ClientConnectorError
|
||||||
|
|
||||||
from gsuid_core.logger import logger
|
from .RESOURCE_PATH import WIKI_PATH, GUIDE_PATH, RESOURCE_PATH
|
||||||
|
|
||||||
from .RESOURCE_PATH import GUIDE_PATH, RESOURCE_PATH, WIKI_PATH
|
|
||||||
|
|
||||||
PATHDICT = {
|
PATHDICT = {
|
||||||
'resource': RESOURCE_PATH,
|
'resource': RESOURCE_PATH,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user