diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2017-08-02 22:05:40 +0200 |
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2017-08-02 22:05:40 +0200 |
| commit | 759357049cdbe9a2f97bbab6e61299cd65ba1bec (patch) | |
| tree | 46e1547a07ca64206b9548ad0f22dcef3bef33c2 /src/server/game | |
| parent | c70b328eda8331a32b3fc7cc08af5e8b004d0705 (diff) | |
Scripts/Commands: Fix some quirkiness and potential crashes with live DB modification commands (npc move and npc delete), which are horrible and should be deleted anyway.
Fixes #20104.
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 9 |
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 |
