diff --git a/src/mod_zone_difficulty_scripts.cpp b/src/mod_zone_difficulty_scripts.cpp index 8654c905..86184d2e 100644 --- a/src/mod_zone_difficulty_scripts.cpp +++ b/src/mod_zone_difficulty_scripts.cpp @@ -1084,7 +1084,7 @@ class mod_zone_difficulty_allcreaturescript : public AllCreatureScript CreatureBaseStats const* origCreatureStats = sObjectMgr->GetCreatureBaseStats(creature->GetLevel(), creatureTemplate->unit_class); uint32 baseHealth = origCreatureStats->GenerateHealth(creatureTemplate); - uint32 newHp = baseHealth; + uint32 scaledHealth = baseHealth; uint32 entry = creature->GetEntry(); uint32 phaseMask = creature->GetPhaseMask(); @@ -1095,7 +1095,7 @@ class mod_zone_difficulty_allcreaturescript : public AllCreatureScript { // Trash mobs. Apply generic tuning. if (!creature->IsDungeonBoss() && isMythic) - newHp = round(baseHealth * sZoneDifficulty->MythicmodeHpModifier); + scaledHealth = round(baseHealth * sZoneDifficulty->MythicmodeHpModifier); } else { @@ -1105,24 +1105,24 @@ class mod_zone_difficulty_allcreaturescript : public AllCreatureScript if (!multiplier) multiplier = 1.0f; // never 0 - newHp = round(baseHealth * multiplier); + scaledHealth = round(baseHealth * multiplier); } if (matchingPhase != -1) { - if (creature->GetMaxHealth() == newHp) + if (creature->GetMaxHealth() == scaledHealth) return; - bool hpIsFull = false; + uint32 prevMaxHealth = creature->GetMaxHealth(); + uint32 prevHealth = creature->GetHealth(); - if (creature->GetHealthPct() >= 100) - hpIsFull = true; + creature->SetMaxHealth(scaledHealth); + creature->SetCreateHealth(scaledHealth); + creature->SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)scaledHealth); + + uint32 scaledCurHealth = prevHealth && prevMaxHealth ? float(scaledHealth)/float(prevMaxHealth)*float(prevHealth) : 0; + creature->SetHealth(scaledCurHealth); - creature->SetMaxHealth(newHp); - creature->SetCreateHealth(newHp); - creature->SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)newHp); - if (hpIsFull) - creature->SetHealth(newHp); creature->UpdateAllStats(); creature->ResetPlayerDamageReq(); }