diff options
author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-06-29 16:05:33 +0200 |
---|---|---|
committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-06-29 16:08:23 +0200 |
commit | 609efde5987e52d8fb9fa69a2eaa8d7fa6dd9bd8 (patch) | |
tree | 0d00b92756b9323051141516e9ae2a595ff50e69 /src | |
parent | 1bc9bb64996e4aa56f6b0638046d79c3821cfa3b (diff) |
Core/Corpses: Fix a crash in ConvertCorpseForPlayer
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Globals/ObjectAccessor.cpp | 9 |
2 files changed, 4 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 56dd4d01b03..24e33da9e68 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -8612,10 +8612,6 @@ void Player::RemovedInsignia(Player* looterPlr) RepopAtGraveyard(); } - Corpse *corpse = GetCorpse(); - if (!corpse) - return; - // We have to convert player corpse to bones, not to be able to resurrect there // SpawnCorpseBones isn't handy, 'cos it saves player while he in BG Corpse *bones = sObjectAccessor->ConvertCorpseForPlayer(GetGUID(), true); diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index c9a8e2c353d..8bbf5d8e0c1 100755 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -261,21 +261,20 @@ void ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair, GridType& grid, } } -Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia) +Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia /*=false*/) { Corpse* corpse = GetCorpseForPlayerGUID(player_guid); if (!corpse) { //in fact this function is called from several places //even when player doesn't have a corpse, not an error - // TODO: really, now... - //sLog->outError("Try remove corpse that not in map for GUID %ul", player_guid); return NULL; } sLog->outStaticDebug("Deleting Corpse and spawned bones."); - Map* map = corpse->GetMap(); + // Map can be NULL + Map* map = corpse->FindMap(); // remove corpse from player_guid -> corpse map and from current map RemoveCorpse(corpse); @@ -296,7 +295,7 @@ Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia bones = new Corpse; bones->Create(corpse->GetGUIDLow(), map); - for (uint8 i = 3; i < CORPSE_END; ++i) // don't overwrite guid and object type + for (uint8 i = OBJECT_FIELD_TYPE + 1; i < CORPSE_END; ++i) // don't overwrite guid and object type bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); bones->SetGrid(corpse->GetGrid()); |