diff options
| author | r00ty-tc <r00ty-tc@users.noreply.github.com> | 2017-11-15 00:59:23 +0100 |
|---|---|---|
| committer | r00ty-tc <r00ty-tc@users.noreply.github.com> | 2017-11-15 00:59:23 +0100 |
| commit | 3446424540c5692c9e0ff11803d70e8129a5adc4 (patch) | |
| tree | 73ce05816f5c7726119d2db5050036981fcfce8d | |
| parent | cb3627ca62712d4fba1c05cf4d9b12b82f317cc2 (diff) | |
Core/Spawn: Limit saved/stored respawn time.
- Limit to time_t maximum, for the compiled-for architecture.
Closes #20834
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 1501e2f2c5b..27ea877ca08 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2372,7 +2372,7 @@ void Creature::SaveRespawnTime(uint32 forceDelay, bool savetodb) return; } - uint32 thisRespawnTime = forceDelay ? time(NULL) + forceDelay : m_respawnTime; + time_t thisRespawnTime = forceDelay ? time(NULL) + forceDelay : m_respawnTime; GetMap()->SaveRespawnTime(SPAWN_TYPE_CREATURE, m_spawnId, GetEntry(), thisRespawnTime, GetMap()->GetZoneId(GetHomePosition()), Trinity::ComputeGridCoord(GetHomePosition().GetPositionX(), GetHomePosition().GetPositionY()).GetId(), savetodb && m_creatureData && m_creatureData->dbData); } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ee20c63b7e1..61f24f2b6e5 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2972,7 +2972,9 @@ bool Map::CheckRespawn(RespawnInfo* info) { time_t now = time(NULL); time_t respawnTime; - if (sObjectMgr->GetLinkedRespawnGuid(thisGUID) == thisGUID) // never respawn, save "something" in DB + if (linkedTime == std::numeric_limits<time_t>::max()) + respawnTime = linkedTime; + else if (sObjectMgr->GetLinkedRespawnGuid(thisGUID) == thisGUID) // never respawn, save "something" in DB respawnTime = now + WEEK; else // set us to check again shortly after linked unit respawnTime = std::max<time_t>(now, linkedTime) + urand(5, 15); |
