/** * EQEmulator: Everquest Server Emulator * Copyright (C) 2001-2018 EQEmulator Development Team (https://github.com/EQEmu/Server) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY except by those people which sell it, which * are required to give you total support for your newly bought product; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef EQEMU_NPC_SCALE_MANAGER_H #define EQEMU_NPC_SCALE_MANAGER_H #include "npc.h" #include "zone.h" extern Zone* zone; class NpcScaleManager { public: struct global_npc_scale { int8 type; uint8 level; uint32 zone_id; uint16 instance_version; int ac; int64 hp; int accuracy; int slow_mitigation; int attack; int strength; int stamina; int dexterity; int agility; int intelligence; int wisdom; int charisma; int magic_resist; int cold_resist; int fire_resist; int poison_resist; int disease_resist; int corruption_resist; int physical_resist; int min_dmg; int max_dmg; int64 hp_regen_rate; int64 hp_regen_per_second; int attack_delay; int spell_scale; int heal_scale; uint32 avoidance; int heroic_strikethrough; std::string special_abilities; }; std::vector scaling_stats = { "ac", "max_hp", "accuracy", "slow_mitigation", "atk", "str", "sta", "dex", "agi", "int", "wis", "cha", "mr", "cr", "fr", "pr", "dr", "cr", "pr", "min_hit", "max_hit", "hp_regen", "hp_regen_per_second", "attack_delay", "spell_scale", "heal_scale", "avoidance", "heroic_strikethrough", "special_abilities" }; void ScaleNPC(NPC* npc, bool always_scale = false, bool override_special_abilities = false); void ResetNPCScaling(NPC* npc); bool IsAutoScaled(NPC* npc); bool LoadScaleData(); global_npc_scale GetGlobalScaleDataForTypeLevel( int8 npc_type, uint8 npc_level, uint32 zone_id, uint16 instance_version ); std::map, global_npc_scale> npc_global_base_scaling_data; int8 GetNPCScalingType(NPC * &npc); std::string GetNPCScalingTypeName(NPC * &npc); bool ApplyGlobalBaseScalingToNPCStatically(NPC * &npc); bool ApplyGlobalBaseScalingToNPCDynamically(NPC * &npc); uint32 GetClassLevelDamageMod(uint32 level, uint32 npc_class); }; extern NpcScaleManager *npc_scale_manager; #endif //EQEMU_NPC_SCALE_MANAGER_H