diff options
Diffstat (limited to 'src/game/GridNotifiersImpl.h')
-rw-r--r-- | src/game/GridNotifiersImpl.h | 145 |
1 files changed, 122 insertions, 23 deletions
diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index b7660d90c3b..33e3563ae7e 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.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 @@ -198,7 +198,7 @@ inline void Trinity::DynamicObjectUpdater::VisitHelper(Unit* target) } // Check target immune to spell or aura - if (target->IsImmunedToSpell(spellInfo) || target->IsImmunedToSpellEffect(spellInfo->Effect[eff_index], spellInfo->EffectMechanic[eff_index])) + if (target->IsImmunedToSpell(spellInfo) || target->IsImmunedToSpellEffect(spellInfo, eff_index)) return; // Apply PersistentAreaAura on target PersistentAreaAura* Aur = new PersistentAreaAura(spellInfo, eff_index, NULL, target, i_dynobject.GetCaster()); @@ -235,7 +235,10 @@ void Trinity::WorldObjectSearcher<Check>::Visit(GameObjectMapType &m) for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { - if(i_check(itr->getSource())) + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + + if (i_check(itr->getSource())) { i_object = itr->getSource(); return; @@ -252,6 +255,9 @@ void Trinity::WorldObjectSearcher<Check>::Visit(PlayerMapType &m) for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -269,6 +275,9 @@ void Trinity::WorldObjectSearcher<Check>::Visit(CreatureMapType &m) for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -286,6 +295,9 @@ void Trinity::WorldObjectSearcher<Check>::Visit(CorpseMapType &m) for(CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -303,6 +315,9 @@ void Trinity::WorldObjectSearcher<Check>::Visit(DynamicObjectMapType &m) for(DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -315,40 +330,45 @@ template<class Check> void Trinity::WorldObjectListSearcher<Check>::Visit(PlayerMapType &m) { for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } template<class Check> void Trinity::WorldObjectListSearcher<Check>::Visit(CreatureMapType &m) { for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } template<class Check> void Trinity::WorldObjectListSearcher<Check>::Visit(CorpseMapType &m) { for(CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } template<class Check> void Trinity::WorldObjectListSearcher<Check>::Visit(GameObjectMapType &m) { for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } template<class Check> void Trinity::WorldObjectListSearcher<Check>::Visit(DynamicObjectMapType &m) { for(DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } // Gameobject searchers @@ -362,6 +382,9 @@ void Trinity::GameObjectSearcher<Check>::Visit(GameObjectMapType &m) for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -375,6 +398,9 @@ void Trinity::GameObjectLastSearcher<Check>::Visit(GameObjectMapType &m) { for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) i_object = itr->getSource(); } @@ -384,8 +410,9 @@ template<class Check> void Trinity::GameObjectListSearcher<Check>::Visit(GameObjectMapType &m) { for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } // Unit searchers @@ -399,6 +426,9 @@ void Trinity::UnitSearcher<Check>::Visit(CreatureMapType &m) for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -416,6 +446,9 @@ void Trinity::UnitSearcher<Check>::Visit(PlayerMapType &m) for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -429,6 +462,9 @@ void Trinity::UnitLastSearcher<Check>::Visit(CreatureMapType &m) { for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) i_object = itr->getSource(); } @@ -439,6 +475,9 @@ void Trinity::UnitLastSearcher<Check>::Visit(PlayerMapType &m) { for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) i_object = itr->getSource(); } @@ -448,16 +487,18 @@ template<class Check> void Trinity::UnitListSearcher<Check>::Visit(PlayerMapType &m) { for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } template<class Check> void Trinity::UnitListSearcher<Check>::Visit(CreatureMapType &m) { for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if(i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } // Creature searchers @@ -471,6 +512,9 @@ void Trinity::CreatureSearcher<Check>::Visit(CreatureMapType &m) for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -484,6 +528,9 @@ void Trinity::CreatureLastSearcher<Check>::Visit(CreatureMapType &m) { for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) i_object = itr->getSource(); } @@ -493,8 +540,9 @@ template<class Check> void Trinity::CreatureListSearcher<Check>::Visit(CreatureMapType &m) { for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) - if(i_check(itr->getSource())) - i_objects.push_back(itr->getSource()); + if(itr->getSource()->InSamePhase(i_phaseMask)) + if( i_check(itr->getSource())) + i_objects.push_back(itr->getSource()); } template<class Check> @@ -506,6 +554,9 @@ void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m) for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) { + if(!itr->getSource()->InSamePhase(i_phaseMask)) + continue; + if(i_check(itr->getSource())) { i_object = itr->getSource(); @@ -514,5 +565,53 @@ void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m) } } -#endif // TRINITY_GRIDNOTIFIERSIMPL_H +template<class Builder> +void MaNGOS::LocalizedPacketDo<Builder>::operator()( Player* p ) +{ + uint32 loc_idx = p->GetSession()->GetSessionDbLocaleIndex(); + uint32 cache_idx = loc_idx+1; + WorldPacket* data; + + // create if not cached yet + if(i_data_cache.size() < cache_idx+1 || !i_data_cache[cache_idx]) + { + if(i_data_cache.size() < cache_idx+1) + i_data_cache.resize(cache_idx+1); + + data = new WorldPacket(SMSG_MESSAGECHAT, 200); + + i_builder(*data,loc_idx); + + i_data_cache[cache_idx] = data; + } + else + data = i_data_cache[cache_idx]; + + p->SendDirectMessage(data); +} + +template<class Builder> +void MaNGOS::LocalizedPacketListDo<Builder>::operator()( Player* p ) +{ + uint32 loc_idx = p->GetSession()->GetSessionDbLocaleIndex(); + uint32 cache_idx = loc_idx+1; + WorldPacketList* data_list; + + // create if not cached yet + if(i_data_cache.size() < cache_idx+1 || i_data_cache[cache_idx].empty()) + { + if(i_data_cache.size() < cache_idx+1) + i_data_cache.resize(cache_idx+1); + + data_list = &i_data_cache[cache_idx]; + + i_builder(*data_list,loc_idx); + } + else + data_list = &i_data_cache[cache_idx]; + + for(size_t i = 0; i < data_list->size(); ++i) + p->SendDirectMessage((*data_list)[i]); +} +#endif // MANGOS_GRIDNOTIFIERSIMPL_H |