Entities/Creature: Some asserts are now LOG_ERRORs that block spawning. Fix a group spawning bug exposed by the CoS merge. Improve some command output.

# Conflicts:
#	src/server/game/Maps/Map.cpp
#	src/server/scripts/Commands/cs_list.cpp
This commit is contained in:
Treeston
2019-07-07 19:18:32 +02:00
committed by Ovahlord
parent b6cbd70533
commit 83a25ce554
2 changed files with 24 additions and 6 deletions

View File

@@ -1537,14 +1537,32 @@ bool Creature::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap,
if (!m_respawnTime && !map->IsSpawnGroupActive(data->spawnGroupData->groupId))
{
// @todo pools need fixing! this is just a temporary crashfix, but they violate dynspawn principles
ASSERT(m_respawnCompatibilityMode || sPoolMgr->IsPartOfAPool<Creature>(spawnId), "Creature (SpawnID %u) trying to load in inactive spawn group %s.", spawnId, data->spawnGroupData->name.c_str());
if (!m_respawnCompatibilityMode)
{
// @todo pools need fixing! this is just a temporary thing, but they violate dynspawn principles
if (!sPoolMgr->IsPartOfAPool<Creature>(spawnId))
{
TC_LOG_ERROR("entities.unit", "Creature (SpawnID %u) trying to load in inactive spawn group '%s':\n%s", spawnId, data->spawnGroupData->name.c_str(), GetDebugInfo().c_str());
return false;
}
}
m_respawnTime = GameTime::GetGameTime() + urand(4, 7);
}
if (m_respawnTime) // respawn on Update
if (m_respawnTime)
{
ASSERT(m_respawnCompatibilityMode || sPoolMgr->IsPartOfAPool<Creature>(spawnId), "Creature (SpawnID %u) trying to load despite a respawn timer in progress.", spawnId);
if (!m_respawnCompatibilityMode)
{
// @todo same as above
if (!sPoolMgr->IsPartOfAPool<Creature>(spawnId))
{
TC_LOG_ERROR("entities.unit", "Creature (SpawnID %u) trying to load despite a respawn timer in progress:\n%s", spawnId, GetDebugInfo().c_str());
return false;
}
}
// compatibility mode creatures will be respawned in ::Update()
m_deathState = DEAD;
if (CanFly())
{

View File

@@ -3410,9 +3410,9 @@ bool Map::SpawnGroupSpawn(uint32 groupId, bool ignoreRespawn, bool force, std::v
continue;
time_t respawnTime = GetRespawnTime(data->type, data->spawnId);
if (respawnTime && respawnTime > time(NULL))
if (respawnTime)
{
if (!force && !ignoreRespawn)
if (!force && !ignoreRespawn && (respawnTime > GameTime::GetGameTime()))
continue;
// we need to remove the respawn time, otherwise we'd end up double spawning