@@ -86,7 +86,7 @@ class mod_zone_difficulty_unitscript : public UnitScript
86
86
{
87
87
if (sZoneDifficulty ->SpellNerfOverrides [spellInfo->Id ].find (mapId) != sZoneDifficulty ->SpellNerfOverrides [spellInfo->Id ].end ())
88
88
{
89
- // Check if the mode of instance and SpellNerfOverride match
89
+ // Check if the mode of instance and SpellNerfOverride match
90
90
if (sZoneDifficulty ->OverrideModeMatches (target->GetMap ()->GetInstanceId (), spellInfo->Id , mapId))
91
91
absorb = eff->GetAmount () * sZoneDifficulty ->SpellNerfOverrides [spellInfo->Id ][mapId].NerfPct ;
92
92
}
@@ -1084,7 +1084,7 @@ class mod_zone_difficulty_allcreaturescript : public AllCreatureScript
1084
1084
1085
1085
CreatureBaseStats const * origCreatureStats = sObjectMgr ->GetCreatureBaseStats (creature->GetLevel (), creatureTemplate->unit_class );
1086
1086
uint32 baseHealth = origCreatureStats->GenerateHealth (creatureTemplate);
1087
- uint32 newHp = baseHealth;
1087
+ uint32 scaledBaseHealth = baseHealth;
1088
1088
uint32 entry = creature->GetEntry ();
1089
1089
1090
1090
uint32 phaseMask = creature->GetPhaseMask ();
@@ -1095,7 +1095,7 @@ class mod_zone_difficulty_allcreaturescript : public AllCreatureScript
1095
1095
{
1096
1096
// Trash mobs. Apply generic tuning.
1097
1097
if (!creature->IsDungeonBoss () && isMythic)
1098
- newHp = round (baseHealth * sZoneDifficulty ->MythicmodeHpModifier );
1098
+ scaledBaseHealth = round (baseHealth * sZoneDifficulty ->MythicmodeHpModifier );
1099
1099
}
1100
1100
else
1101
1101
{
@@ -1105,25 +1105,27 @@ class mod_zone_difficulty_allcreaturescript : public AllCreatureScript
1105
1105
if (!multiplier)
1106
1106
multiplier = 1 .0f ; // never 0
1107
1107
1108
- newHp = round (baseHealth * multiplier);
1108
+ scaledBaseHealth = round (baseHealth * multiplier);
1109
1109
}
1110
1110
1111
1111
if (matchingPhase != -1 )
1112
1112
{
1113
- if (creature-> GetMaxHealth () == newHp)
1114
- return ;
1115
-
1116
- bool hpIsFull = false ;
1113
+ float scaledHealth = scaledBaseHealth;
1114
+ scaledHealth *= creature-> GetModifierValue (UNIT_MOD_HEALTH, BASE_PCT) ;
1115
+ scaledHealth += creature-> GetModifierValue (UNIT_MOD_HEALTH, TOTAL_VALUE);
1116
+ scaledHealth *= creature-> GetModifierValue (UNIT_MOD_HEALTH, TOTAL_PCT) ;
1117
1117
1118
- if (creature->GetHealthPct () >= 100 )
1119
- hpIsFull = true ;
1118
+ if (creature->GetMaxHealth () == scaledHealth )
1119
+ return ;
1120
1120
1121
- creature->SetMaxHealth (newHp);
1122
- creature->SetCreateHealth (newHp);
1123
- creature->SetModifierValue (UNIT_MOD_HEALTH, BASE_VALUE, (float )newHp);
1124
- if (hpIsFull)
1125
- creature->SetHealth (newHp);
1126
- creature->UpdateAllStats ();
1121
+ float percent = creature->GetHealthPct ();
1122
+ creature->SetModifierValue (UNIT_MOD_HEALTH, BASE_VALUE, (float )scaledBaseHealth);
1123
+ creature->UpdateMaxHealth ();
1124
+ if (creature->IsAlive ())
1125
+ {
1126
+ uint32 scaledCurHealth = creature->CountPctFromMaxHealth (percent);
1127
+ creature->SetHealth (scaledCurHealth);
1128
+ }
1127
1129
creature->ResetPlayerDamageReq ();
1128
1130
}
1129
1131
}
0 commit comments