diff options
Diffstat (limited to 'src/game/GridNotifiers.cpp')
-rw-r--r-- | src/game/GridNotifiers.cpp | 68 |
1 files changed, 41 insertions, 27 deletions
diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 45487cdf395..3c422542484 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -40,6 +40,8 @@ Trinity::PlayerNotifier::Visit(PlayerMapType &m) iter->getSource()->UpdateVisibilityOf(&i_player); i_player.UpdateVisibilityOf(iter->getSource()); + if (i_player.isPossessedByPlayer()) + ((Player*)i_player.GetCharmer())->UpdateVisibilityOf(iter->getSource()); } } @@ -139,54 +141,66 @@ VisibleNotifier::Notify() i_player.SendAuraDurationsForTarget((Unit*)(*vItr)); } -void -MessageDeliverer::Visit(PlayerMapType &m) +void +Deliverer::Visit(PlayerMapType &m) { - for(PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter) + for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - if( i_toSelf || iter->getSource() != &i_player) + if (!i_dist || iter->getSource()->GetDistance(&i_source) <= i_dist) { - if(WorldSession* session = iter->getSource()->GetSession()) - session->SendPacket(i_message); + // Send packet to possessor + if (iter->getSource()->isPossessedByPlayer()) + SendPacket((Player*)iter->getSource()->GetCharmer()); + VisitObject(iter->getSource()); } } } -void -ObjectMessageDeliverer::Visit(PlayerMapType &m) +void +Deliverer::Visit(CreatureMapType &m) { - for(PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter) + for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { - if(WorldSession* session = iter->getSource()->GetSession()) - session->SendPacket(i_message); + if (!i_dist || iter->getSource()->GetDistance(&i_source) <= i_dist) + { + // Send packet to possessor + if (iter->getSource()->isPossessedByPlayer()) + SendPacket((Player*)iter->getSource()->GetCharmer()); + } } } void -MessageDistDeliverer::Visit(PlayerMapType &m) +Deliverer::SendPacket(Player* plr) { - for(PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter) + if (!plr) + return; + // Don't send the packet to possesor if not supposed to + if (!i_toPossessor && plr->isPossessing() && plr->GetCharmGUID() == i_source.GetGUID()) + return; + + if (plr_list.find(plr->GetGUID()) == plr_list.end()) { - if( (i_toSelf || iter->getSource() != &i_player ) && - (!i_ownTeamOnly || iter->getSource()->GetTeam() == i_player.GetTeam() ) && - (!i_dist || iter->getSource()->GetDistance(&i_player) <= i_dist) ) - { - if(WorldSession* session = iter->getSource()->GetSession()) - session->SendPacket(i_message); - } + if (WorldSession* session = plr->GetSession()) + session->SendPacket(i_message); + plr_list.insert(plr->GetGUID()); } } void -ObjectMessageDistDeliverer::Visit(PlayerMapType &m) +MessageDeliverer::VisitObject(Player* plr) { - for(PlayerMapType::iterator iter=m.begin(); iter != m.end(); ++iter) + if (i_toSelf || plr != &i_source) + SendPacket(plr); +} + +void +MessageDistDeliverer::VisitObject(Player* plr) +{ + if( (i_toSelf || plr != &i_source ) && + (!i_ownTeamOnly || (i_source.GetTypeId() == TYPEID_PLAYER && plr->GetTeam() == ((Player&)i_source).GetTeam())) ) { - if( !i_dist || iter->getSource()->GetDistance(&i_object) <= i_dist ) - { - if(WorldSession* session = iter->getSource()->GetSession()) - session->SendPacket(i_message); - } + SendPacket(plr); } } |