Example #1
0
    def init_stats(self):
        if self.unit_mgr.get_type() == ObjectTypes.TYPE_PLAYER:
            base_stats = WorldDatabaseManager.player_get_class_level_stats(
                self.unit_mgr.player.class_, self.unit_mgr.level)
            base_attrs = WorldDatabaseManager.player_get_level_stats(
                self.unit_mgr.player.class_, self.unit_mgr.level,
                self.unit_mgr.player.race)
            if not base_stats or not base_attrs:
                Logger.error(
                    f'Unsupported level ({self.unit_mgr.level}) from {self.unit_mgr.player.name}.'
                )
                return
            self.base_stats[UnitStats.HEALTH] = base_stats.basehp
            self.base_stats[UnitStats.MANA] = base_stats.basemana
            self.base_stats[UnitStats.STRENGTH] = base_attrs.str
            self.base_stats[UnitStats.AGILITY] = base_attrs.agi
            self.base_stats[UnitStats.STAMINA] = base_attrs.sta
            self.base_stats[UnitStats.INTELLECT] = base_attrs.inte
            self.base_stats[UnitStats.SPIRIT] = base_attrs.spi

            self.unit_mgr.base_hp = base_stats.basehp
            self.unit_mgr.base_mana = base_stats.basemana
        else:
            # Creature
            self.base_stats[UnitStats.HEALTH] = self.unit_mgr.max_health
            self.base_stats[UnitStats.MANA] = self.unit_mgr.max_power_1
            self.base_stats[
                UnitStats.
                DODGE_CHANCE] = BASE_DODGE_CHANCE_CREATURE / 100  # Players don't have a flat dodge/block chance.
            self.base_stats[
                UnitStats.
                BLOCK_CHANCE] = BASE_BLOCK_PARRY_CHANCE / 100  # Players have block scaling, assign flat 5% to creatures.

        # Don't overwrite base speed if it has been modified.
        self.base_stats[UnitStats.SPEED_RUNNING] = self.base_stats.get(
            UnitStats.SPEED_RUNNING, config.Unit.Defaults.run_speed)

        # Players and creatures have an unchanging base 5% chance to block and parry (before defense skill differences).
        # As block chance also scales with strength, the value is calculated in update_base_block_chance.
        self.base_stats[UnitStats.PARRY_CHANCE] = BASE_BLOCK_PARRY_CHANCE / 100

        self.send_attributes()

        self.update_base_health_regen()
        self.update_base_mana_regen()

        self.update_base_proc_chance()
        self.update_defense_bonuses()
Example #2
0
    def init_stats(self):
        base_stats = WorldDatabaseManager.player_get_class_level_stats(
            self.player_mgr.player.class_, self.player_mgr.level)
        base_attrs = WorldDatabaseManager.player_get_level_stats(
            self.player_mgr.player.class_, self.player_mgr.level,
            self.player_mgr.player.race)

        if not base_stats or not base_attrs:
            Logger.error("Unsupported level (%d) from %s." %
                         (self.player_mgr.level, self.player_mgr.player.name))
            return

        self.player_mgr.base_hp = base_stats.basehp
        self.player_mgr.base_mana = base_stats.basemana

        self.player_mgr.set_base_str(base_attrs.str)
        self.player_mgr.set_base_agi(base_attrs.agi)
        self.player_mgr.set_base_sta(base_attrs.sta)
        self.player_mgr.set_base_int(base_attrs.inte)
        self.player_mgr.set_base_spi(base_attrs.spi)
Example #3
0
    def init_stats(self):
        base_stats = WorldDatabaseManager.player_get_class_level_stats(self.unit_mgr.class_, self.unit_mgr.level)

        if not base_stats:
            if self.unit_mgr.level > 60:
                # Default to max available base stats, level 60.
                base_stats = WorldDatabaseManager.player_get_class_level_stats(self.unit_mgr.class_, 60)
                Logger.warning(f'Unsupported base stats for level ({self.unit_mgr.level})'
                               f' Unit class ({Classes(self.unit_mgr.class_).name})'
                               f' Unit type ({ObjectTypeIds(self.unit_mgr.get_type_id()).name})'
                               f' Using level 60 base stats.')
            else:
                Logger.error(
                    f'Unsupported base stats for level ({self.unit_mgr.level})'
                    f' Unit class ({Classes(self.unit_mgr.class_).name})'
                    f' Unit type ({ObjectTypeIds(self.unit_mgr.get_type_id()).name}).')
                return

        # Player specific.
        if self.unit_mgr.get_type_id() == ObjectTypeIds.ID_PLAYER:
            base_attrs = WorldDatabaseManager.player_get_level_stats(self.unit_mgr.class_,
                                                                     self.unit_mgr.level,
                                                                     self.unit_mgr.race)
            if not base_attrs:
                if self.unit_mgr.level > 60:
                    # Default to max available attributes, level 60.
                    base_attrs = WorldDatabaseManager.player_get_level_stats(self.unit_mgr.class_,
                                                                             60,
                                                                             self.unit_mgr.race)
                    Logger.warning(f'Unsupported base attributes for level ({self.unit_mgr.level})'
                                   f' Unit type ({ObjectTypeIds(self.unit_mgr.get_type_id()).name})'
                                   f' Unit class ({Classes(self.unit_mgr.class_).name})'
                                   f' Unit race ({Races(self.unit_mgr.race).name})'
                                   f' Using level 60 attributes.')
                else:
                    Logger.error(f'Unsupported base attributes for level ({self.unit_mgr.level})'
                                 f' Unit type ({ObjectTypeIds(self.unit_mgr.get_type_id()).name})'
                                 f' Unit class ({Classes(self.unit_mgr.class_).name})'
                                 f' Unit race ({Races(self.unit_mgr.race).name})')
                    return

            self.base_stats[UnitStats.HEALTH] = base_stats.basehp
            self.base_stats[UnitStats.MANA] = base_stats.basemana
            self.base_stats[UnitStats.STRENGTH] = base_attrs.str
            self.base_stats[UnitStats.AGILITY] = base_attrs.agi
            self.base_stats[UnitStats.STAMINA] = base_attrs.sta
            self.base_stats[UnitStats.INTELLECT] = base_attrs.inte
            self.base_stats[UnitStats.SPIRIT] = base_attrs.spi
            self.unit_mgr.base_hp = base_stats.basehp
            self.unit_mgr.base_mana = base_stats.basemana
        # Creatures.
        else:
            self.base_stats[UnitStats.HEALTH] = self.unit_mgr.max_health
            self.base_stats[UnitStats.MANA] = self.unit_mgr.max_power_1
            self.base_stats[UnitStats.SPIRIT] = 1
            # Players don't have a flat dodge/block chance.
            self.base_stats[UnitStats.DODGE_CHANCE] = BASE_DODGE_CHANCE_CREATURE / 100
            # Players have block scaling, assign flat 5% to creatures.
            self.base_stats[UnitStats.BLOCK_CHANCE] = BASE_BLOCK_PARRY_CHANCE / 100
            self.base_stats[UnitStats.CRITICAL] = BASE_MELEE_CRITICAL_CHANCE / 100
            self.unit_mgr.base_hp = self.unit_mgr.max_health
            self.unit_mgr.base_mana = self.unit_mgr.max_power_1

        # Don't overwrite base speed if it has been modified.
        self.base_stats[UnitStats.SPEED_RUNNING] = self.base_stats.get(UnitStats.SPEED_RUNNING, config.Unit.Defaults.run_speed)

        # Players and creatures have an unchanging base 5% chance to block and parry (before defense skill differences).
        # As block chance also scales with strength, the value is calculated in update_base_block_chance.
        self.base_stats[UnitStats.PARRY_CHANCE] = BASE_BLOCK_PARRY_CHANCE / 100

        self.send_attributes()

        self.update_base_health_regen()
        self.update_base_mana_regen()

        self.update_base_proc_chance()
        self.update_base_melee_critical_chance()
        self.update_defense_bonuses()