diff options
Diffstat (limited to 'src/game/GridNotifiersImpl.h')
-rw-r--r-- | src/game/GridNotifiersImpl.h | 122 |
1 files changed, 99 insertions, 23 deletions
diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 7131b6281f4..6ec8c59082e 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 @@ -175,7 +175,7 @@ inline void Trinity::DynamicObjectUpdater::VisitHelper(Unit* target) if( target->GetTypeId()==TYPEID_PLAYER && target != i_check && (((Player*)target)->isGameMaster() || ((Player*)target)->GetVisibility()==VISIBILITY_OFF) ) return; - if( i_check->GetTypeId()==TYPEID_PLAYER ) + if (i_check->GetTypeId()==TYPEID_PLAYER ) { if (i_check->IsFriendlyTo( target )) return; @@ -192,7 +192,7 @@ inline void Trinity::DynamicObjectUpdater::VisitHelper(Unit* target) SpellEntry const *spellInfo = sSpellStore.LookupEntry(i_dynobject.GetSpellId()); uint32 eff_index = i_dynobject.GetEffIndex(); // 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()); @@ -229,7 +229,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; @@ -246,6 +249,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(); @@ -263,6 +269,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(); @@ -280,6 +289,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(); @@ -297,6 +309,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(); @@ -309,40 +324,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 @@ -356,6 +376,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(); @@ -369,6 +392,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(); } @@ -378,8 +404,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 @@ -393,6 +420,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(); @@ -410,6 +440,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(); @@ -423,6 +456,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(); } @@ -433,6 +469,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(); } @@ -442,16 +481,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 @@ -465,6 +506,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(); @@ -478,6 +522,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(); } @@ -487,8 +534,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> @@ -500,6 +548,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(); @@ -508,5 +559,30 @@ void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m) } } +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); +} + #endif // TRINITY_GRIDNOTIFIERSIMPL_H |