void VisibleChangesNotifier::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { if (iter->GetSource() == &i_object) continue; iter->GetSource()->UpdateVisibilityOf(&i_object); if (iter->GetSource()->HasSharedVision()) for (SharedVisionList::const_iterator i = iter->GetSource()->GetSharedVisionList().begin(); i != iter->GetSource()->GetSharedVisionList().end(); ++i) if ((*i)->m_seer == iter->GetSource()) (*i)->UpdateVisibilityOf(&i_object); } }
void DelayedUnitRelocation::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* player = iter->GetSource(); WorldObject const* viewPoint = player->m_seer; if (!viewPoint->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) continue; if (player != viewPoint && !viewPoint->IsPositionValid()) continue; CellCoord pair2(Trinity::ComputeCellCoord(viewPoint->GetPositionX(), viewPoint->GetPositionY())); Cell cell2(pair2); //cell.SetNoCreate(); need load cells around viewPoint or player, that's why its commented PlayerRelocationNotifier relocate(*player); TypeContainerVisitor<PlayerRelocationNotifier, WorldTypeMapContainer > c2world_relocation(relocate); TypeContainerVisitor<PlayerRelocationNotifier, GridTypeMapContainer > c2grid_relocation(relocate); cell2.Visit(pair2, c2world_relocation, i_map, *viewPoint, i_radius); cell2.Visit(pair2, c2grid_relocation, i_map, *viewPoint, i_radius); relocate.SendToSelf(); } }
void PlayerRelocationNotifier::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* player = iter->GetSource(); vis_guids.erase(player->GetGUID()); i_player.UpdateVisibilityOf(player, i_data, i_visibleNow); player->UpdateVisibilityOf(&i_player); // this notifier with different Visit(PlayerMapType&) than VisibleNotifier is needed to update visibility of self for other players when we move (eg. stealth detection changes) } }
void CreatureRelocationNotifier::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* player = iter->GetSource(); if (!player->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) player->UpdateVisibilityOf(&i_creature); CreatureUnitRelocationWorker(&i_creature, player); } }
void CreatureRelocationNotifier::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* player = iter->GetSource(); // NOTIFY_VISIBILITY_CHANGED does not guarantee that player will do it himself (because distance is also checked), but screw it, it's not that important if (!player->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) player->UpdateVisibilityOf(&i_creature); // NOTIFY_AI_RELOCATION does not guarantee that player will do it himself (because distance is also checked), but screw it, it's not that important if (!player->m_seer->isNeedNotify(NOTIFY_AI_RELOCATION) && !i_creature.IsMoveInLineOfSightStrictlyDisabled()) CreatureUnitRelocationWorker(&i_creature, player); } }
void PlayerRelocationNotifier::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* player = iter->GetSource(); vis_guids.erase(player->GetGUID()); i_player.UpdateVisibilityOf(player, i_data, i_visibleNow); if (player->m_seer->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) continue; player->UpdateVisibilityOf(&i_player); } }
void DelayedUnitRelocation::Visit(PlayerMapType &m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* player = iter->GetSource(); WorldObject const* viewPoint = player->m_seer; if (!viewPoint->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) continue; if (player != viewPoint && !viewPoint->IsPositionValid()) continue; PlayerRelocationNotifier relocate(*player); Cell::VisitAllObjects(viewPoint, relocate, i_radius, false); relocate.SendToSelf(); } }
void MessageDistDeliverer::Visit(PlayerMapType& m) { for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Player* target = iter->GetSource(); if (target->GetExactDist2dSq(i_source) > i_distSq) continue; // Send packet to all who are sharing the player's vision if (!target->GetSharedVisionList().empty()) { SharedVisionList::const_iterator i = target->GetSharedVisionList().begin(); for (; i != target->GetSharedVisionList().end(); ++i) if ((*i)->m_seer == target) SendPacket(*i); } if (target->m_seer == target) SendPacket(target); } }
void DynamicObjectUpdater::Visit(PlayerMapType& m) { for (PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr) VisitHelper(itr->GetSource()); }