aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Creature
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2024-03-30 20:21:28 +0100
committerGitHub <noreply@github.com>2024-03-30 20:21:28 +0100
commitdef601b4ff82ec8a90af60408a87cac92fdf070d (patch)
tree4e5de744a4712a49b1126b8270ac02d842d56e32 /src/server/game/Entities/Creature
parentd8a82ab909543259be7632bb1e1b256ed6bfa4c2 (diff)
Core/Creatures: Changed the spawn health field in creature table to a percentage (#29801)
Diffstat (limited to 'src/server/game/Entities/Creature')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp40
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h3
2 files changed, 6 insertions, 37 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 18343779978..fedad2a592d 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1492,8 +1492,7 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic
// prevent add data integrity problems
data.wander_distance = GetDefaultMovementType() == IDLE_MOTION_TYPE ? 0.0f : m_wanderDistance;
data.currentwaypoint = 0;
- data.curhealth = GetHealth();
- data.curmana = GetPower(POWER_MANA);
+ data.curHealthPct = uint32(GetHealthPct());
// prevent add data integrity problems
data.movementType = !m_wanderDistance && GetDefaultMovementType() == RANDOM_MOTION_TYPE
? IDLE_MOTION_TYPE : GetDefaultMovementType();
@@ -1546,8 +1545,7 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic
stmt->setUInt32(index++, m_respawnDelay);
stmt->setFloat(index++, m_wanderDistance);
stmt->setUInt32(index++, 0);
- stmt->setUInt32(index++, GetHealth());
- stmt->setUInt32(index++, GetPower(POWER_MANA));
+ stmt->setUInt32(index++, uint32(GetHealthPct()));
stmt->setUInt8(index++, uint8(GetDefaultMovementType()));
if (npcflag.has_value())
stmt->setUInt64(index++, *npcflag);
@@ -1608,15 +1606,7 @@ void Creature::UpdateLevelDependantStats()
Powers powerType = CalculateDisplayPowerType();
SetCreateMana(stats->BaseMana);
SetStatPctModifier(UnitMods(UNIT_MOD_POWER_START + AsUnderlyingType(powerType)), BASE_PCT, GetCreatureDifficulty()->ManaModifier);
- SetPowerType(powerType);
-
- if (PowerTypeEntry const* powerTypeEntry = sDB2Manager.GetPowerTypeEntry(powerType))
- {
- if (powerTypeEntry->GetFlags().HasFlag(PowerTypeFlags::UnitsUseDefaultPowerOnInit))
- SetPower(powerType, powerTypeEntry->DefaultPower);
- else
- SetFullPower(powerType);
- }
+ SetPowerType(powerType, true, true);
// damage
float basedamage = GetBaseDamageForLevel(level);
@@ -1968,28 +1958,8 @@ void Creature::LoadEquipment(int8 id, bool force /*= true*/)
void Creature::SetSpawnHealth()
{
- if (_staticFlags.HasFlag(CREATURE_STATIC_FLAG_5_NO_HEALTH_REGEN))
- return;
-
- uint32 curhealth;
- if (m_creatureData && !_regenerateHealth)
- {
- curhealth = m_creatureData->curhealth;
- if (curhealth)
- {
- curhealth = uint32(curhealth*GetHealthMod(GetCreatureTemplate()->Classification));
- if (curhealth < 1)
- curhealth = 1;
- }
- SetPower(POWER_MANA, m_creatureData->curmana);
- }
- else
- {
- curhealth = GetMaxHealth();
- SetFullPower(POWER_MANA);
- }
-
- SetHealth((m_deathState == ALIVE || m_deathState == JUST_RESPAWNED) ? curhealth : 0);
+ SetHealth(CountPctFromMaxHealth(m_creatureData ? m_creatureData->curHealthPct : 100));
+ SetInitialPowerValue(GetPowerType());
}
bool Creature::hasQuest(uint32 quest_id) const
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index 976244a8f85..dea0e4be37b 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -592,8 +592,7 @@ struct CreatureData : public SpawnData
int8 equipmentId = 0;
float wander_distance = 0.0f;
uint32 currentwaypoint = 0;
- uint32 curhealth = 0;
- uint32 curmana = 0;
+ uint32 curHealthPct = 0;
uint8 movementType = 0;
Optional<uint64> npcflag;
Optional<uint32> unit_flags; // enum UnitFlags mask values