Example #1
0
 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_)
Example #2
0
 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']]
Example #3
0
 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()
Example #4
0
 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()
Example #5
0
 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'])
Example #6
0
 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'],
         }
Example #7
0
 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'])