diff --git a/zone/npc.cpp b/zone/npc.cpp index 0eb0a91c9..dc93b12af 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -2611,15 +2611,31 @@ void NPC::ModifyNPCStat(const std::string& stat, const std::string& value) return; } else if (stat_lower == "min_hit") { - min_dmg = Strings::ToInt(value); + min_dmg = Strings::ToInt(value); + // TODO: fix DB + + if (min_dmg > max_dmg) { + const auto temporary_damage = max_dmg; + max_dmg = min_dmg; + min_dmg = temporary_damage; + } + base_damage = round((max_dmg - min_dmg) / 1.9); min_damage = min_dmg - round(base_damage / 10.0); return; } else if (stat_lower == "max_hit") { - max_dmg = Strings::ToInt(value); + max_dmg = Strings::ToInt(value); + // TODO: fix DB + + if (max_dmg < min_dmg) { + const auto temporary_damage = min_dmg; + min_dmg = max_dmg; + max_dmg = temporary_damage; + } + base_damage = round((max_dmg - min_dmg) / 1.9); min_damage = min_dmg - round(base_damage / 10.0); return; diff --git a/zone/npc_scale_manager.cpp b/zone/npc_scale_manager.cpp index 5831cafea..4d04fd3c1 100644 --- a/zone/npc_scale_manager.cpp +++ b/zone/npc_scale_manager.cpp @@ -135,6 +135,8 @@ void NpcScaleManager::ScaleNPC( npc->ModifyNPCStat("phr", std::to_string(scale_data.physical_resist)); } + auto min_damage_set = false; + if (always_scale || npc->GetMinDMG() == 0) { int64 min_dmg = scale_data.min_dmg; if (RuleB(Combat, UseNPCDamageClassLevelMods)) { @@ -145,9 +147,10 @@ void NpcScaleManager::ScaleNPC( } npc->ModifyNPCStat("min_hit", std::to_string(min_dmg)); + min_damage_set = true; } - if (always_scale || npc->GetMaxDMG() == 0) { + if (always_scale || npc->GetMaxDMG() == 0 || min_damage_set) { int64 max_dmg = scale_data.max_dmg; if (RuleB(Combat, UseNPCDamageClassLevelMods)) { uint32 class_level_damage_mod = GetClassLevelDamageMod(npc->GetLevel(), npc->GetClass());