修复快枪手2件套未计算问题

This commit is contained in:
a376148946 2023-10-01 10:23:02 +08:00 committed by qwerdvd
parent 375bbdce84
commit 3d427171c6

View File

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