From b91c8c76b6d3907a7cef9d538960f2d448a6b3fc Mon Sep 17 00:00:00 2001 From: Rat Date: Thu, 30 Oct 2014 11:28:10 +0100 Subject: [PATCH] Core/Phases: fixed corpse phase deleting --- sql/updates/characters/2014_10_28_00_characters.sql | 1 + src/server/game/Entities/Corpse/Corpse.cpp | 1 + .../shared/Database/Implementation/CharacterDatabase.cpp | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/updates/characters/2014_10_28_00_characters.sql b/sql/updates/characters/2014_10_28_00_characters.sql index 543c70bda0f..24aefd6a7da 100644 --- a/sql/updates/characters/2014_10_28_00_characters.sql +++ b/sql/updates/characters/2014_10_28_00_characters.sql @@ -4,6 +4,7 @@ DROP TABLE IF EXISTS `corpse_phases`; CREATE TABLE `corpse_phases` ( `Guid` int(10) unsigned NOT NULL, `PhaseId` int(10) unsigned NOT NULL, + `OwnerGuid` int(10) unsigned NOT NULL, `Time` int(10) unsigned NOT NULL DEFAULT '0', `CorpseType` tinyint(3) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`Guid`,`PhaseId`) diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 04a74101a31..285da6870ea 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -130,6 +130,7 @@ void Corpse::SaveToDB() stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CORPSE_PHASES); stmt->setUInt32(index++, GetGUIDLow()); // Guid (corpse's) stmt->setUInt32(index++, phaseId); // PhaseId + stmt->setUInt32(index++, GetOwnerGUID().GetCounter()); // OwnerGuid stmt->setUInt32(index++, uint32(m_time)); // Time stmt->setUInt8(index++, GetType()); // CorpseType trans->Append(stmt); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 87808975693..0070ce12850 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -339,9 +339,9 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_OLD_CORPSES, "DELETE FROM corpse WHERE corpseType = 0 OR time < (UNIX_TIMESTAMP(NOW()) - ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CORPSE_PHASES, "SELECT Guid, PhaseId FROM corpse_phases", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_CORPSE_PHASES, "DELETE FROM corpse_phases WHERE Guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_PLAYER_CORPSES_PHASES, "DELETE FROM corpse_phases WHERE Guid = ? AND CorpseType <> 0", CONNECTION_ASYNC); + PrepareStatement(CHAR_DEL_PLAYER_CORPSES_PHASES, "DELETE FROM corpse_phases WHERE OwnerGuid = ? AND CorpseType <> 0", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_OLD_CORPSE_PHASES, "DELETE FROM corpse_phases WHERE CorpseType = 0 OR Time < (UNIX_TIMESTAMP(NOW()) - ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CORPSE_PHASES, "INSERT INTO corpse_phases (Guid, PhaseId, Time, CorpseType) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CORPSE_PHASES, "INSERT INTO corpse_phases (Guid, PhaseId, OwnerGuid, Time, CorpseType) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC); // Creature respawn PrepareStatement(CHAR_SEL_CREATURE_RESPAWNS, "SELECT guid, respawnTime FROM creature_respawn WHERE mapId = ? AND instanceId = ?", CONNECTION_SYNCH);