*Fix a crash in CORPSE_MAP_POSITION_RESPONSE handler.
--HG-- branch : trunk
This commit is contained in:
@@ -1152,6 +1152,16 @@ struct MapEntry
|
|||||||
MapID==616 || MapID==595; // Eye Of Eternity, The Culling of Stratholme
|
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
|
bool IsContinent() const
|
||||||
{
|
{
|
||||||
return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571;
|
return MapID == 0 || MapID == 1 || MapID == 530 || MapID == 571;
|
||||||
|
|||||||
+1
-6
@@ -369,12 +369,7 @@ class TRINITY_DLL_SPEC Map : public GridRefManager<NGridType>, public Trinity::O
|
|||||||
{
|
{
|
||||||
if(!i_mapEntry)
|
if(!i_mapEntry)
|
||||||
return false;
|
return false;
|
||||||
if(i_mapEntry->entrance_map < 0)
|
return i_mapEntry->GetEntrancePos(mapid, x, y);
|
||||||
return false;
|
|
||||||
mapid = i_mapEntry->entrance_map;
|
|
||||||
x = i_mapEntry->entrance_x;
|
|
||||||
y = i_mapEntry->entrance_y;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddObjectToRemoveList(WorldObject *obj);
|
void AddObjectToRemoveList(WorldObject *obj);
|
||||||
|
|||||||
@@ -471,17 +471,17 @@ void WorldSession::HandleCorpseMapPositionQuery( WorldPacket & recv_data )
|
|||||||
|
|
||||||
WorldPacket data(CMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE, 4+4+4+4);
|
WorldPacket data(CMSG_CORPSE_MAP_POSITION_QUERY_RESPONSE, 4+4+4+4);
|
||||||
|
|
||||||
Map* map = corpse->GetMap();
|
|
||||||
|
|
||||||
float cx, cy, cz;
|
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;
|
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);
|
uint32 zoneId = newMap->GetZoneId(mx, my, 0);
|
||||||
|
|
||||||
float _mx = mx;
|
float _mx = mx;
|
||||||
@@ -494,7 +494,7 @@ void WorldSession::HandleCorpseMapPositionQuery( WorldPacket & recv_data )
|
|||||||
|
|
||||||
cx = x - mx;
|
cx = x - mx;
|
||||||
cy = y - my;
|
cy = y - my;
|
||||||
cz = corpse->GetPositionZ() - map->GetHeight(_mx, _my, MAX_HEIGHT);
|
cz = corpse->GetPositionZ() - newMap->GetHeight(_mx, _my, MAX_HEIGHT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user