aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.cpp
diff options
context:
space:
mode:
authorpete318 <pete318@hotmail.com>2015-08-27 01:07:14 +0100
committerpete318 <pete318@hotmail.com>2015-08-27 01:07:14 +0100
commitb099e4e43a84b661543d62cb507c599263c40fbb (patch)
tree5765108b9c9fc7ed0629b995bc75930f250532bd /src/server/game/Maps/Map.cpp
parent7c75160f590812f0c5d70fd9c68441068e2ded48 (diff)
Only read and delete from corpse table for current map instance. Not for
all. Prevents assert stop upon entering an instance on second character after first one is a corpse in the same dungeon on different instance ID.
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r--src/server/game/Maps/Map.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 1fdd92de91c..b10d6aa6896 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -3564,9 +3564,10 @@ void Map::LoadCorpseData()
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSE_PHASES);
stmt->setUInt32(0, GetId());
+ stmt->setUInt32(1, GetInstanceId());
// 0 1
- // SELECT OwnerGuid, PhaseId FROM corpse_phases cp LEFT JOIN corpse c ON cp.OwnerGuid = c.guid WHERE c.mapId = ?
+ // SELECT OwnerGuid, PhaseId FROM corpse_phases cp LEFT JOIN corpse c ON cp.OwnerGuid = c.guid WHERE c.mapId = ? AND c.instanceId = ?
PreparedQueryResult phaseResult = CharacterDatabase.Query(stmt);
if (phaseResult)
{
@@ -3583,9 +3584,10 @@ void Map::LoadCorpseData()
stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CORPSES);
stmt->setUInt32(0, GetId());
+ stmt->setUInt32(1, GetInstanceId());
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
- // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ?
+ // SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, bytes1, bytes2, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (!result)
return;
@@ -3619,8 +3621,10 @@ void Map::LoadCorpseData()
void Map::DeleteCorpseData()
{
+ // DELETE cp, c FROM corpse_phases cp INNER JOIN corpse c ON cp.OwnerGuid = c.guid WHERE c.mapId = ? AND c.instanceId = ?
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSES_FROM_MAP);
stmt->setUInt32(0, GetId());
+ stmt->setUInt32(1, GetInstanceId());
CharacterDatabase.Execute(stmt);
}