diff options
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 0203c7e0821..a1ee67fe6e4 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2520,7 +2520,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; @@ -2541,6 +2541,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, player); + 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) |
