aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-07-26 19:55:02 +0200
committerShauren <shauren.trinity@gmail.com>2019-07-26 19:55:02 +0200
commit73c1d666fa694ab96455534cfdb40be1bd4aff8c (patch)
treea727f8992b8e70acc3bc4e3e4ff9e90cbd562d47
parentf5978d6d2bce730c31546d180c4c507c24394f41 (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.cpp8
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp6
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);