再加点typing

This commit is contained in:
qwerdvd 2023-09-11 15:17:10 +08:00
parent 16942a83a0
commit 070bce4132
7 changed files with 130 additions and 86 deletions

View File

@ -1,9 +1,9 @@
from typing import List from typing import Dict, List
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 DamageInstanceSkill, DamageInstanceAvatar from ..Base.model import DamageInstanceAvatar, DamageInstanceSkill
class Seele(BaseAvatar): class Seele(BaseAvatar):
@ -13,8 +13,8 @@ class Seele(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -41,8 +41,8 @@ class JingYuan(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -72,8 +72,8 @@ class Clara(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -98,8 +98,8 @@ class Danhengil(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -129,8 +129,8 @@ class Silverwolf(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -164,8 +164,8 @@ class Kafka(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -189,8 +189,8 @@ class Blade(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -217,8 +217,8 @@ class Fuxuan(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -240,8 +240,8 @@ class Gepard(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -262,8 +262,8 @@ class Yanqing(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -297,8 +297,8 @@ class Welt(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -322,8 +322,8 @@ class Himeko(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -351,8 +351,8 @@ class Qingque(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()
@ -383,8 +383,8 @@ class Jingliu(BaseAvatar):
self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill] self, char: DamageInstanceAvatar, skills: List[DamageInstanceSkill]
): ):
super().__init__(char=char, skills=skills) super().__init__(char=char, skills=skills)
self.eidolon_attribute = {} self.eidolon_attribute: Dict[str, float] = {}
self.extra_ability_attribute = {} self.extra_ability_attribute: Dict[str, float] = {}
self.eidolons() self.eidolons()
self.extra_ability() self.extra_ability()

View File

@ -111,66 +111,74 @@ class BaseAvatar:
skill_info_ = msgspec.convert(skill_info, type=List[Union[str, int]]) skill_info_ = msgspec.convert(skill_info, type=List[Union[str, int]])
return skill_info_ return skill_info_
def Normalnum(self, skill_type: str) -> float: def Normalnum(self, skill_type: str):
return skill_dict[str(self.avatar_id)][skill_type][ skill_info = skill_dict[str(self.avatar_id)][skill_type][
self.Skill.Normal_.level - 1 self.Skill.Normal_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Normal(self) -> float: def Normal(self):
return skill_dict[str(self.avatar_id)]['Normal'][ skill_info = skill_dict[str(self.avatar_id)]['Normal'][
self.Skill.Normal_.level - 1 self.Skill.Normal_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def BPSkill(self) -> float: def BPSkill(self):
return skill_dict[str(self.avatar_id)]['BPSkill'][ skill_info = skill_dict[str(self.avatar_id)]['BPSkill'][
self.Skill.BPSkill_.level - 1 self.Skill.BPSkill_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Ultra(self) -> float: def Ultra(self):
return skill_dict[str(self.avatar_id)]['Ultra'][ skill_info = skill_dict[str(self.avatar_id)]['Ultra'][
self.Skill.Ultra_.level - 1 self.Skill.Ultra_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Maze(self) -> float: def Maze(self):
return skill_dict[str(self.avatar_id)]['Maze'][ skill_info = skill_dict[str(self.avatar_id)]['Maze'][
self.Skill.Maze_.level - 1 self.Skill.Maze_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Talent(self) -> float: def Talent(self):
return skill_dict[str(self.avatar_id)]['Talent'][ skill_info = skill_dict[str(self.avatar_id)]['Talent'][
self.Skill.Talent_.level - 1 self.Skill.Talent_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def BPSkill_num(self, skill_type: str) -> float: def BPSkill_num(self, skill_type: str):
return skill_dict[str(self.avatar_id)][skill_type][ skill_info = skill_dict[str(self.avatar_id)][skill_type][
self.Skill.BPSkill_.level - 1 self.Skill.BPSkill_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Ultra_num(self, skill_type: str) -> float: def Ultra_num(self, skill_type: str):
return skill_dict[str(self.avatar_id)][skill_type][ skill_info = skill_dict[str(self.avatar_id)][skill_type][
self.Skill.Ultra_.level - 1 self.Skill.Ultra_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Talent_num(self, skill_type: str) -> float: def Talent_num(self, skill_type: str):
return skill_dict[str(self.avatar_id)][skill_type][ skill_info = skill_dict[str(self.avatar_id)][skill_type][
self.Skill.Talent_.level - 1 self.Skill.Talent_.level - 1
] ]
return msgspec.convert(skill_info, type=float)
def Talent_add(self) -> float: def Talent_add(self):
if self.avatar_id in [1102]: if self.avatar_id in [1102]:
return float( skill_info = skill_dict[str(self.avatar_id)]['Talent'][
skill_dict[str(self.avatar_id)]['Talent'][
self.Skill.Talent_.level - 1 self.Skill.Talent_.level - 1
] ]
) return msgspec.convert(skill_info, type=float)
elif self.avatar_id in [1205]: elif self.avatar_id in [1205]:
return float( skill_info = skill_dict[str(self.avatar_id)]['BPSkill'][
skill_dict[str(self.avatar_id)]['BPSkill'][
self.Skill.BPSkill_.level - 1 self.Skill.BPSkill_.level - 1
] ]
) return msgspec.convert(skill_info, type=float)
else: else:
return float(0) return 0.0
def Ultra_Use(self) -> float: def Ultra_Use(self):
return skill_dict[str(self.avatar_id)]['Ultra_Use'][0] skill_info = skill_dict[str(self.avatar_id)]['Ultra_Use'][0]
return msgspec.convert(skill_info, type=float)

View File

@ -14,7 +14,7 @@ class SingleRelic:
self.set_id = relic.SetId self.set_id = relic.SetId
self.relic_type = relic.Type self.relic_type = relic.Type
self.relic_level = relic.Level self.relic_level = relic.Level
self.relic_attribute_bonus = {} self.relic_attribute_bonus: Dict[str, float] = {}
def get_attribute_(self): def get_attribute_(self):
# MainAffix # MainAffix
@ -51,8 +51,7 @@ class BaseRelicSetSkill:
if count == 4: if count == 4:
self.pieces4 = True self.pieces4 = True
logger.info(f'Relic {set_id} 4 pieces set activated') logger.info(f'Relic {set_id} 4 pieces set activated')
self.relicSetAttribute: Dict[str, float] = {} self.relicSetAttribute = self.set_skill_property_ability()
self.set_skill_property_ability()
@abstractmethod @abstractmethod
async def check( async def check(
@ -72,17 +71,22 @@ class BaseRelicSetSkill:
def set_skill_property_ability(self): def set_skill_property_ability(self):
set_property = '' set_property = ''
set_value = 0 set_value = 0
if self.pieces2 and RelicSetSkill[str(self.setId)]['2'] != {}: relic_set_attribute: Dict[str, float] = {}
set_property = RelicSetSkill[str(self.setId)]['2']['Property'] if self.pieces2:
set_value = RelicSetSkill[str(self.setId)]['2']['Value'] status_add = RelicSetSkill.RelicSet[str(self.setId)]['2']
if self.pieces4 and RelicSetSkill[str(self.setId)]['4'] != {}: if status_add:
set_property = RelicSetSkill[str(self.setId)]['4']['Property'] set_property = status_add.Property
set_value = RelicSetSkill[str(self.setId)]['4']['Value'] set_value = status_add.Value
if self.pieces4:
status_add = RelicSetSkill.RelicSet[str(self.setId)]['4']
if status_add:
set_property = status_add.Property
set_value = status_add.Value
if set_property != '': if set_property != '':
if set_property in self.relicSetAttribute: if set_property in relic_set_attribute:
self.relicSetAttribute[set_property] = ( relic_set_attribute[set_property] = (
self.relicSetAttribute[set_property] + set_value relic_set_attribute[set_property] + set_value
) )
else: else:
self.relicSetAttribute[set_property] = set_value relic_set_attribute[set_property] = set_value
return self.relicSetAttribute return relic_set_attribute

View File

@ -1,11 +1,11 @@
from typing import Dict
from abc import abstractmethod from abc import abstractmethod
from typing import Dict
from msgspec import Struct from msgspec import Struct
from .model import DamageInstanceWeapon
from ....utils.excel.model import EquipmentPromotionConfig from ....utils.excel.model import EquipmentPromotionConfig
from ....utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty from ....utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty
from .model import DamageInstanceWeapon
class BaseWeaponAttribute(Struct): class BaseWeaponAttribute(Struct):
@ -28,7 +28,7 @@ class BaseWeapon:
self.weapon_rank = weapon.rank self.weapon_rank = weapon.rank
self.weapon_promotion = weapon.promotion self.weapon_promotion = weapon.promotion
self.weapon_base_attribute = self.get_attribute() self.weapon_base_attribute = self.get_attribute()
self.weapon_attribute = {} self.weapon_attribute: Dict[str, float] = {}
self.get_attribute() self.get_attribute()
self.weapon_property_ability() self.weapon_property_ability()

View File

@ -1,10 +1,10 @@
import json import json
from typing import Dict
from collections import Counter from collections import Counter
from typing import Dict, List
from loguru import logger from loguru import logger
from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty from ...utils.map.SR_MAP_PATH import EquipmentID2AbilityProperty, RelicSetSkill
class Character: class Character:
@ -74,7 +74,7 @@ class Character:
async def get_relic_info(self): async def get_relic_info(self):
# 计算圣遗物效果 # 计算圣遗物效果
set_id_list = [] set_id_list: List[int] = []
for relic in self.char_relic: for relic in self.char_relic:
set_id_list.append(relic['SetId']) set_id_list.append(relic['SetId'])
# 处理主属性 # 处理主属性
@ -103,12 +103,16 @@ class Character:
set_id = item[0] set_id = item[0]
count = item[1] count = item[1]
set_value = 0 set_value = 0
if count >= 2 and RelicSetSkill[str(set_id)]['2'] != {}: if count >= 2:
set_property = RelicSetSkill[str(set_id)]['2']['Property'] status_add = RelicSetSkill.RelicSet[str(set_id)]['2']
set_value = RelicSetSkill[str(set_id)]['2']['Value'] if status_add:
if count == 4 and RelicSetSkill[str(set_id)]['4'] != {}: set_property = status_add.Property
set_property = RelicSetSkill[str(set_id)]['4']['Property'] set_value = status_add.Value
set_value = RelicSetSkill[str(set_id)]['4']['Value'] if count == 4:
status_add = RelicSetSkill.RelicSet[str(set_id)]['4']
if status_add:
set_property = status_add.Property
set_value = status_add.Value
if set_property != '': if set_property != '':
if set_property in self.add_attr: if set_property in self.add_attr:
self.add_attr[set_property] = ( self.add_attr[set_property] = (

View File

@ -1,9 +1,11 @@
import json
from pathlib import Path from pathlib import Path
from typing import Dict, List, Union, TypedDict from typing import Dict, List, TypedDict, Union
from msgspec import json as msgjson from msgspec import json as msgjson
from ...version import StarRail_version from ...version import StarRail_version
from .model.RelicSetSkill import RelicSetSkillModel
MAP = Path(__file__).parent / 'data' MAP = Path(__file__).parent / 'data'
@ -97,7 +99,8 @@ with Path.open(
) )
with Path.open(MAP / RelicSetSkill_fileName, encoding='UTF-8') as f: with Path.open(MAP / RelicSetSkill_fileName, encoding='UTF-8') as f:
RelicSetSkill = msgjson.decode(f.read(), type=Dict[str, Dict]) data = json.load(f)
RelicSetSkill = RelicSetSkillModel.from_json(data)
with Path.open(MAP / skillId2AttackType_fileName, encoding='UTF-8') as f: with Path.open(MAP / skillId2AttackType_fileName, encoding='UTF-8') as f:
skillId2AttackType = msgjson.decode(f.read(), type=Dict[str, str]) skillId2AttackType = msgjson.decode(f.read(), type=Dict[str, str])

View File

@ -0,0 +1,25 @@
from typing import Dict, Union
from msgspec import Struct
class RelicSetStatusAdd(Struct):
Property: str
Value: float
class RelicSetSkillModel(Struct):
RelicSet: Dict[str, Dict[str, Union[RelicSetStatusAdd, None]]]
@classmethod
def from_json(cls, data: Dict):
return cls(RelicSet={
str(k): {
str(k2): RelicSetStatusAdd(
Property=v2['Property'],
Value=v2['Value']
) if v2 else None
for k2, v2 in v.items()
}
for k, v in data.items()
})