aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2011-06-29 16:05:33 +0200
committerMachiavelli <machiavelli.trinity@gmail.com>2011-06-29 16:08:23 +0200
commit609efde5987e52d8fb9fa69a2eaa8d7fa6dd9bd8 (patch)
tree0d00b92756b9323051141516e9ae2a595ff50e69
parent1bc9bb64996e4aa56f6b0638046d79c3821cfa3b (diff)
Core/Corpses: Fix a crash in ConvertCorpseForPlayer
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp4
-rwxr-xr-xsrc/server/game/Globals/ObjectAccessor.cpp9
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());