def populate_troops(self): for troop in self.data['Troops']: colors = convert_color_array(troop) self.troops[troop['Id']] = { 'id': troop['Id'], 'name': troop['Name'], 'reference_name': troop['ReferenceName'], 'colors': sorted(colors), 'description': troop['Description'], 'spell_id': troop['SpellId'], 'traits': [self.traits.get(trait, NO_TRAIT) for trait in troop['Traits']], 'rarity': troop['TroopRarity'], 'types': [troop['TroopType']], 'roles': troop['TroopRoleArray'], 'kingdom': {'name': '', 'reference_name': ''}, 'filename': troop['FileBase'], 'armor': sum(troop['ArmorIncrease']), 'health': sum(troop['HealthIncrease']), 'magic': sum(troop['SpellPowerIncrease']), 'attack': sum(troop['AttackIncrease']), } if 'TroopType2' in troop: self.troops[troop['Id']]['types'].append(troop['TroopType2']) for type_ in self.troops[troop['Id']]['types']: self.troop_types.add(type_)
def populate_kingdoms(self): for kingdom in self.data['Kingdoms']: self.pets.fill_untranslated_kingdom_name(kingdom['Id'], kingdom['ReferenceName']) colors = [f'[GEM_{c.upper()}]' for c in COLORS] colors = zip(colors, kingdom['BannerColors']) colors = sorted(colors, key=operator.itemgetter(1), reverse=True) self.banners[kingdom['Id']] = { 'id': kingdom['Id'], 'name': kingdom['BannerName'], 'colors': colors, 'filename': kingdom['FileBase'], } kingdom_troops = [troop_id for troop_id in kingdom['TroopIds'] if troop_id != -1] for troop_id in kingdom_troops: self.troops[troop_id]['kingdom_id'] = kingdom['Id'] kingdom_colors = convert_color_array(kingdom) self.kingdoms[kingdom['Id']] = { 'id': kingdom['Id'], 'name': kingdom['Name'], 'description': kingdom['Description'], 'punchline': kingdom['ByLine'], 'underworld': bool(kingdom.get('MapIndex', 0)), 'location': self.infer_kingdom_location(kingdom), 'troop_ids': kingdom_troops, 'weapon_ids': [], 'troop_type': kingdom['KingdomTroopType'], 'linked_kingdom_id': kingdom.get('SisterKingdomId'), 'colors': sorted(kingdom_colors), 'filename': kingdom['FileBase'], 'reference_name': kingdom['ReferenceName'], } if 'SisterKingdomId' in kingdom: self.kingdoms[kingdom['SisterKingdomId']]['linked_kingdom_id'] = kingdom['Id'] for troop_id in kingdom_troops: self.troops[troop_id]['kingdom'] = self.kingdoms[kingdom['Id']]
def __init__(self, data): super().__init__() self.data = { 'id': data['Id'], 'name': data['Name'], 'colors': convert_color_array(data), 'color_code': ''.join(convert_color_array(data)), 'effect': EFFECTS[data['Effect']], 'effect_data': data.get('EffectData'), 'effect_title': '[PET_TYPE]', 'troop_type': data.get('EffectTroopType'), 'reference_name': data['ReferenceName'], 'filename': data['FileBase'], 'kingdom_id': data['KingdomId'], 'kingdom_name': f'[{data["KingdomId"]}_NAME]', 'kingdom_title': '[KINGDOM]', } self.populate_effect_data() self.translate()
def __init__(self, json_data): self.raw_data = json_data self.id = json_data['Id'] self.name = json_data['Name'] self.colors = [] self.description = json_data['Description'] self.spell_id = json_data['SpellId'] self.traits = self.convert_traits() self.colors = sorted(convert_color_array(json_data)) self.rarity = self.convert_rarity() self.types = self.convert_types() self.filename = json_data['FileBase'] self.kingdom = {'Name': ''} self.roles = self.convert_roles()
def populate_weapons(self): for weapon in self.data['Weapons']: colors = convert_color_array(weapon) self.weapons[weapon['Id']] = { 'id': weapon['Id'], 'name': f'[SPELL{weapon["SpellId"]}_NAME]', 'description': f'[SPELL{weapon["SpellId"]}_DESC]', 'colors': colors, 'rarity': weapon['WeaponRarity'], 'type': weapon['Type'], 'roles': weapon['TroopRoleArray'], 'spell_id': weapon['SpellId'], 'kingdom': self.kingdoms[weapon['KingdomId']], 'kingdom_id': weapon['KingdomId'], 'requirement': weapon.get('MasteryRequirement', 0), 'armor_increase': weapon['ArmorIncrease'], 'attack_increase': weapon['AttackIncrease'], 'health_increase': weapon['HealthIncrease'], 'magic_increase': weapon['SpellPowerIncrease'], 'affixes': [ self.spells.get(spell) for spell in weapon['Affixes'] if spell in self.spells ], } self.kingdoms[weapon['KingdomId']]['weapon_ids'].append( weapon['Id'])
def populate_pets(self): self.pet_effects = ( '[PETTYPE_BUFFTEAMCOLOR]', '[PETTYPE_BUFFGEMMASTERY]', '[PETTYPE_BUFFTEAMKINGDOM]', '[PETTYPE_BUFFTEAMTROOPTYPE]', '[PETTYPE_LOOTSOULS]', '[PETTYPE_LOOTGOLD]', '[PETTYPE_LOOTXP]', '[PETTYPE_NOEFFECT]', ) for pet in self.data['Pets']: colors = convert_color_array(pet) self.pets[pet['Id']] = { 'id': pet['Id'], 'name': pet['Name'], 'kingdom': self.kingdoms[pet['KingdomId']], 'colors': sorted(colors), 'effect': self.pet_effects[pet['Effect']], 'effect_data': pet.get('EffectData'), 'troop_type': pet.get('EffectTroopType'), 'filename': pet['FileBase'], }
def populate_troops(self): for troop in self.data['Troops']: colors = convert_color_array(troop) no_trait = { 'code': '', 'name': '[TRAIT_NONE]', 'description': '[TRAIT_NONE_DESC]' } self.troops[troop['Id']] = { 'id': troop['Id'], 'name': troop['Name'], 'colors': sorted(colors), 'description': troop['Description'], 'spell_id': troop['SpellId'], 'traits': [ self.traits.get(trait, no_trait) for trait in troop['Traits'] ], 'rarity': troop['TroopRarity'], 'types': [troop['TroopType']], 'roles': troop['TroopRoleArray'], 'kingdom': { 'Name': '' }, 'filename': troop["FileBase"], } if 'TroopType2' in troop: self.troops[troop['Id']]['types'].append(troop['TroopType2'])