Exemplo n.º 1
0
def load_character_level_stats() -> dict:
    """
    Return a dictionary holding information about the amount of stats that a character should get according
    to the level he has just attained
    """
    # Define these here as well. We can't import from constants because constants imports from here
    KEY_LEVELUP_STATS_HEALTH = 'health'
    KEY_LEVELUP_STATS_MANA = 'mana'
    KEY_LEVELUP_STATS_STRENGTH = 'strength'
    KEY_LEVELUP_STATS_ARMOR = 'armor'
    KEY_LEVELUP_STATS_AGILITY = 'agility'

    level_stats = {}
    loaded_stats = session.query(LevelUpStatsSchema).all()

    for stat in loaded_stats:
        level = stat.level
        health = parse_int(stat.health)
        mana = parse_int(stat.mana)
        strength = parse_int(stat.strength)
        agility = parse_int(stat.agility)
        armor = parse_int(stat.armor)

        level_stats[level] = {
            KEY_LEVELUP_STATS_HEALTH: health,
            KEY_LEVELUP_STATS_MANA: mana,
            KEY_LEVELUP_STATS_AGILITY: agility,
            KEY_LEVELUP_STATS_STRENGTH: strength,
            KEY_LEVELUP_STATS_ARMOR: armor
        }

    return level_stats
Exemplo n.º 2
0
 def test_parse_int_invalid_numbers(self):
     """
     It should convert every invalid integer to 0
     """
     self.assertEqual(parse_int(2.1), 2)
     self.assertEqual(parse_int(None), 0)
     self.assertEqual(parse_int('aa'), 0)
     self.assertEqual(parse_int([]), 0)
Exemplo n.º 3
0
    def convert_to_paladin_spell_object(self) -> PaladinSpell:
        """
        Converts the PaladinSpells schema object to a Paladin Spell object
        """
        level: int = parse_int(self.level_required)
        damage1: int = parse_int(self.damage1)
        damage2: int = parse_int(self.damage2)
        damage3: int = parse_int(self.damage3)
        mana_cost: int = parse_int(self.mana_cost)
        heal1: int = parse_int(self.heal1)
        heal2: int = parse_int(self.heal2)
        heal3: int = parse_int(self.heal3)
        cooldown: int = parse_int(self.cooldown)
        buff: 'BeneficialBuff' = self.buff.convert_to_beneficial_buff_object(
        ) if self.buff else None
        harmful_effect: 'DoT' = self.dot.convert_to_dot_object(
            level) if self.dot else None

        return PaladinSpell(name=self.name,
                            rank=self.rank,
                            cooldown=cooldown,
                            beneficial_effect=buff,
                            harmful_effect=harmful_effect,
                            damage1=damage1,
                            damage2=damage2,
                            damage3=damage3,
                            heal1=heal1,
                            heal2=heal2,
                            heal3=heal3,
                            mana_cost=mana_cost)
Exemplo n.º 4
0
    def convert_to_beneficial_buff_object(self) -> BeneficialBuff:
        """
        Convert it to a BeneficialBuff object
        """
        buff_name: str = self.name
        buff_stat1: str = self.stat1
        buff_amount1: int = parse_int(self.amount1)
        buff_stat2: str = self.stat2
        buff_amount2: int = parse_int(self.amount2)
        buff_stat3: str = self.stat3
        buff_amount3: int = parse_int(self.amount3)
        buff_duration: int = parse_int(self.duration)

        buffs: [(str, int)] = [(buff_stat1, buff_amount1), (buff_stat2, buff_amount2), (buff_stat3, buff_amount3)]

        return BeneficialBuff(name=buff_name, buff_stats_and_amounts=[(stat, amount) for stat, amount in buffs
                                                                      if stat is not None and amount is not None],
                              duration=buff_duration)
Exemplo n.º 5
0
    def convert_to_living_thing_object(self) -> VendorNPC or FriendlyNPC or Monster:
        """ Converts the Creature to whatever object he is according to his type column """
        # TODO: move to creature_template.py
        entry: int = self.creature_id
        name: str = self.creature.name
        type_: str = self.creature.type
        level: int = parse_int(self.creature.level)
        health: int = parse_int(self.creature.health)
        mana: int = parse_int(self.creature.mana)
        armor: int = parse_int(self.creature.armor)
        min_dmg: int = parse_int(self.creature.min_dmg)
        max_dmg: int = parse_int(self.creature.max_dmg)
        quest_relation_id: int = parse_int(self.creature.quest_relation_id)
        loot_table: 'LootTable' = self.creature.loot_table
        gossip: str = self.creature.gossip
        respawnable: bool = self.creature.respawnable

        if type_ == "fnpc":
            return FriendlyNPC(name=name, health=health,
                               mana=mana, level=level,
                               min_damage=min_dmg,
                               max_damage=max_dmg,
                               quest_relation_id=quest_relation_id,
                               loot_table=loot_table,
                               gossip=gossip)

        elif type_ == "vendor":
            vendor_inventory = self.creature.build_vendor_inventory()
            return VendorNPC(name=name, entry=entry,
                             health=health, mana=mana, level=level,
                             min_damage=min_dmg,
                             max_damage=max_dmg,
                             quest_relation_id=quest_relation_id,
                             loot_table=loot_table,
                             inventory=vendor_inventory,
                             gossip=gossip)
        elif type_ == "monster":
            gold_to_give_range = (CREATURE_DEFAULT_VALUES[level]['min_gold_reward'],
                                  CREATURE_DEFAULT_VALUES[level]['max_gold_reward'])
            xp_to_give = CREATURE_DEFAULT_VALUES[level]['xp_reward']
            armor = armor if armor else CREATURE_DEFAULT_VALUES[level]['armor']
            return Monster(monster_id=entry,
                           name=name,
                           health=health,
                           mana=mana,
                           armor=armor,
                           level=level,
                           min_damage=min_dmg,
                           max_damage=max_dmg,
                           quest_relation_id=quest_relation_id,
                           loot_table=loot_table,
                           xp_to_give=xp_to_give,
                           gold_to_give_range=gold_to_give_range,
                           gossip=gossip,
                           respawnable=respawnable)
        else:
            raise Exception(f'{type_} is not a valid creature type!')
Exemplo n.º 6
0
    def convert_to_quest_object(self) -> Quest:
        """
        Convert the QuestSchema object to a Quest object
        The currently supported quest types are:
            killquest = kill X amount of monster_required
            fetchquest = obtain X amount of item_required.
        :return: A KillQuest or FetchQuest object
        """
        entry: int = self.entry
        quest_name: str = self.name
        quest_type: str = self.type
        level_requirement: int = parse_int(self.level_required)
        monster_required: str = self.monster_required
        item_required: str = self.item_required
        amount_required: int = parse_int(self.amount_required)
        xp_reward: int = parse_int(self.xp_reward)
        item_rewards: {str: 'Item'} = {item.name: item.convert_to_item_object()
                                       for item in [self.reward1, self.reward2, self.reward3]
                                       if item is not None}
        item_choice_enabled = bool(self.item_choice_enabled)

        if quest_type == "killquest":
            return KillQuest(quest_name=quest_name,
                             quest_id=entry,
                             required_monster=monster_required,
                             required_kills=amount_required,
                             xp_reward=xp_reward,
                             item_reward_dict=item_rewards,
                             reward_choice_enabled=item_choice_enabled,
                             level_required=level_requirement)
        elif quest_type == "fetchquest":
            return FetchQuest(quest_name=quest_name,
                              quest_id=entry,
                              required_item=item_required,
                              required_item_count=amount_required,
                              xp_reward=xp_reward,
                              item_reward_dict=item_rewards,
                              reward_choice_enabled=item_choice_enabled,
                              level_required=level_requirement)
        else:
            raise Exception(f'The quest type {quest_type} is not supported!')
Exemplo n.º 7
0
 def test_parse_int_valid_numbers(self):
     self.assertIsNotNone(parse_int(1))
     self.assertTrue(isinstance(parse_int(5), int))
     self.assertEqual(parse_int(1), 1)
     self.assertEqual(parse_int(3), 3)
     self.assertEqual(parse_int(5), 5)
     self.assertEqual(parse_int(215), 215)
Exemplo n.º 8
0
    def convert_to_paladin_spell_object(self) -> PaladinSpell:
        """
        Converts the PaladinSpells schema object to a Paladin Spell object
        """
        level: int = parse_int(self.level_required)
        damage1: int = parse_int(self.damage1)
        damage2: int = parse_int(self.damage2)
        damage3: int = parse_int(self.damage3)
        mana_cost: int = parse_int(self.mana_cost)
        heal1: int = parse_int(self.heal1)
        heal2: int = parse_int(self.heal2)
        heal3: int = parse_int(self.heal3)
        cooldown: int = parse_int(self.cooldown)
        buff: 'BeneficialBuff' = self.buff.convert_to_beneficial_buff_object() if self.buff else None
        harmful_effect: 'DoT' = self.dot.convert_to_dot_object(level) if self.dot else None

        return PaladinSpell(name=self.name, rank=self.rank, cooldown=cooldown, beneficial_effect=buff,
                            harmful_effect=harmful_effect, damage1=damage1, damage2=damage2, damage3=damage3,
                            heal1=heal1, heal2=heal2, heal3=heal3, mana_cost=mana_cost)
Exemplo n.º 9
0
    def convert_to_item_object(self) -> Item:
        item_id: int = self.entry
        item_name: str = self.name
        item_type: str = self.type
        item_buy_price: int = parse_int(self.buy_price)
        item_sell_price: int = parse_int(self.sell_price)

        if item_type == 'misc':
            item_quest_id = self.quest_id
            return Item(name=item_name, item_id=item_id, buy_price=item_buy_price, sell_price=item_sell_price,
                        quest_id=item_quest_id)
        elif item_type in ['weapon', 'equipment']:
            item_health: int = parse_int(self.health)
            item_mana: int = parse_int(self.mana)
            item_armor: int = parse_int(self.armor)
            item_strength: int = parse_int(self.strength)
            item_agility: int = parse_int(self.agility)
            attributes: {str: int} = create_attributes_dict(bonus_health=item_health, bonus_mana=item_mana,
                                                            armor=item_armor, strength=item_strength,
                                                            agility=item_agility)
            if item_type == 'weapon':
                item_min_dmg: int = parse_int(self.min_dmg)
                item_max_dmg: int = parse_int(self.max_dmg)

                return Weapon(name=item_name, item_id=item_id, attributes=attributes,
                              buy_price=item_buy_price, sell_price=item_sell_price,
                              min_damage=item_min_dmg, max_damage=item_max_dmg)
            else:
                item_slot: str = self.sub_type

                return Equipment(name=item_name, item_id=item_id, slot=item_slot, attributes=attributes,
                                 buy_price=item_buy_price, sell_price=item_sell_price)
        elif item_type == 'potion':
            buff_id: int = self.effect
            item_buff_effect: 'BeneficialBuff' = load_buff(buff_id)

            return Potion(name=item_name, item_id=item_id, buy_price=item_buy_price, sell_price=item_sell_price,
                          buff=item_buff_effect)
        else:
            raise Exception(f'Unsupported item type {item_type}')