diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-07-26 19:55:02 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-07-26 19:55:02 +0200 |
commit | 73c1d666fa694ab96455534cfdb40be1bd4aff8c (patch) | |
tree | a727f8992b8e70acc3bc4e3e4ff9e90cbd562d47 | |
parent | f5978d6d2bce730c31546d180c4c507c24394f41 (diff) |
Core/Entities: Fixed crash happening when deleting a creature/gameobject on respawn timer from db
Closes #23590
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 2cd09ca046b..c617066b375 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -494,7 +494,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) LoadEquipment(); // use default equipment (if available) for summons else if (data->equipmentId == 0) LoadEquipment(0); // 0 means no equipment for creature table - else + else { m_originalEquipmentId = data->equipmentId; LoadEquipment(data->equipmentId); @@ -1736,7 +1736,7 @@ bool Creature::hasInvolvedQuest(uint32 quest_id) const if (!data) return false; - SQLTransaction trans = WorldDatabase.BeginTransaction(); + SQLTransaction trans = CharacterDatabase.BeginTransaction(); sMapMgr->DoForAllMapsWithMapId(data->spawnPoint.GetMapId(), [spawnId, trans](Map* map) -> void @@ -1754,6 +1754,10 @@ bool Creature::hasInvolvedQuest(uint32 quest_id) const // delete data from memory ... sObjectMgr->DeleteCreatureData(spawnId); + CharacterDatabase.CommitTransaction(trans); + + trans = WorldDatabase.BeginTransaction(); + // ... and the database PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_CREATURE); stmt->setUInt32(0, spawnId); diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index b3d72cce576..dbfeeba3831 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1110,7 +1110,7 @@ bool GameObject::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap if (!data) return false; - SQLTransaction trans = WorldDatabase.BeginTransaction(); + SQLTransaction trans = CharacterDatabase.BeginTransaction(); sMapMgr->DoForAllMapsWithMapId(data->spawnPoint.GetMapId(), [spawnId, trans](Map* map) -> void @@ -1128,6 +1128,10 @@ bool GameObject::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap // delete data from memory sObjectMgr->DeleteGameObjectData(spawnId); + CharacterDatabase.CommitTransaction(trans); + + trans = WorldDatabase.BeginTransaction(); + // ... and the database PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT); stmt->setUInt32(0, spawnId); |