diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 909be05fa..ff0bc8a7a 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -1678,7 +1678,6 @@ namespace Framework.Constants RespawnMinCheckIntervalMs, RespawnRestartQuietTime, RestrictedLfgChannel, - SaveRespawnTimeImmediately, SessionAddDelay, ShowBanInWorld, ShowKickInWorld, diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index b0a941399..0d149aa63 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -208,7 +208,7 @@ namespace Game.Entities uint respawnDelay = m_respawnDelay; m_respawnTime = Math.Max(GameTime.GetGameTime() + respawnDelay, m_respawnTime); - SaveRespawnTime(0, false); + SaveRespawnTime(); } TempSummon summon = ToTempSummon(); @@ -1802,12 +1802,8 @@ namespace Game.Entities else m_respawnTime = GameTime.GetGameTime() + respawnDelay; } - - // always save boss respawn time at death to prevent crash cheating - if (WorldConfig.GetBoolValue(WorldCfg.SaveRespawnTimeImmediately) || IsWorldBoss()) - SaveRespawnTime(); - else if (!m_respawnCompatibilityMode) - SaveRespawnTime(0, false); + + SaveRespawnTime(); ReleaseFocus(null, false); // remove spellcast focus DoNotReacquireTarget(); // cancel delayed re-target @@ -2265,7 +2261,7 @@ namespace Game.Entities return false; } - public override void SaveRespawnTime(uint forceDelay = 0, bool saveToDb = true) + public void SaveRespawnTime(uint forceDelay = 0) { if (IsSummon() || m_spawnId == 0 || (m_creatureData != null && !m_creatureData.dbData)) return; @@ -2277,7 +2273,7 @@ namespace Game.Entities } long thisRespawnTime = forceDelay != 0 ? GameTime.GetGameTime() + 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); + GetMap().SaveRespawnTime(SpawnObjectType.Creature, m_spawnId, GetEntry(), thisRespawnTime, GetMap().GetZoneId(GetPhaseShift(), GetHomePosition()), GridDefines.ComputeGridCoord(GetHomePosition().GetPositionX(), GetHomePosition().GetPositionY()).GetId()); } public bool CanCreatureAttack(Unit victim, bool force = true) diff --git a/Source/Game/Entities/GameObject/GameObject.cs b/Source/Game/Entities/GameObject/GameObject.cs index ba261eed4..46420efc0 100644 --- a/Source/Game/Entities/GameObject/GameObject.cs +++ b/Source/Game/Entities/GameObject/GameObject.cs @@ -566,7 +566,7 @@ namespace Game.Entities SetRespawnTime(Time.Week); else m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + RandomHelper.IRand(5, Time.Minute); // else copy time from master and add a little - SaveRespawnTime(); // also save to DB immediately + SaveRespawnTime(); return; } @@ -625,7 +625,7 @@ namespace Game.Entities // Set respawn timer if (!m_respawnCompatibilityMode && m_respawnTime > 0) - SaveRespawnTime(0, false); + SaveRespawnTime(); if (IsSpawned()) { @@ -875,22 +875,13 @@ namespace Game.Entities // if option not set then object will be saved at grid unload // Otherwise just save respawn time to map object memory - if (WorldConfig.GetBoolValue(WorldCfg.SaveRespawnTimeImmediately)) - SaveRespawnTime(); + SaveRespawnTime(); - if (!m_respawnCompatibilityMode) - { - // Respawn time was just saved if set to save to DB - // If not, we save only to map memory - if (!WorldConfig.GetBoolValue(WorldCfg.SaveRespawnTimeImmediately)) - SaveRespawnTime(0, false); - - // Then despawn + if (m_respawnCompatibilityMode) + DestroyForNearbyPlayers(); + else AddObjectToRemoveList(); - return; - } - DestroyForNearbyPlayers(); // old UpdateObjectVisibility() break; } } @@ -1274,7 +1265,7 @@ namespace Game.Entities public Transport ToTransport() { return GetGoInfo().type == GameObjectTypes.MapObjTransport ? (this as Transport) : null; } - public override void SaveRespawnTime(uint forceDelay = 0, bool savetodb = true) + public void SaveRespawnTime(uint forceDelay = 0) { if (m_goData != null && (forceDelay != 0 || m_respawnTime > GameTime.GetGameTime()) && m_spawnedByDefault) { @@ -1285,7 +1276,7 @@ namespace Game.Entities } long thisRespawnTime = forceDelay != 0 ? GameTime.GetGameTime() + forceDelay : m_respawnTime; - GetMap().SaveRespawnTime(SpawnObjectType.GameObject, m_spawnId, GetEntry(), thisRespawnTime, GetZoneId(), GridDefines.ComputeGridCoord(GetPositionX(), GetPositionY()).GetId(), m_goData.dbData && savetodb); + GetMap().SaveRespawnTime(SpawnObjectType.GameObject, m_spawnId, GetEntry(), thisRespawnTime, GetZoneId(), GridDefines.ComputeGridCoord(GetPositionX(), GetPositionY()).GetId()); } } diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index e4285d7dc..18718da5d 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -2821,8 +2821,6 @@ namespace Game.Entities public virtual uint GetLevelForTarget(WorldObject target) { return 1; } - public virtual void SaveRespawnTime(uint forceDelay = 0, bool saveToDB = true) { } - public ZoneScript GetZoneScript() { return m_zoneScript; } public void AddToNotify(NotifyFlags f) { m_notifyflags |= f; } diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index 8a6a71a72..d167de53d 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -965,12 +965,7 @@ namespace Game.Maps obj.ResetMap(); if (remove) - { - // if option set then object already saved at this moment - if (!WorldConfig.GetBoolValue(WorldCfg.SaveRespawnTimeImmediately)) - obj.SaveRespawnTime(); DeleteFromWorld(obj); - } } public void RemoveFromMap(Transport obj, bool remove) @@ -1002,12 +997,7 @@ namespace Game.Maps obj.ResetMap(); if (remove) - { - // if option set then object already saved at this moment - if (!WorldConfig.GetBoolValue(WorldCfg.SaveRespawnTimeImmediately)) - obj.SaveRespawnTime(); DeleteFromWorld(obj); - } } bool CheckGridIntegrity(T obj, bool moved) where T : WorldObject diff --git a/Source/Game/Maps/ObjectGridLoader.cs b/Source/Game/Maps/ObjectGridLoader.cs index 07bff3982..a66f84087 100644 --- a/Source/Game/Maps/ObjectGridLoader.cs +++ b/Source/Game/Maps/ObjectGridLoader.cs @@ -280,9 +280,6 @@ namespace Game.Maps if (obj.IsTypeId(TypeId.Corpse)) continue; - // if option set then object already saved at this moment - if (!WorldConfig.GetBoolValue(WorldCfg.SaveRespawnTimeImmediately)) - obj.SaveRespawnTime(); //Some creatures may summon other temp summons in CleanupsBeforeDelete() //So we need this even after cleaner (maybe we can remove cleaner) //Example: Flame Leviathan Turret 33139 is summoned when a creature is deleted diff --git a/Source/Game/Pools/PoolManager.cs b/Source/Game/Pools/PoolManager.cs index def5523be..693cefd8a 100644 --- a/Source/Game/Pools/PoolManager.cs +++ b/Source/Game/Pools/PoolManager.cs @@ -651,7 +651,7 @@ namespace Game { // For dynamic spawns, save respawn time here if (!creature.GetRespawnCompatibilityMode()) - creature.SaveRespawnTime(0, false); + creature.SaveRespawnTime(); creature.AddObjectToRemoveList(); } @@ -673,7 +673,7 @@ namespace Game { // For dynamic spawns, save respawn time here if (!go.GetRespawnCompatibilityMode()) - go.SaveRespawnTime(0, false); + go.SaveRespawnTime(); go.AddObjectToRemoveList(); } diff --git a/Source/Game/Server/WorldConfig.cs b/Source/Game/Server/WorldConfig.cs index 67b7990cb..7b88a7c21 100644 --- a/Source/Game/Server/WorldConfig.cs +++ b/Source/Game/Server/WorldConfig.cs @@ -623,13 +623,6 @@ namespace Game Values[WorldCfg.MaxOverspeedPings] = 2; } - Values[WorldCfg.SaveRespawnTimeImmediately] = GetDefaultValue("SaveRespawnTimeImmediately", true); - if (!(bool)Values[WorldCfg.SaveRespawnTimeImmediately]) - { - Log.outWarn(LogFilter.ServerLoading, "SaveRespawnTimeImmediately triggers assertions when Disabled, overridden to Enabled"); - Values[WorldCfg.SaveRespawnTimeImmediately] = true; - } - Values[WorldCfg.Weather] = GetDefaultValue("ActivateWeather", true); Values[WorldCfg.DisableBreathing] = GetDefaultValue("DisableWaterBreath", (int)AccountTypes.Console); diff --git a/Source/WorldServer/WorldServer.conf.dist b/Source/WorldServer/WorldServer.conf.dist index 1d4baac99..734599fa5 100644 --- a/Source/WorldServer/WorldServer.conf.dist +++ b/Source/WorldServer/WorldServer.conf.dist @@ -262,14 +262,6 @@ RealmsStateUpdateDelay = 10 PlayerLimit = 0 -# -# SaveRespawnTimeImmediately -# Description: Save respawn time for creatures at death and gameobjects at use/open. -# Default: 1 - (Enabled, Save respawn time immediately) -# 0 - (Disabled, Save respawn time at grid unloading) - -SaveRespawnTimeImmediately = 1 - # # MaxOverspeedPings # Description: Maximum overspeed ping count before character is disconnected.