*Fix a crash in CORPSE_MAP_POSITION_RESPONSE handler.

--HG--
branch : trunk
This commit is contained in:
QAston
2010-01-30 11:37:39 +01:00
parent 7209312044
commit 23f589efa3
3 changed files with 18 additions and 13 deletions

View File

@@ -1152,6 +1152,16 @@ struct MapEntry
MapID==616 || MapID==595; // Eye Of Eternity, The Culling of Stratholme
}
bool GetEntrancePos(int32 &mapid, float &x, float &y) const
{
if(entrance_map < 0)
return false;
mapid = entrance_map;
x = entrance_x;
y = entrance_y;
return true;
}
bool IsContinent() const
{
return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571;

View File

@@ -369,12 +369,7 @@ class TRINITY_DLL_SPEC Map : public GridRefManager<NGridType>, public Trinity::O
{
if(!i_mapEntry)
return false;
if(i_mapEntry->entrance_map < 0)
return false;
mapid = i_mapEntry->entrance_map;
x = i_mapEntry->entrance_x;
y = i_mapEntry->entrance_y;
return true;
return i_mapEntry->GetEntrancePos(mapid, x, y);
}
void AddObjectToRemoveList(WorldObject *obj);

View File

@@ -471,17 +471,17 @@ void WorldSession::HandleCorpseMapPositionQuery( WorldPacket & recv_data )
WorldPacket data(CMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE, 4+4+4+4);
Map* map = corpse->GetMap();
float cx, cy, cz;
if (map->IsDungeon())
int32 mapId = corpse->GetMapId();
MapEntry const * corpseMapEntry = sMapStore.LookupEntry(mapId);
if (corpseMapEntry->IsDungeon())
{
int32 mapId;
float mx, my;
map->GetEntrancePos(mapId, mx, my);
bool entranceFound = corpseMapEntry->GetEntrancePos(mapId, mx, my);
assert(entranceFound);
const Map* newMap = MapManager::Instance().CreateBaseMap(mapId);
Map const * newMap = MapManager::Instance().CreateBaseMap(mapId);
uint32 zoneId = newMap->GetZoneId(mx, my, 0);
float _mx = mx;
@@ -494,7 +494,7 @@ void WorldSession::HandleCorpseMapPositionQuery( WorldPacket & recv_data )
cx = x - mx;
cy = y - my;
cz = corpse->GetPositionZ() - map->GetHeight(_mx, _my, MAX_HEIGHT);
cz = corpse->GetPositionZ() - newMap->GetHeight(_mx, _my, MAX_HEIGHT);
}
else
{