aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index bcca31ed94e..e500d575ab0 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1612,9 +1612,13 @@ void Creature::DeleteFromDB()
return;
}
+ // remove any scheduled respawns
GetMap()->RemoveRespawnTime(SPAWN_TYPE_CREATURE, m_spawnId);
+
+ // delete data from memory
sObjectMgr->DeleteCreatureData(m_spawnId);
+ // delete data and all its associations from DB
SQLTransaction trans = WorldDatabase.BeginTransaction();
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE);
@@ -1639,6 +1643,11 @@ void Creature::DeleteFromDB()
trans->Append(stmt);
WorldDatabase.CommitTransaction(trans);
+
+ // then delete any active instances of the creature
+ auto const& range = GetMap()->GetCreatureBySpawnIdStore().equal_range(m_spawnId);
+ for (auto it = range.first; it != range.second; ++it)
+ it->second->AddObjectToRemoveList();
}
bool Creature::IsInvisibleDueToDespawn() const