diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 1b57ac0ed..7821cdc8d 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -2213,7 +2213,7 @@ namespace Game.Entities return; } - uint thisRespawnTime = (uint)(forceDelay != 0 ? Time.UnixTime + forceDelay : m_respawnTime); + long thisRespawnTime = forceDelay != 0 ? Time.UnixTime + forceDelay : m_respawnTime; GetMap().SaveRespawnTime(SpawnObjectType.Creature, m_spawnId, GetEntry(), thisRespawnTime, GetMap().GetZoneId(GetPhaseShift(), GetHomePosition()), GridDefines.ComputeGridCoord(GetHomePosition().GetPositionX(), GetHomePosition().GetPositionY()).GetId(), saveToDb && m_creatureData != null && m_creatureData.dbData); } diff --git a/Source/Game/Entities/GameObject/GameObject.cs b/Source/Game/Entities/GameObject/GameObject.cs index 313b89e8a..a9e348673 100644 --- a/Source/Game/Entities/GameObject/GameObject.cs +++ b/Source/Game/Entities/GameObject/GameObject.cs @@ -1148,7 +1148,7 @@ namespace Game.Entities return; } - uint thisRespawnTime = (uint)(forceDelay != 0 ? Time.UnixTime + forceDelay : m_respawnTime); + long thisRespawnTime = forceDelay != 0 ? Time.UnixTime + forceDelay : m_respawnTime; GetMap().SaveRespawnTime(SpawnObjectType.GameObject, m_spawnId, GetEntry(), thisRespawnTime, GetZoneId(), GridDefines.ComputeGridCoord(GetPositionX(), GetPositionY()).GetId(), m_goData.dbData ? savetodb : false); } } diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index 943b8dc4e..1e3dac1ae 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -2536,7 +2536,9 @@ namespace Game.Maps { long now = Time.UnixTime; long respawnTime; - if (Global.ObjectMgr.GetLinkedRespawnGuid(thisGUID) == thisGUID) // never respawn, save "something" in DB + if (linkedTime == long.MaxValue) + respawnTime = linkedTime; + else if (Global.ObjectMgr.GetLinkedRespawnGuid(thisGUID) == thisGUID) // never respawn, save "something" in DB respawnTime = now + Time.Week; else // set us to check again shortly after linked unit respawnTime = Math.Max(now, linkedTime) + RandomHelper.URand(5, 15);