aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2018-02-14 02:23:55 +0100
committerTreeston <treeston.mmoc@gmail.com>2018-02-14 02:24:13 +0100
commit264d4e1d30debcf6feacee3d29982875672a7bbe (patch)
tree3ad8ceb5821a5778770685ca17e01eca3be703f3 /src/server/game/Entities/GameObject
parent826b3cf09e1638c27f6d47bef35cc041f4a17381 (diff)
Entities/GO: Add forceRespawnTimer support to DespawnOrUnsummon. Use it in SAI.
Diffstat (limited to 'src/server/game/Entities/GameObject')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp14
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h3
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 00e3e63ecff..7e55bb33c0c 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -411,7 +411,7 @@ void GameObject::Update(uint32 diff)
if (m_despawnDelay > diff)
m_despawnDelay -= diff;
else
- DespawnOrUnsummon();
+ DespawnOrUnsummon(0ms, m_despawnRespawnTime);
}
switch (m_lootState)
@@ -826,17 +826,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 840d19a3510..e28f8973535 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -151,7 +151,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 getFishLoot(Loot* loot, Player* loot_owner);
void getFishLootJunk(Loot* loot, Player* loot_owner);
@@ -293,6 +293,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;