🚨 pre-commit-ci修复格式错误

This commit is contained in:
pre-commit-ci[bot] 2023-10-05 16:13:41 +00:00 committed by qwerdvd
parent 087f11acef
commit dd1c79cf10
9 changed files with 108 additions and 77 deletions

View File

@ -1,15 +1,15 @@
import json import json
from pathlib import Path
from typing import Dict from typing import Dict
from pathlib import Path
from gsuid_core.logger import logger from gsuid_core.logger import logger
from ..mono.Character import Character
from .AvatarDamage.AvatarDamage import AvatarDamage
from .Base.AvatarBase import BaseAvatarinfo
from .Base.model import DamageInstance
from .Relic.Relic import RelicSet, SingleRelic
from .Weapon.Weapon import Weapon from .Weapon.Weapon import Weapon
from ..mono.Character import Character
from .Base.model import DamageInstance
from .Base.AvatarBase import BaseAvatarinfo
from .Relic.Relic import RelicSet, SingleRelic
from .AvatarDamage.AvatarDamage import AvatarDamage
Excel_path = Path(__file__).parent Excel_path = Path(__file__).parent
with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: with Path.open(Excel_path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
@ -37,13 +37,9 @@ class AvatarInstance:
def merge_attribute_bonus(self, add_attribute: Dict[str, float]): def merge_attribute_bonus(self, add_attribute: Dict[str, float]):
for attribute in add_attribute: for attribute in add_attribute:
if attribute in self.attribute_bonus: if attribute in self.attribute_bonus:
self.attribute_bonus[ self.attribute_bonus[attribute] += add_attribute[attribute]
attribute
] += add_attribute[attribute]
else: else:
self.attribute_bonus[ self.attribute_bonus[attribute] = add_attribute[attribute]
attribute
] = add_attribute[attribute]
def cal_role_base_attr(self): def cal_role_base_attr(self):
logger.info('cal_role_base_attr') logger.info('cal_role_base_attr')

View File

@ -3,9 +3,9 @@ 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.model import DamageInstanceAvatar, DamageInstanceSkill
from ..Role import calculate_damage from ..Role import calculate_damage
from ..Base.AvatarBase import BaseAvatar, BaseAvatarBuff
from ..Base.model import DamageInstanceSkill, DamageInstanceAvatar
class Seele(BaseAvatar): class Seele(BaseAvatar):
@ -47,7 +47,7 @@ class Seele(BaseAvatar):
attribute_bonus['AllDamageAddedRatio'] = self.Skill_num( attribute_bonus['AllDamageAddedRatio'] = self.Skill_num(
'Talent', 'Talent' 'Talent', 'Talent'
) + attribute_bonus.get('AllDamageAddedRatio', 0) ) + attribute_bonus.get('AllDamageAddedRatio', 0)
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
attribute_bonus, attribute_bonus,
@ -57,7 +57,7 @@ class Seele(BaseAvatar):
0.44, 0.44,
self.avatar_level, self.avatar_level,
) )
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') skill_multiplier = self.Skill_num('Normal', 'Normal')
@ -167,7 +167,7 @@ class JingYuan(BaseAvatar):
0.44, 0.44,
self.avatar_level, self.avatar_level,
) )
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') skill_multiplier = self.Skill_num('Normal', 'Normal')
@ -268,7 +268,7 @@ class Welt(BaseAvatar):
0.44, 0.44,
self.avatar_level, self.avatar_level,
) )
skill_info_list = [] skill_info_list = []
# 计算普攻伤害 # 计算普攻伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') skill_multiplier = self.Skill_num('Normal', 'Normal')
@ -354,6 +354,7 @@ class Welt(BaseAvatar):
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
class Danhengil(BaseAvatar): class Danhengil(BaseAvatar):
Buff: BaseAvatarBuff Buff: BaseAvatarBuff
@ -379,7 +380,7 @@ class Danhengil(BaseAvatar):
logger.info('额外能力') logger.info('额外能力')
logger.info('对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%') logger.info('对拥有虚数属性弱点的敌方目标造成伤害时, 暴击伤害提高24%')
self.extra_ability_attribute['CriticalDamageBase'] = 0.24 self.extra_ability_attribute['CriticalDamageBase'] = 0.24
async def getdamage( async def getdamage(
self, self,
base_attr: Dict[str, float], base_attr: Dict[str, float],
@ -392,13 +393,13 @@ class Danhengil(BaseAvatar):
start_buff = 6 start_buff = 6
add_buff = 2 add_buff = 2
max_buff = 10 max_buff = 10
injury_add = self.Skill_num('Talent', 'Talent') injury_add = self.Skill_num('Talent', 'Talent')
critical_damage_add = self.Skill_num('BPSkill', 'BPSkill') critical_damage_add = self.Skill_num('BPSkill', 'BPSkill')
critical_buff = 0 critical_buff = 0
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
critical_buff = critical_damage_add * 4 critical_buff = critical_damage_add * 4
skill_info_list = [] skill_info_list = []
# 计算普攻1伤害 # 计算普攻1伤害
skill_multiplier = self.Skill_num('Normal', 'Normal') / 2 skill_multiplier = self.Skill_num('Normal', 'Normal') / 2
@ -408,13 +409,15 @@ class Danhengil(BaseAvatar):
for i in range(1, 3): for i in range(1, 3):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus['AllDamageAddedRatio'] = damage_buff * injury_add + add_attr_bonus.get( add_attr_bonus[
'AllDamageAddedRatio'
] = damage_buff * injury_add + add_attr_bonus.get(
'AllDamageAddedRatio', 0 'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase', 0 'CriticalDamageBase'
) ] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -437,7 +440,9 @@ class Danhengil(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damage_a += damage3 damage_a += damage3
skill_info_list.append({'name': '普攻', 'damagelist': [damage_c, damage_e, damage_a]}) skill_info_list.append(
{'name': '普攻', 'damagelist': [damage_c, damage_e, damage_a]}
)
# 计算瞬华伤害 # 计算瞬华伤害
skill_multiplier = self.Skill_num('Normal', 'Normal1') / 3 skill_multiplier = self.Skill_num('Normal', 'Normal1') / 3
@ -447,13 +452,15 @@ class Danhengil(BaseAvatar):
for i in range(1, 4): for i in range(1, 4):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus['AllDamageAddedRatio'] = damage_buff * injury_add + add_attr_bonus.get( add_attr_bonus[
'AllDamageAddedRatio'
] = damage_buff * injury_add + add_attr_bonus.get(
'AllDamageAddedRatio', 0 'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase', 0 'CriticalDamageBase'
) ] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -476,8 +483,10 @@ class Danhengil(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damage_a += damage3 damage_a += damage3
skill_info_list.append({'name': '瞬华', 'damagelist': [damage_c, damage_e, damage_a]}) skill_info_list.append(
{'name': '瞬华', 'damagelist': [damage_c, damage_e, damage_a]}
)
# 计算天矢阴伤害 # 计算天矢阴伤害
skill_multiplier = self.Skill_num('Normal', 'Normal2') / 5 skill_multiplier = self.Skill_num('Normal', 'Normal2') / 5
damage_c = 0 damage_c = 0
@ -486,17 +495,21 @@ class Danhengil(BaseAvatar):
for i in range(1, 6): for i in range(1, 6):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus['AllDamageAddedRatio'] = damage_buff * injury_add + add_attr_bonus.get( add_attr_bonus[
'AllDamageAddedRatio'
] = damage_buff * injury_add + add_attr_bonus.get(
'AllDamageAddedRatio', 0 'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase', 0 'CriticalDamageBase'
) ] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
else: else:
if i >= 4: if i >= 4:
critical_buff = (i - 3) * critical_damage_add critical_buff = (i - 3) * critical_damage_add
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase'
] = critical_buff + add_attr_bonus.get(
'CriticalDamageBase', 0 'CriticalDamageBase', 0
) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
@ -521,7 +534,9 @@ class Danhengil(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damage_a += damage3 damage_a += damage3
skill_info_list.append({'name': '天矢阴', 'damagelist': [damage_c, damage_e, damage_a]}) skill_info_list.append(
{'name': '天矢阴', 'damagelist': [damage_c, damage_e, damage_a]}
)
# 计算盘拏耀跃伤害 # 计算盘拏耀跃伤害
skill_multiplier = self.Skill_num('Normal', 'Normal3') / 7 skill_multiplier = self.Skill_num('Normal', 'Normal3') / 7
@ -531,17 +546,21 @@ class Danhengil(BaseAvatar):
for i in range(1, 8): for i in range(1, 8):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, start_buff + (i - 1) * add_buff) damage_buff = min(max_buff, start_buff + (i - 1) * add_buff)
add_attr_bonus['AllDamageAddedRatio'] = damage_buff * injury_add + add_attr_bonus.get( add_attr_bonus[
'AllDamageAddedRatio'
] = damage_buff * injury_add + add_attr_bonus.get(
'AllDamageAddedRatio', 0 'AllDamageAddedRatio', 0
) )
if self.avatar_rank >= 4: if self.avatar_rank >= 4:
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase', 0 'CriticalDamageBase'
) ] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
else: else:
if i >= 4: if i >= 4:
critical_buff = (i - 3) * critical_damage_add critical_buff = (i - 3) * critical_damage_add
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase'
] = critical_buff + add_attr_bonus.get(
'CriticalDamageBase', 0 'CriticalDamageBase', 0
) )
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
@ -566,8 +585,10 @@ class Danhengil(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damage_a += damage3 damage_a += damage3
skill_info_list.append({'name': '盘拏耀跃', 'damagelist': [damage_c, damage_e, damage_a]}) skill_info_list.append(
{'name': '盘拏耀跃', 'damagelist': [damage_c, damage_e, damage_a]}
)
# 计算大招伤害 # 计算大招伤害
skill_multiplier = self.Skill_num('Ultra', 'Ultra') / 3 skill_multiplier = self.Skill_num('Ultra', 'Ultra') / 3
damage_c = 0 damage_c = 0
@ -576,13 +597,15 @@ class Danhengil(BaseAvatar):
for i in range(1, 4): for i in range(1, 4):
add_attr_bonus = copy.deepcopy(attribute_bonus) add_attr_bonus = copy.deepcopy(attribute_bonus)
damage_buff = min(max_buff, 10) damage_buff = min(max_buff, 10)
add_attr_bonus['AllDamageAddedRatio'] = damage_buff * injury_add + add_attr_bonus.get( add_attr_bonus[
'AllDamageAddedRatio'
] = damage_buff * injury_add + add_attr_bonus.get(
'AllDamageAddedRatio', 0 'AllDamageAddedRatio', 0
) )
critical_buff = 4 * critical_damage_add critical_buff = 4 * critical_damage_add
add_attr_bonus['CriticalDamageBase'] = critical_buff + add_attr_bonus.get( add_attr_bonus[
'CriticalDamageBase', 0 'CriticalDamageBase'
) ] = critical_buff + add_attr_bonus.get('CriticalDamageBase', 0)
damage1, damage2, damage3 = await calculate_damage( damage1, damage2, damage3 = await calculate_damage(
base_attr, base_attr,
add_attr_bonus, add_attr_bonus,
@ -605,10 +628,13 @@ class Danhengil(BaseAvatar):
self.avatar_level, self.avatar_level,
) )
damage_a += damage3 damage_a += damage3
skill_info_list.append({'name': '终结技', 'damagelist': [damage_c, damage_e, damage_a]}) skill_info_list.append(
{'name': '终结技', 'damagelist': [damage_c, damage_e, damage_a]}
)
logger.info(skill_info_list) logger.info(skill_info_list)
return skill_info_list return skill_info_list
class AvatarDamage: class AvatarDamage:
@classmethod @classmethod
def create( def create(

View File

@ -1,14 +1,14 @@
import json import json
from abc import abstractmethod
from pathlib import Path from pathlib import Path
from abc import abstractmethod
from typing import List, Tuple, Union from typing import List, Tuple, Union
import msgspec import msgspec
from msgspec import Struct from msgspec import Struct
from ....utils.excel.model import AvatarPromotionConfig
from .model import DamageInstanceAvatar, DamageInstanceSkill
from .SkillBase import BaseSkills from .SkillBase import BaseSkills
from ....utils.excel.model import AvatarPromotionConfig
from .model import DamageInstanceSkill, DamageInstanceAvatar
path = Path(__file__).parent.parent path = Path(__file__).parent.parent
with Path.open(path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: with Path.open(path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:

View File

@ -1,11 +1,11 @@
from abc import abstractmethod
from typing import Dict from typing import Dict
from abc import abstractmethod
from gsuid_core.logger import logger from gsuid_core.logger import logger
from ....utils.map.model.RelicSetSkill import RelicSetStatusAdd
from ....utils.map.SR_MAP_PATH import RelicSetSkill
from .model import DamageInstanceRelic from .model import DamageInstanceRelic
from ....utils.map.SR_MAP_PATH import RelicSetSkill
from ....utils.map.model.RelicSetSkill import RelicSetStatusAdd
class SingleRelic: class SingleRelic:
@ -70,7 +70,6 @@ class BaseRelicSetSkill:
... ...
def set_skill_property_ability(self): def set_skill_property_ability(self):
def add_relic_set_attribute(status_add: RelicSetStatusAdd): def add_relic_set_attribute(status_add: RelicSetStatusAdd):
set_property = status_add.Property set_property = status_add.Property
set_value = status_add.Value set_value = status_add.Value

View File

@ -1,8 +1,8 @@
import json import json
from pathlib import Path
from typing import List from typing import List
from pathlib import Path
from .model import DamageInstanceAvatar, DamageInstanceSkill from .model import DamageInstanceSkill, DamageInstanceAvatar
path = Path(__file__).parent.parent path = Path(__file__).parent.parent
with Path.open(path / 'Excel' / 'SkillData.json', encoding='utf-8') as f: with Path.open(path / 'Excel' / 'SkillData.json', encoding='utf-8') as f:
@ -14,7 +14,7 @@ skill_types = {
'BPSkill': 'BPSkill_', 'BPSkill': 'BPSkill_',
'Ultra': 'Ultra_', 'Ultra': 'Ultra_',
'Maze': 'Maze_', 'Maze': 'Maze_',
'': 'Talent_' '': 'Talent_',
} }

View File

@ -3,9 +3,9 @@ from typing import Dict, List, Tuple
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):

View File

@ -31,30 +31,30 @@ async def calculate_damage(
damage_reduction = calculate_damage_reduction(level) damage_reduction = calculate_damage_reduction(level)
logger.info(f'韧性区: {damage_reduction}') logger.info(f'韧性区: {damage_reduction}')
resistance_area = calculate_resistance_area( resistance_area = calculate_resistance_area(
merged_attr, skill_type, add_skill_type, element merged_attr, skill_type, add_skill_type, element
) )
logger.info(f'抗性区: {resistance_area}') logger.info(f'抗性区: {resistance_area}')
defence_multiplier = calculate_defence_multiplier(level, merged_attr) defence_multiplier = calculate_defence_multiplier(level, merged_attr)
logger.info(f'防御区: {defence_multiplier}') logger.info(f'防御区: {defence_multiplier}')
injury_area, element_area = calculate_injury_area( injury_area, element_area = calculate_injury_area(
merged_attr, skill_type, add_skill_type, element merged_attr, skill_type, add_skill_type, element
) )
logger.info(f'增伤区: {injury_area}') logger.info(f'增伤区: {injury_area}')
damage_ratio = calculate_damage_ratio( damage_ratio = calculate_damage_ratio(
merged_attr, skill_type, add_skill_type merged_attr, skill_type, add_skill_type
) )
logger.info(f'易伤区: {damage_ratio}') logger.info(f'易伤区: {damage_ratio}')
critical_damage = calculate_critical_damage( critical_damage = calculate_critical_damage(
merged_attr, skill_type, add_skill_type merged_attr, skill_type, add_skill_type
) )
logger.info(f'爆伤区: {critical_damage}') logger.info(f'爆伤区: {critical_damage}')
critical_chance = calculate_critical_chance( critical_chance = calculate_critical_chance(
merged_attr, skill_type, add_skill_type merged_attr, skill_type, add_skill_type
) )
@ -150,10 +150,13 @@ def calculate_resistance_area(
if '_' in attr_name: if '_' in attr_name:
skill_name = attr_name.split('_')[0] skill_name = attr_name.split('_')[0]
skillattr_name = attr_name.split('_')[1] skillattr_name = attr_name.split('_')[1]
if skill_name == add_skill_type and skillattr_name in (element, 'AllDamage'): if skill_name == add_skill_type and skillattr_name in (
element,
'AllDamage',
):
enemy_status_resistance += merged_attr[attr] enemy_status_resistance += merged_attr[attr]
# logger.info( # logger.info(
# f'{skill_name}对{skillattr_name}属性有{merged_attr[attr]}穿透加成' # f'{skill_name}对{skillattr_name}属性有{merged_attr[attr]}穿透加成'
# ) # )
return 1.0 - (0 - enemy_status_resistance) return 1.0 - (0 - enemy_status_resistance)
@ -183,16 +186,16 @@ def calculate_injury_area(
add_skill_type, add_skill_type,
): ):
# logger.info( # logger.info(
# f'{attr} 对 {skill_type} 有 {merged_attr[attr]} 伤害加成' # f'{attr} 对 {skill_type} 有 {merged_attr[attr]} 伤害加成'
# ) # )
injury_area += merged_attr[attr] injury_area += merged_attr[attr]
if 'AddedRatio' in attr and attr_name in ( if 'AddedRatio' in attr and attr_name in (
element, element,
'AllDamage', 'AllDamage',
): ):
# logger.info( # logger.info(
# f'{attr} 对 {element} 属性有 {merged_attr[attr]} 伤害加成' # f'{attr} 对 {element} 属性有 {merged_attr[attr]} 伤害加成'
# ) # )
if attr_name == element: if attr_name == element:
element_area += merged_attr[attr] element_area += merged_attr[attr]
@ -312,7 +315,7 @@ def calculate_damage_tz(
base_attr: Dict[str, float], base_attr: Dict[str, float],
): ):
injury_add_tz = 0.0 injury_add_tz = 0.0
attack_tz = attack + 355 + base_attr['attack'] * 2.334 attack_tz = attack + 355 + base_attr['attack'] * 2.334
# logger.info(f'attack_tz: {attack_tz}') # logger.info(f'attack_tz: {attack_tz}')
if element == 'Imaginary': if element == 'Imaginary':

View File

@ -1,9 +1,9 @@
import json import json
from pathlib import Path
from typing import Dict from typing import Dict
from pathlib import Path
from ..Base.model import DamageInstanceWeapon
from ..Base.WeaponBase import BaseWeapon from ..Base.WeaponBase import BaseWeapon
from ..Base.model import DamageInstanceWeapon
path = Path(__file__).parent.parent path = Path(__file__).parent.parent
with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f: with Path.open(path / 'Excel' / 'weapon_effect.json', encoding='utf-8') as f:

View File

@ -20,9 +20,16 @@ async def merge_attribute(
merged_attr[attr] += base_attr[attr] * value merged_attr[attr] += base_attr[attr] * value
else: else:
merged_attr[attribute] = attribute_bonus[attribute] merged_attr[attribute] = attribute_bonus[attribute]
elif attribute in ['ignore_defence', 'Atk_buff', 'Normal_buff', 'shield_added_ratio']: elif attribute in [
'ignore_defence',
'Atk_buff',
'Normal_buff',
'shield_added_ratio',
]:
merged_attr[attribute] = base_attr.get(attribute, 0) + value merged_attr[attribute] = base_attr.get(attribute, 0) + value
elif attribute.endswith(('ResistancePenetration', 'DmgAdd', 'DmgRatio')): elif attribute.endswith(
('ResistancePenetration', 'DmgAdd', 'DmgRatio')
):
merged_attr[attribute] = base_attr.get(attribute, 0) + value merged_attr[attribute] = base_attr.get(attribute, 0) + value
elif attribute.endswith('Base'): elif attribute.endswith('Base'):
merged_attr[attribute] = base_attr.get(attribute, 0) + value merged_attr[attribute] = base_attr.get(attribute, 0) + value