mirror of
https://github.com/baiqwerdvd/StarRailUID.git
synced 2025-05-06 03:33:45 +08:00
114 lines
4.5 KiB
Python
114 lines
4.5 KiB
Python
from typing import Dict, List
|
|
from collections import Counter
|
|
|
|
from ...utils.map.SR_MAP_PATH import RelicSetSkill, EquipmentID2AbilityProperty
|
|
|
|
|
|
class Character:
|
|
def __init__(self, card_prop: Dict):
|
|
self.char_level: int = int(card_prop['avatarLevel'])
|
|
self.char_id: str = card_prop['avatarId']
|
|
self.char_name: str = card_prop['avatarName']
|
|
self.char_rank = card_prop['rank'] if card_prop.get('rank') else 0
|
|
self.char_rarity = card_prop['avatarRarity']
|
|
self.char_element = card_prop['avatarElement']
|
|
self.char_promotion = card_prop['avatarPromotion']
|
|
self.char_skill = card_prop['avatarSkill']
|
|
self.extra_ability = card_prop['avatarExtraAbility']
|
|
self.attribute_bonus = card_prop['avatarAttributeBonus']
|
|
self.char_relic = card_prop['RelicInfo']
|
|
self.base_attributes = card_prop['baseAttributes']
|
|
self.add_attr = {}
|
|
self.equipment = card_prop['equipmentInfo']
|
|
self.rarity = card_prop['avatarRarity']
|
|
self.eidolons = (
|
|
card_prop['rankList'] if card_prop.get('rankList') else []
|
|
)
|
|
|
|
async def get_equipment_info(self):
|
|
if self.equipment == {}:
|
|
return
|
|
base_attr = self.base_attributes
|
|
equip = self.equipment
|
|
ability_property = EquipmentID2AbilityProperty[
|
|
str(equip['equipmentID'])
|
|
]
|
|
equip_rank = equip['equipmentRank']
|
|
|
|
equip_ability_property = ability_property[str(equip_rank)]
|
|
|
|
equip_add_base_attr = equip['baseAttributes']
|
|
base_attr['hp'] = base_attr['hp'] + equip_add_base_attr['hp']
|
|
base_attr['attack'] = (
|
|
base_attr['attack'] + equip_add_base_attr['attack']
|
|
)
|
|
base_attr['defence'] = (
|
|
base_attr['defence'] + equip_add_base_attr['defence']
|
|
)
|
|
self.base_attributes = base_attr
|
|
|
|
for equip_ability in equip_ability_property:
|
|
property_type = equip_ability['PropertyType']
|
|
value = equip_ability['Value']['Value']
|
|
self.add_attr[property_type] = value + self.add_attr.get(
|
|
property_type, 0
|
|
)
|
|
|
|
async def get_char_attribute_bonus(self):
|
|
attribute_bonus = self.attribute_bonus
|
|
for bonus in attribute_bonus:
|
|
status_add = bonus['statusAdd']
|
|
bonus_property = status_add['property']
|
|
value = status_add['value']
|
|
self.add_attr[bonus_property] = value + self.add_attr.get(
|
|
bonus_property, 0
|
|
)
|
|
|
|
async def get_relic_info(self):
|
|
# 计算圣遗物效果
|
|
set_id_list: List[int] = []
|
|
for relic in self.char_relic:
|
|
set_id_list.append(relic['SetId'])
|
|
# 处理主属性
|
|
relic_property = relic['MainAffix']['Property']
|
|
property_value = relic['MainAffix']['Value']
|
|
self.add_attr[relic_property] = property_value + self.add_attr.get(
|
|
relic_property, 0
|
|
)
|
|
# 处理副词条
|
|
for sub in relic['SubAffixList']:
|
|
sub_property = sub['Property']
|
|
sub_value = sub['Value']
|
|
self.add_attr[sub_property] = sub_value + self.add_attr.get(
|
|
sub_property, 0
|
|
)
|
|
# 处理套装属性
|
|
set_id_dict = Counter(set_id_list)
|
|
# logger.info(set_id_dict.most_common())
|
|
for item in set_id_dict.most_common():
|
|
set_property = ''
|
|
set_id = item[0]
|
|
count = item[1]
|
|
set_value = 0
|
|
if count >= 2:
|
|
status_add = RelicSetSkill.RelicSet[str(set_id)]['2']
|
|
if status_add:
|
|
set_property = status_add.Property
|
|
set_value = status_add.Value
|
|
if set_property != '':
|
|
self.add_attr[set_property] = (
|
|
set_value + self.add_attr.get(set_property, 0)
|
|
)
|
|
if count == 4:
|
|
status_add = RelicSetSkill.RelicSet[str(set_id)]['4']
|
|
if status_add:
|
|
set_property = status_add.Property
|
|
set_value = status_add.Value
|
|
if set_property != '':
|
|
self.add_attr[set_property] = (
|
|
set_value + self.add_attr.get(set_property, 0)
|
|
)
|
|
|
|
# logger.info(json.dumps(self.base_attributes))
|
|
# logger.info(json.dumps(self.add_attr))
|