diff options
Diffstat (limited to 'src/game/GridNotifiers.h')
-rw-r--r-- | src/game/GridNotifiers.h | 78 |
1 files changed, 57 insertions, 21 deletions
diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index eb15d8ea7b2..ae0c50e46c8 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -96,8 +96,10 @@ namespace Trinity std::set<uint64> plr_list; bool i_toPossessor; bool i_toSelf; + uint32 i_phaseMask; float i_dist; - Deliverer(WorldObject &src, WorldPacket *msg, bool to_possessor, bool to_self, float dist = 0.0f) : i_source(src), i_message(msg), i_toPossessor(to_possessor), i_toSelf(to_self), i_dist(dist) {} + Deliverer(WorldObject &src, WorldPacket *msg, bool to_possessor, bool to_self, float dist = 0.0f) + : i_source(src), i_message(msg), i_toPossessor(to_possessor), i_toSelf(to_self), i_dist(dist), i_phaseMask(src.GetPhaseMask()) {} void Visit(PlayerMapType &m); void Visit(CreatureMapType &m); void Visit(DynamicObjectMapType &m); @@ -215,10 +217,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL WorldObjectSearcher { + uint32 i_phaseMask; WorldObject* &i_object; Check &i_check; - WorldObjectSearcher(WorldObject* & result, Check& check) : i_object(result),i_check(check) {} + WorldObjectSearcher(WorldObject const* searcher, WorldObject* & result, Check& check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(GameObjectMapType &m); void Visit(PlayerMapType &m); @@ -232,10 +236,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL WorldObjectListSearcher { + uint32 i_phaseMask; std::list<WorldObject*> &i_objects; Check& i_check; - WorldObjectListSearcher(std::list<WorldObject*> &objects, Check & check) : i_objects(objects),i_check(check) {} + WorldObjectListSearcher(WorldObject const* searcher, std::list<WorldObject*> &objects, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects),i_check(check) {} void Visit(PlayerMapType &m); void Visit(CreatureMapType &m); @@ -249,37 +255,44 @@ namespace Trinity template<class Do> struct TRINITY_DLL_DECL WorldObjectWorker { + uint32 i_phaseMask; Do const& i_do; - explicit WorldObjectWorker(Do const& _do) : i_do(_do) {} + WorldObjectWorker(WorldObject const* searcher, Do const& _do) + : i_phaseMask(searcher->GetPhaseMask()), i_do(_do) {} void Visit(GameObjectMapType &m) { for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - i_do(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + i_do(itr->getSource()); } void Visit(PlayerMapType &m) { for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - i_do(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + i_do(itr->getSource()); } void Visit(CreatureMapType &m) { for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - i_do(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + i_do(itr->getSource()); } void Visit(CorpseMapType &m) { for(CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - i_do(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + i_do(itr->getSource()); } void Visit(DynamicObjectMapType &m) { for(DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - i_do(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + i_do(itr->getSource()); } template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) {} @@ -290,10 +303,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL GameObjectSearcher { + uint32 i_phaseMask; GameObject* &i_object; Check &i_check; - GameObjectSearcher(GameObject* & result, Check& check) : i_object(result),i_check(check) {} + GameObjectSearcher(WorldObject const* searcher, GameObject* & result, Check& check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(GameObjectMapType &m); @@ -304,10 +319,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL GameObjectLastSearcher { + uint32 i_phaseMask; GameObject* &i_object; Check& i_check; - GameObjectLastSearcher(GameObject* & result, Check& check) : i_object(result),i_check(check) {} + GameObjectLastSearcher(WorldObject const* searcher, GameObject* & result, Check& check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) {} void Visit(GameObjectMapType &m); @@ -317,10 +334,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL GameObjectListSearcher { + uint32 i_phaseMask; std::list<GameObject*> &i_objects; Check& i_check; - GameObjectListSearcher(std::list<GameObject*> &objects, Check & check) : i_objects(objects),i_check(check) {} + GameObjectListSearcher(WorldObject const* searcher, std::list<GameObject*> &objects, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) {} void Visit(GameObjectMapType &m); @@ -333,10 +352,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL UnitSearcher { + uint32 i_phaseMask; Unit* &i_object; Check & i_check; - UnitSearcher(Unit* & result, Check & check) : i_object(result),i_check(check) {} + UnitSearcher(WorldObject const* searcher, Unit* & result, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(CreatureMapType &m); void Visit(PlayerMapType &m); @@ -348,10 +369,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL UnitLastSearcher { + uint32 i_phaseMask; Unit* &i_object; Check & i_check; - UnitLastSearcher(Unit* & result, Check & check) : i_object(result),i_check(check) {} + UnitLastSearcher(WorldObject const* searcher, Unit* & result, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(CreatureMapType &m); void Visit(PlayerMapType &m); @@ -363,10 +386,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL UnitListSearcher { + uint32 i_phaseMask; std::list<Unit*> &i_objects; Check& i_check; - UnitListSearcher(std::list<Unit*> &objects, Check & check) : i_objects(objects),i_check(check) {} + UnitListSearcher(WorldObject const* searcher, std::list<Unit*> &objects, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects),i_check(check) {} void Visit(PlayerMapType &m); void Visit(CreatureMapType &m); @@ -379,10 +404,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL CreatureSearcher { + uint32 i_phaseMask; Creature* &i_object; Check & i_check; - CreatureSearcher(Creature* & result, Check & check) : i_object(result),i_check(check) {} + CreatureSearcher(WorldObject const* searcher, Creature* & result, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(CreatureMapType &m); @@ -393,10 +420,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL CreatureLastSearcher { + uint32 i_phaseMask; Creature* &i_object; Check & i_check; - CreatureLastSearcher(Creature* & result, Check & check) : i_object(result),i_check(check) {} + CreatureLastSearcher(WorldObject const* searcher, Creature* & result, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(CreatureMapType &m); @@ -406,10 +435,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL CreatureListSearcher { + uint32 i_phaseMask; std::list<Creature*> &i_objects; Check& i_check; - CreatureListSearcher(std::list<Creature*> &objects, Check & check) : i_objects(objects),i_check(check) {} + CreatureListSearcher(WorldObject const* searcher, std::list<Creature*> &objects, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects),i_check(check) {} void Visit(CreatureMapType &m); @@ -421,10 +452,12 @@ namespace Trinity template<class Check> struct TRINITY_DLL_DECL PlayerSearcher { + uint32 i_phaseMask; Player* &i_object; Check & i_check; - PlayerSearcher(Player* & result, Check & check) : i_object(result),i_check(check) {} + PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check) + : i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {} void Visit(PlayerMapType &m); @@ -434,14 +467,17 @@ namespace Trinity template<class Do> struct TRINITY_DLL_DECL PlayerWorker { + uint32 i_phaseMask; Do& i_do; - explicit PlayerWorker(Do& _do) : i_do(_do) {} + PlayerWorker(WorldObject const* searcher, Do& _do) + : i_phaseMask(searcher->GetPhaseMask()), i_do(_do) {} void Visit(PlayerMapType &m) { for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - i_do(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + i_do(itr->getSource()); } template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) {} |