Skip to content

Commit

Permalink
fix: health scaling for <100%hp mobs (#49)
Browse files Browse the repository at this point in the history
  • Loading branch information
sogladev authored Nov 14, 2024
1 parent f1e555a commit 4e04c2f
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions src/mod_zone_difficulty_scripts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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
{
Expand All @@ -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();
}
Expand Down

0 comments on commit 4e04c2f

Please sign in to comment.