/* EQEmu: EQEmulator Copyright (C) 2001-2026 EQEmu Development Team 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; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 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, see . */ #pragma once #include "zone/npc.h" #include "zone/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;