diff options
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 3 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 0dfb70f1a9c..3f62d08954d 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -524,7 +524,7 @@ void GameObject::Update(uint32 diff) if (m_despawnDelay > diff) m_despawnDelay -= diff; else - DespawnOrUnsummon(); + DespawnOrUnsummon(0ms, m_despawnRespawnTime); } switch (m_lootState) @@ -954,17 +954,21 @@ void GameObject::AddUniqueUse(Player* player) m_unique_users.insert(player->GetGUID()); } -void GameObject::DespawnOrUnsummon(Milliseconds const& delay) +void GameObject::DespawnOrUnsummon(Milliseconds const& delay, Seconds const& forceRespawnTime) { - if (delay > Milliseconds::zero()) + if (delay > 0ms) { if (!m_despawnDelay || m_despawnDelay > delay.count()) + { m_despawnDelay = delay.count(); + m_despawnRespawnTime = forceRespawnTime; + } } else { - if (m_goData && m_respawnDelayTime) - SaveRespawnTime(m_respawnDelayTime); + uint32 const respawnDelay = (forceRespawnTime > 0s) ? forceRespawnTime.count() : m_respawnDelayTime; + if (m_goData && respawnDelay) + SaveRespawnTime(respawnDelay); Delete(); } } diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 0a59323fe5c..42979d3f8ab 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -164,7 +164,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> void SetSpawnedByDefault(bool b) { m_spawnedByDefault = b; } uint32 GetRespawnDelay() const { return m_respawnDelayTime; } void Refresh(); - void DespawnOrUnsummon(Milliseconds const& delay = 0ms); + void DespawnOrUnsummon(Milliseconds const& delay = 0ms, Seconds const& forceRespawnTime = 0s); void Delete(); void SendGameObjectDespawn(); void getFishLoot(Loot* loot, Player* loot_owner); @@ -318,6 +318,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()), uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer uint32 m_despawnDelay; + Seconds m_despawnRespawnTime; // override respawn time after delayed despawn LootState m_lootState; ObjectGuid m_lootStateUnitGUID; // GUID of the unit passed with SetLootState(LootState, Unit*) bool m_spawnedByDefault; |
