void CreatureRelocationNotifier::Visit(CreatureMapType &m) { if (!i_creature.isAlive()) return; for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Creature* c = iter->getSource(); CreatureUnitRelocationWorker(&i_creature, c); if (!c->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) CreatureUnitRelocationWorker(c, &i_creature); } }
void ObjectGridEvacuator::Visit(CreatureMapType &m) { // creature in unloading grid can have respawn point in another grid // if it will be unloaded then it will not respawn in original grid until unload/load original grid // move to respawn point to prevent this case. For player view in respawn grid this will be normal respawn. for (CreatureMapType::iterator iter = m.begin(); iter != m.end();) { Creature* c = iter->getSource(); ++iter; ASSERT(!c->isPet() && "ObjectGridRespawnMover must not be called for pets"); c->GetMap()->CreatureRespawnRelocation(c, true); } }
void PlayerRelocationNotifier::Visit(CreatureMapType &m) { bool relocated_for_ai = (&i_player == i_player.m_seer); for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Creature * c = iter->getSource(); vis_guids.erase(c->GetGUID()); i_player.UpdateVisibilityOf(c, i_data, i_visibleNow); if (relocated_for_ai && !c->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) CreatureUnitRelocationWorker(c, &i_player); } }
void DelayedUnitRelocation::Visit(CreatureMapType& m) { for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Creature* unit = iter->getSource(); CreatureRelocationNotifier relocate(*unit, i_radius); TypeContainerVisitor<CreatureRelocationNotifier, WorldTypeMapContainer > c2world_relocation(relocate); TypeContainerVisitor<CreatureRelocationNotifier, GridTypeMapContainer > c2grid_relocation(relocate); cell.Visit(p, c2world_relocation, i_map, *unit, i_radius); cell.Visit(p, c2grid_relocation, i_map, *unit, i_radius); } }
void DelayedUnitRelocation::Visit(CreatureMapType &m) { for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Creature * unit = iter->getSource(); if (!unit->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) continue; CreatureRelocationNotifier relocate(*unit); TypeContainerVisitor<CreatureRelocationNotifier, WorldTypeMapContainer > c2world_relocation(relocate); TypeContainerVisitor<CreatureRelocationNotifier, GridTypeMapContainer > c2grid_relocation(relocate); cell.Visit(p, c2world_relocation, i_map, *unit, i_radius); cell.Visit(p, c2grid_relocation, i_map, *unit, i_radius); } }
void CreatureRelocationNotifier::Visit(CreatureMapType& m) { if (!i_creature.IsAlive()) return; for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Creature* c = iter->getSource(); //check distance to improve performance if (!i_creature._IsWithinDist(c, i_radius, true)) continue; CreatureUnitRelocationWorker(&i_creature, c); if (!c->isNeedNotify(NOTIFY_VISIBILITY_CHANGED)) CreatureUnitRelocationWorker(c, &i_creature); } }
void ObjectGridStoper::Visit(CreatureMapType &m) { // stop any fights at grid de-activation and remove dynobjects created at cast by creatures for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { iter->getSource()->RemoveAllDynObjects(); if (iter->getSource()->isInCombat()) { iter->getSource()->CombatStop(); iter->getSource()->DeleteThreatList(); if (iter->getSource()->IsAIEnabled) iter->getSource()->AI()->EnterEvadeMode(); } } }
void MessageDistDeliverer::Visit(CreatureMapType &m) { for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { Creature* target = iter->getSource(); if (!target->InSamePhase(i_phaseMask)) continue; if (target->GetExactDist2dSq(i_source) > i_distSq) continue; // Send packet to all who are sharing the creature'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); } } }
void ObjectGridRespawnMover::Visit(CreatureMapType &m) { // creature in unloading grid can have respawn point in another grid // if it will be unloaded then it will not respawn in original grid until unload/load original grid // move to respawn point to prevent this case. For player view in respawn grid this will be normal respawn. for (CreatureMapType::iterator iter = m.begin(); iter != m.end();) { Creature * c = iter->getSource(); ++iter; ASSERT(!c->isPet() && "ObjectGridRespawnMover don't must be called for pets"); Cell const& cur_cell = c->GetCurrentCell(); float resp_x, resp_y, resp_z; c->GetRespawnCoord(resp_x, resp_y, resp_z); CellPair resp_val = Trinity::ComputeCellPair(resp_x, resp_y); Cell resp_cell(resp_val); if (cur_cell.DiffGrid(resp_cell)) { c->GetMap()->CreatureRespawnRelocation(c); // false result ignored: will be unload with other creatures at grid } } }
void DynamicObjectUpdater::Visit(CreatureMapType& m) { for (CreatureMapType::iterator itr = m.begin(); itr != m.end(); ++itr) VisitHelper(itr->getSource()); }
void ObjectGridCleaner::Visit (CreatureMapType &m) { for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) iter->getSource()->CleanupsBeforeDelete(); }