diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 58 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 1 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp | 1 |
3 files changed, 37 insertions, 23 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 4a5f70165fc..a5e28e8c5e4 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1383,26 +1383,7 @@ bool Creature::LoadCreatureFromDB(ObjectGuid::LowType spawnId, Map* map, bool ad } } - uint32 curhealth; - - if (!m_regenHealth) - { - curhealth = data->curhealth; - if (curhealth) - { - curhealth = uint32(curhealth*_GetHealthMod(GetCreatureTemplate()->rank)); - if (curhealth < 1) - curhealth = 1; - } - SetPower(POWER_MANA, data->curmana); - } - else - { - curhealth = GetMaxHealth(); - SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); - } - - SetHealth(m_deathState == ALIVE ? curhealth : 0); + SetSpawnHealth(); // checked at creature_template loading m_defaultMovementType = MovementGeneratorType(data->movementType); @@ -1443,6 +1424,35 @@ void Creature::LoadEquipment(int8 id, bool force /*= true*/) SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + i, einfo->ItemEntry[i]); } +void Creature::SetSpawnHealth() +{ + uint32 curhealth; + + if (!m_regenHealth) + { + if (m_creatureData) + { + curhealth = m_creatureData->curhealth; + if (curhealth) + { + curhealth = uint32(curhealth*_GetHealthMod(GetCreatureTemplate()->rank)); + if (curhealth < 1) + curhealth = 1; + } + SetPower(POWER_MANA, m_creatureData->curmana); + } + else + curhealth = GetHealth(); + } + else + { + curhealth = GetMaxHealth(); + SetPower(POWER_MANA, GetMaxPower(POWER_MANA)); + } + + SetHealth(m_deathState == ALIVE ? curhealth : 0); +} + bool Creature::hasQuest(uint32 quest_id) const { QuestRelationBounds qr = sObjectMgr->GetCreatureQuestRelationBounds(GetEntry()); @@ -1654,9 +1664,11 @@ void Creature::setDeathState(DeathState s) } else if (s == JUST_RESPAWNED) { - //if (IsPet()) - // setActive(true); - SetFullHealth(); + if (IsPet()) + SetFullHealth(); + else + SetSpawnHealth(); + SetLootRecipient(nullptr); ResetPlayerDamageReq(); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index cfe637c4b21..57a025fdd88 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -442,6 +442,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool LoadCreaturesAddon(); void SelectLevel(); void LoadEquipment(int8 id = 1, bool force = false); + void SetSpawnHealth(); ObjectGuid::LowType GetSpawnId() const { return m_spawnId; } diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 77185f4f25e..513cb823477 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -34,6 +34,7 @@ void HomeMovementGenerator<Creature>::DoFinalize(Creature* owner) owner->ClearUnitState(UNIT_STATE_EVADE); owner->SetWalk(true); owner->LoadCreaturesAddon(); + owner->SetSpawnHealth(); owner->AI()->JustReachedHome(); } } |