from typing import Dict, Union, Tuple, List from base.attribute import Attribute from base.buff import Buff from base.gain import Gain from base.skill import Skill class EquipmentGain(Gain): buff_ids: List[int] = None skill_ids: List[int] = None def __init__(self): super().__init__(type(self).__name__) def add_buffs(self, buffs: Dict[int, Buff]): if self.buff_ids: for buff_id in self.buff_ids: buffs[buff_id].activate = True def sub_buffs(self, buffs: Dict[int, Buff]): if self.buff_ids: for buff_id in self.buff_ids: buffs[buff_id].activate = False def add_skills(self, skills: Dict[int, Skill]): if self.skill_ids: for skill_id in self.skill_ids: skills[skill_id].activate = True def sub_skills(self, skills: Dict[int, Skill]): if self.skill_ids: for skill_id in self.skill_ids: skills[skill_id].activate = False class CriticalSet(EquipmentGain): def __init__(self, buff_id): self.buff_ids = [buff_id] super().__init__() class DivineEffect(EquipmentGain): skill_ids = [] class DivineSubSkill(EquipmentGain): skill_ids = [] class WaterWeapon(EquipmentGain): buff_ids = [4761] class WindPendant(EquipmentGain): buff_ids = [6360] class HatSpecialEnchant(EquipmentGain): overcome_base = [0] * 8 + [822, 999, 1098, 1218] def __init__(self, level): super().__init__() self.level = level def add_attribute(self, attribute: Attribute): attribute.physical_overcome_base += self.overcome_base[self.level - 1] attribute.magical_overcome_base += self.overcome_base[self.level - 1] def sub_attribute(self, attribute: Attribute): attribute.physical_overcome_base -= self.overcome_base[self.level - 1] attribute.magical_overcome_base -= self.overcome_base[self.level - 1] class JacketSpecialEnchant(Gain): physical_ap = [0] * 8 + [371, 450, 495, 549] magical_ap = [0] * 8 + [442, 538, 591, 655] def __init__(self, level): self.level = level super().__init__(type(self).__name__) def add_attribute(self, attribute: Attribute): attribute.physical_attack_power_base += self.physical_ap[self.level - 1] attribute.magical_attack_power_base += self.magical_ap[self.level - 1] def sub_attribute(self, attribute: Attribute): attribute.physical_attack_power_base -= self.physical_ap[self.level - 1] attribute.magical_attack_power_base -= self.magical_ap[self.level - 1] class BeltSpecialEnchant(EquipmentGain): buff_ids = [15455] class WristSpecialEnchant(EquipmentGain): skill_ids = [22160, 22161, 22162, 22163, 22164, 37562] class ShoesSpecialEnchant(EquipmentGain): skill_ids = [33257, 33258, 33259, 33260, 33261, 37561] EQUIPMENT_GAINS: Dict[Union[Tuple[int, int], int], Gain] = { **{ k: WaterWeapon() for k in (2400, 2401, 2497, 2498, 2539, 2540, 2604, 2605) }, **{ (6800, i): WindPendant() for i in range(100, 127 + 1) }, **{ (15436, i): HatSpecialEnchant(i) for i in range(13) }, **{ (22151, i): JacketSpecialEnchant(i) for i in range(13) }, 22169: BeltSpecialEnchant(), 22166: WristSpecialEnchant(), 33247: ShoesSpecialEnchant(), 17250: Gain(), 17239: Gain(), }