diff options
Diffstat (limited to 'src/game/GridNotifiers.h')
| -rw-r--r-- | src/game/GridNotifiers.h | 82 | 
1 files changed, 59 insertions, 23 deletions
diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index b7b0a9d4292..31820d427dc 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -1,7 +1,7 @@  /* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>   * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>   *   * This program is free software; you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -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> &) {}  | 
