Core/Spawns: Exterminate CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY with extreme prejudice. (It didn't work anyway.)
(cherry picked from commit 26440857c1a74031ea0a0234ca0b0fcb09b6bcb0)
This commit is contained in:
@@ -465,7 +465,7 @@ void Creature::RemoveCorpse(bool setSpawnTime, bool destroyForNearbyPlayers)
|
||||
uint32 respawnDelay = m_respawnDelay;
|
||||
m_respawnTime = std::max<time_t>(GameTime::GetGameTime() + respawnDelay, m_respawnTime);
|
||||
|
||||
SaveRespawnTime(0, false);
|
||||
SaveRespawnTime();
|
||||
}
|
||||
|
||||
if (TempSummon* summon = ToTempSummon())
|
||||
@@ -2109,11 +2109,7 @@ void Creature::setDeathState(DeathState s)
|
||||
m_respawnTime = GameTime::GetGameTime() + respawnDelay;
|
||||
}
|
||||
|
||||
// always save boss respawn time at death to prevent crash cheating
|
||||
if (sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY) || isWorldBoss())
|
||||
SaveRespawnTime();
|
||||
else if (!m_respawnCompatibilityMode)
|
||||
SaveRespawnTime(0, false);
|
||||
SaveRespawnTime();
|
||||
|
||||
ReleaseFocus(nullptr, false); // remove spellcast focus
|
||||
DoNotReacquireTarget(); // cancel delayed re-target
|
||||
@@ -2572,7 +2568,7 @@ bool Creature::_IsTargetAcceptable(Unit const* target) const
|
||||
return false;
|
||||
}
|
||||
|
||||
void Creature::SaveRespawnTime(uint32 forceDelay, bool savetodb)
|
||||
void Creature::SaveRespawnTime(uint32 forceDelay)
|
||||
{
|
||||
if (IsSummon() || !m_spawnId || (m_creatureData && !m_creatureData->dbData))
|
||||
return;
|
||||
@@ -2584,7 +2580,7 @@ void Creature::SaveRespawnTime(uint32 forceDelay, bool savetodb)
|
||||
}
|
||||
|
||||
time_t thisRespawnTime = forceDelay ? GameTime::GetGameTime() + forceDelay : m_respawnTime;
|
||||
GetMap()->SaveRespawnTime(SPAWN_TYPE_CREATURE, m_spawnId, GetEntry(), thisRespawnTime, GetMap()->GetZoneId(GetPhaseShift(), GetHomePosition()), Trinity::ComputeGridCoord(GetHomePosition().GetPositionX(), GetHomePosition().GetPositionY()).GetId(), savetodb && m_creatureData && m_creatureData->dbData);
|
||||
GetMap()->SaveRespawnTime(SPAWN_TYPE_CREATURE, m_spawnId, GetEntry(), thisRespawnTime, GetMap()->GetZoneId(GetPhaseShift(), GetHomePosition()), Trinity::ComputeGridCoord(GetHomePosition().GetPositionX(), GetHomePosition().GetPositionY()).GetId());
|
||||
}
|
||||
|
||||
// this should not be called by petAI or
|
||||
|
||||
@@ -266,7 +266,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
|
||||
time_t GetRespawnTimeEx() const;
|
||||
void SetRespawnTime(uint32 respawn);
|
||||
void Respawn(bool force = false);
|
||||
void SaveRespawnTime(uint32 forceDelay = 0, bool savetodb = true) override;
|
||||
void SaveRespawnTime(uint32 forceDelay = 0);
|
||||
|
||||
uint32 GetRespawnDelay() const { return m_respawnDelay; }
|
||||
void SetRespawnDelay(uint32 delay) { m_respawnDelay = delay; }
|
||||
|
||||
@@ -669,7 +669,7 @@ void GameObject::Update(uint32 diff)
|
||||
SetRespawnTime(WEEK);
|
||||
else
|
||||
m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
|
||||
SaveRespawnTime(); // also save to DB immediately
|
||||
SaveRespawnTime();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -730,7 +730,7 @@ void GameObject::Update(uint32 diff)
|
||||
|
||||
// Set respawn timer
|
||||
if (!m_respawnCompatibilityMode && m_respawnTime > 0)
|
||||
SaveRespawnTime(0, false);
|
||||
SaveRespawnTime();
|
||||
|
||||
if (isSpawned())
|
||||
{
|
||||
@@ -967,22 +967,13 @@ void GameObject::Update(uint32 diff)
|
||||
|
||||
// if option not set then object will be saved at grid unload
|
||||
// Otherwise just save respawn time to map object memory
|
||||
if (sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
|
||||
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 (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
|
||||
SaveRespawnTime(0, false);
|
||||
|
||||
// Then despawn
|
||||
if (m_respawnCompatibilityMode)
|
||||
DestroyForNearbyPlayers();
|
||||
else
|
||||
AddObjectToRemoveList();
|
||||
return;
|
||||
}
|
||||
|
||||
DestroyForNearbyPlayers(); // old UpdateObjectVisibility()
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -1389,7 +1380,7 @@ bool GameObject::IsDestructibleBuilding() const
|
||||
return gInfo->type == GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING;
|
||||
}
|
||||
|
||||
void GameObject::SaveRespawnTime(uint32 forceDelay, bool savetodb)
|
||||
void GameObject::SaveRespawnTime(uint32 forceDelay)
|
||||
{
|
||||
if (m_goData && (forceDelay || m_respawnTime > GameTime::GetGameTime()) && m_spawnedByDefault)
|
||||
{
|
||||
@@ -1400,7 +1391,7 @@ void GameObject::SaveRespawnTime(uint32 forceDelay, bool savetodb)
|
||||
}
|
||||
|
||||
uint32 thisRespawnTime = forceDelay ? GameTime::GetGameTime() + forceDelay : m_respawnTime;
|
||||
GetMap()->SaveRespawnTime(SPAWN_TYPE_GAMEOBJECT, m_spawnId, GetEntry(), thisRespawnTime, GetZoneId(), Trinity::ComputeGridCoord(GetPositionX(), GetPositionY()).GetId(), m_goData->dbData ? savetodb : false);
|
||||
GetMap()->SaveRespawnTime(SPAWN_TYPE_GAMEOBJECT, m_spawnId, GetEntry(), thisRespawnTime, GetZoneId(), Trinity::ComputeGridCoord(GetPositionX(), GetPositionY()).GetId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
|
||||
uint32 GetUseCount() const { return m_usetimes; }
|
||||
uint32 GetUniqueUseCount() const { return uint32(m_unique_users.size()); }
|
||||
|
||||
void SaveRespawnTime(uint32 forceDelay = 0, bool savetodb = true) override;
|
||||
void SaveRespawnTime(uint32 forceDelay = 0);
|
||||
|
||||
Loot loot;
|
||||
|
||||
|
||||
@@ -539,7 +539,6 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
|
||||
void PlayDirectSound(uint32 soundId, Player* target = nullptr, uint32 broadcastTextId = 0);
|
||||
void PlayDirectMusic(uint32 musicId, Player* target = nullptr);
|
||||
|
||||
virtual void SaveRespawnTime(uint32 /*forceDelay*/ = 0, bool /*saveToDB*/ = true) { }
|
||||
void AddObjectToRemoveList();
|
||||
|
||||
float GetGridActivationRange() const;
|
||||
|
||||
@@ -247,9 +247,6 @@ void ObjectGridUnloader::Visit(GridRefManager<T> &m)
|
||||
while (!m.isEmpty())
|
||||
{
|
||||
T *obj = m.getFirst()->GetSource();
|
||||
// if option set then object already saved at this moment
|
||||
if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
|
||||
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
|
||||
|
||||
@@ -1075,12 +1075,7 @@ void Map::RemoveFromMap(T *obj, bool remove)
|
||||
obj->ResetMap();
|
||||
|
||||
if (remove)
|
||||
{
|
||||
// if option set then object already saved at this moment
|
||||
if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
|
||||
obj->SaveRespawnTime();
|
||||
DeleteFromWorld(obj);
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
@@ -1120,12 +1115,7 @@ void Map::RemoveFromMap(Transport* obj, bool remove)
|
||||
obj->ResetMap();
|
||||
|
||||
if (remove)
|
||||
{
|
||||
// if option set then object already saved at this moment
|
||||
if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY))
|
||||
obj->SaveRespawnTime();
|
||||
DeleteFromWorld(obj);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
||||
@@ -210,7 +210,7 @@ void PoolGroup<Creature>::Despawn1Object(uint64 guid)
|
||||
++itr;
|
||||
// For dynamic spawns, save respawn time here
|
||||
if (!creature->GetRespawnCompatibilityMode())
|
||||
creature->SaveRespawnTime(0, false);
|
||||
creature->SaveRespawnTime();
|
||||
creature->AddObjectToRemoveList();
|
||||
}
|
||||
}
|
||||
@@ -236,7 +236,7 @@ void PoolGroup<GameObject>::Despawn1Object(uint64 guid)
|
||||
|
||||
// For dynamic spawns, save respawn time here
|
||||
if (!go->GetRespawnCompatibilityMode())
|
||||
go->SaveRespawnTime(0, false);
|
||||
go->SaveRespawnTime();
|
||||
go->AddObjectToRemoveList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1165,13 +1165,6 @@ void World::LoadConfigSettings(bool reload)
|
||||
m_int_configs[CONFIG_MAX_OVERSPEED_PINGS] = 2;
|
||||
}
|
||||
|
||||
m_bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY] = sConfigMgr->GetBoolDefault("SaveRespawnTimeImmediately", true);
|
||||
if (!m_bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY])
|
||||
{
|
||||
TC_LOG_WARN("server.loading", "SaveRespawnTimeImmediately triggers assertions when disabled, overridden to Enabled");
|
||||
m_bool_configs[CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY] = true;
|
||||
}
|
||||
|
||||
m_bool_configs[CONFIG_WEATHER] = sConfigMgr->GetBoolDefault("ActivateWeather", true);
|
||||
|
||||
m_int_configs[CONFIG_DISABLE_BREATHING] = sConfigMgr->GetIntDefault("DisableWaterBreath", SEC_CONSOLE);
|
||||
|
||||
@@ -119,7 +119,6 @@ enum WorldBoolConfigs
|
||||
CONFIG_GM_LOWER_SECURITY,
|
||||
CONFIG_SKILL_PROSPECTING,
|
||||
CONFIG_SKILL_MILLING,
|
||||
CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY,
|
||||
CONFIG_WEATHER,
|
||||
CONFIG_QUEST_IGNORE_RAID,
|
||||
CONFIG_CHAT_PARTY_RAID_WARNINGS,
|
||||
|
||||
@@ -288,14 +288,6 @@ Compression = 1
|
||||
|
||||
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.
|
||||
|
||||
Reference in New Issue
Block a user