Core/Phases: Update transport visibility when changing phases

This commit is contained in:
Subv
2014-06-03 13:08:54 -05:00
parent 558642b26e
commit 74be070d1c
10 changed files with 56 additions and 9 deletions

View File

@@ -2526,7 +2526,7 @@ void Map::SendInitTransports(Player* player)
// Hack to send out transports
UpdateData transData(player->GetMapId());
for (TransportsContainer::const_iterator i = _transports.begin(); i != _transports.end(); ++i)
if (*i != player->GetTransport())
if (*i != player->GetTransport() && player->IsInPhase(*i))
(*i)->BuildCreateUpdateBlockForPlayer(&transData, player);
WorldPacket packet;
@@ -2547,6 +2547,26 @@ void Map::SendRemoveTransports(Player* player)
player->GetSession()->SendPacket(&packet);
}
void Map::SendUpdateTransportVisibility(Player* player, std::set<uint32> const& previousPhases)
{
// Hack to send out transports
UpdateData transData(player->GetMapId());
for (TransportsContainer::const_iterator i = _transports.begin(); i != _transports.end(); ++i)
{
if (*i == player->GetTransport())
continue;
if (player->IsInPhase(*i) && !Trinity::Containers::Intersects(previousPhases.begin(), previousPhases.end(), (*i)->GetPhases().begin(), (*i)->GetPhases().end()))
(*i)->BuildCreateUpdateBlockForPlayer(&transData);
else if (!player->IsInPhase(*i))
(*i)->BuildOutOfRangeUpdateBlock(&transData);
}
WorldPacket packet;
transData.BuildPacket(&packet);
player->GetSession()->SendPacket(&packet);
}
inline void Map::setNGrid(NGridType *grid, uint32 x, uint32 y)
{
if (x >= MAX_NUMBER_OF_GRIDS || y >= MAX_NUMBER_OF_GRIDS)