diff options
| author | Meji <alvaro.megias@outlook.com> | 2024-03-30 20:21:28 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-30 20:21:28 +0100 |
| commit | def601b4ff82ec8a90af60408a87cac92fdf070d (patch) | |
| tree | 4e5de744a4712a49b1126b8270ac02d842d56e32 /src/server/game/Entities/Unit | |
| parent | d8a82ab909543259be7632bb1e1b256ed6bfa4c2 (diff) | |
Core/Creatures: Changed the spawn health field in creature table to a percentage (#29801)
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 64 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 3 |
2 files changed, 46 insertions, 21 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 42919533589..6bb4cd2a8cb 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -5531,12 +5531,43 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType SendAttackStateUpdate(&dmgInfo); } -void Unit::SetPowerType(Powers new_powertype, bool sendUpdate/* = true*/) +void Unit::SetPowerType(Powers power, bool sendUpdate/* = true*/, bool onInit /*= false*/) { - if (GetPowerType() == new_powertype) + if (!onInit && GetPowerType() == power) return; - SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayPower), new_powertype); + PowerTypeEntry const* powerTypeEntry = sDB2Manager.GetPowerTypeEntry(power); + if (!powerTypeEntry) + return; + + if (IsCreature() && !powerTypeEntry->GetFlags().HasFlag(PowerTypeFlags::IsUsedByNPCs)) + return; + + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayPower), power); + + // Update max power + UpdateMaxPower(power); + + // Update current power + if (!onInit) + { + switch (power) + { + case POWER_MANA: // Keep the same (druid form switching...) + case POWER_ENERGY: + break; + case POWER_RAGE: // Reset to zero + SetPower(POWER_RAGE, 0); + break; + case POWER_FOCUS: // Make it full + SetFullPower(power); + break; + default: + break; + } + } + else + SetInitialPowerValue(power); if (!sendUpdate) return; @@ -5551,25 +5582,18 @@ void Unit::SetPowerType(Powers new_powertype, bool sendUpdate/* = true*/) if (pet->isControlled()) pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_POWER_TYPE); }*/ +} - // Update max power - UpdateMaxPower(new_powertype); +void Unit::SetInitialPowerValue(Powers powerType) +{ + PowerTypeEntry const* powerTypeEntry = sDB2Manager.GetPowerTypeEntry(powerType); + if (!powerTypeEntry) + return; - // Update current power - switch (new_powertype) - { - case POWER_MANA: // Keep the same (druid form switching...) - case POWER_ENERGY: - break; - case POWER_RAGE: // Reset to zero - SetPower(POWER_RAGE, 0); - break; - case POWER_FOCUS: // Make it full - SetFullPower(new_powertype); - break; - default: - break; - } + if (powerTypeEntry->GetFlags().HasFlag(PowerTypeFlags::UnitsUseDefaultPowerOnInit)) + SetPower(powerType, powerTypeEntry->DefaultPower); + else + SetFullPower(powerType); } Powers Unit::CalculateDisplayPowerType() const diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index abcf9c295b5..d2a69f57567 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -797,7 +797,8 @@ class TC_GAME_API Unit : public WorldObject virtual float GetArmorMultiplierForTarget(WorldObject const* /*target*/) const { return 1.0f; } Powers GetPowerType() const { return Powers(*m_unitData->DisplayPower); } - void SetPowerType(Powers power, bool sendUpdate = true); + void SetPowerType(Powers power, bool sendUpdate = true, bool onInit = false); + void SetInitialPowerValue(Powers powerType); void SetOverrideDisplayPowerId(uint32 powerDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::OverrideDisplayPowerID), powerDisplayId); } Powers CalculateDisplayPowerType() const; void UpdateDisplayPower(); |
