AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Acore::MessageDistDeliverer Struct Reference

#include "GridNotifiers.h"

Public Member Functions

 MessageDistDeliverer (WorldObject const *src, WorldPacket const *msg, float dist, TeamFilter teamFilter=TeamFilter::All, Player const *skipped=nullptr, bool req3dDist=false)
 
void Visit (VisiblePlayersMap const &m)
 
void Visit (PlayerMapType &m)
 
void Visit (CreatureMapType &m)
 
void Visit (DynamicObjectMapType &m)
 
template<class SKIP >
void Visit (GridRefMgr< SKIP > &)
 
void SendPacket (Player *player) const
 

Public Attributes

WorldObject const * i_source
 
WorldPacket const * i_message
 
uint32 i_phaseMask
 
float i_distSq
 
TeamFilter teamFilter
 
TeamId teamId
 
Player const * skipped_receiver
 
bool required3dDist
 

Detailed Description

Constructor & Destructor Documentation

◆ MessageDistDeliverer()

Acore::MessageDistDeliverer::MessageDistDeliverer ( WorldObject const *  src,
WorldPacket const *  msg,
float  dist,
TeamFilter  teamFilter = TeamFilter::All,
Player const *  skipped = nullptr,
bool  req3dDist = false 
)
inline
119 :
120 i_source(src),
121 i_message(msg),
122 i_phaseMask(src->GetPhaseMask()),
123 i_distSq(dist * dist),
124 teamFilter(src->IsPlayer() ? teamFilter : TeamFilter::All),
125 teamId(src->IsPlayer() ? src->ToPlayer()->GetTeamId() : TEAM_NEUTRAL),
126 skipped_receiver(skipped),
127 required3dDist(req3dDist)
128 { }
TeamId GetTeamId(PvPTeamId teamId)
Definition SharedDefines.h:3718
@ TEAM_NEUTRAL
Definition SharedDefines.h:750
TeamFilter
Definition GridNotifiers.h:102
Player const * skipped_receiver
Definition GridNotifiers.h:116
float i_distSq
Definition GridNotifiers.h:113
TeamFilter teamFilter
Definition GridNotifiers.h:114
WorldObject const * i_source
Definition GridNotifiers.h:110
uint32 i_phaseMask
Definition GridNotifiers.h:112
bool required3dDist
Definition GridNotifiers.h:117
WorldPacket const * i_message
Definition GridNotifiers.h:111
TeamId teamId
Definition GridNotifiers.h:115

Member Function Documentation

◆ SendPacket()

void Acore::MessageDistDeliverer::SendPacket ( Player player) const
inline
138 {
139 // never send packet to self
140 if (player == i_source || skipped_receiver == player)
141 return;
142
143 switch (teamFilter)
144 {
145 default:
146 case TeamFilter::All:
147 break;
149 if (player->GetTeamId() != teamId)
150 return;
151 break;
153 if (player->GetTeamId() == teamId)
154 return;
155 break;
156 }
157
158 if (!player->HaveAtClient(i_source))
159 return;
160
162 }
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5852
bool HaveAtClient(WorldObject const *u) const
Definition Player.cpp:11586
TeamId GetTeamId(bool original=false) const
Definition Player.h:2138

References Acore::All, Player::GetTeamId(), Player::HaveAtClient(), i_message, i_source, Acore::OtherTeam, Acore::OwnTeam, Player::SendDirectMessage(), skipped_receiver, teamFilter, and teamId.

Referenced by Visit(), Visit(), and Visit().

◆ Visit() [1/5]

void MessageDistDeliverer::Visit ( CreatureMapType m)
251{
252 for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
253 {
254 Creature* target = iter->GetSource();
255 if (!target->HasSharedVision() || !target->InSamePhase(i_phaseMask))
256 continue;
257
258 if (required3dDist)
259 {
260 if (target->GetExactDistSq(i_source) > i_distSq)
261 continue;
262 }
263 else
264 if (target->GetExactDist2dSq(i_source) > i_distSq)
265 continue;
266
267 // Send packet to all who are sharing the creature's vision
268 SharedVisionList::const_iterator i = target->GetSharedVisionList().begin();
269 for (; i != target->GetSharedVisionList().end(); ++i)
270 if ((*i)->m_seer == target)
271 SendPacket(*i);
272 }
273}
Definition Creature.h:47
iterator begin()
Definition GridRefMgr.h:35
iterator end()
Definition GridRefMgr.h:36
Definition LinkedList.h:139
SharedVisionList const & GetSharedVisionList()
Definition Unit.h:1876
bool HasSharedVision() const
Definition Unit.h:1879
bool InSamePhase(WorldObject const *obj) const
Definition Object.h:518
void SendPacket(Player *player) const
Definition GridNotifiers.h:137
float GetExactDist2dSq(const float x, const float y) const
Definition Position.h:161
float GetExactDistSq(float x, float y, float z) const
Definition Position.h:174

References GridRefMgr< OBJECT >::begin(), GridRefMgr< OBJECT >::end(), Position::GetExactDist2dSq(), Position::GetExactDistSq(), Unit::GetSharedVisionList(), Unit::HasSharedVision(), i_distSq, i_phaseMask, i_source, WorldObject::InSamePhase(), required3dDist, and SendPacket().

◆ Visit() [2/5]

void MessageDistDeliverer::Visit ( DynamicObjectMapType m)
276{
277 for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
278 {
279 DynamicObject* target = iter->GetSource();
280 if (!target->GetCasterGUID().IsPlayer() || !target->InSamePhase(i_phaseMask))
281 continue;
282
283 // Xinef: Check whether the dynobject allows to see through it
284 if (!target->IsViewpoint())
285 continue;
286
287 if (required3dDist)
288 {
289 if (target->GetExactDistSq(i_source) > i_distSq)
290 continue;
291 }
292 else
293 if (target->GetExactDist2dSq(i_source) > i_distSq)
294 continue;
295
296 // Send packet back to the caster if the caster has vision of dynamic object
297 Player* caster = (Player*)target->GetCaster();
298 if (caster && caster->m_seer == target)
299 SendPacket(caster);
300 }
301}
Definition DynamicObject.h:35
Unit * GetCaster() const
Definition DynamicObject.h:55
ObjectGuid GetCasterGUID() const
Definition DynamicObject.h:59
bool IsViewpoint() const
Definition DynamicObject.h:61
bool IsPlayer() const
Definition ObjectGuid.h:172
Definition Player.h:1086
WorldObject * m_seer
Definition Player.h:2381

References GridRefMgr< OBJECT >::begin(), GridRefMgr< OBJECT >::end(), DynamicObject::GetCaster(), DynamicObject::GetCasterGUID(), Position::GetExactDist2dSq(), Position::GetExactDistSq(), i_distSq, i_phaseMask, i_source, WorldObject::InSamePhase(), ObjectGuid::IsPlayer(), DynamicObject::IsViewpoint(), Player::m_seer, required3dDist, and SendPacket().

◆ Visit() [3/5]

template<class SKIP >
void Acore::MessageDistDeliverer::Visit ( GridRefMgr< SKIP > &  )
inline
135{ }

◆ Visit() [4/5]

void MessageDistDeliverer::Visit ( PlayerMapType m)
220{
221 for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
222 {
223 Player* target = iter->GetSource();
224 if (!target->InSamePhase(i_phaseMask))
225 continue;
226
227 if (required3dDist)
228 {
229 if (target->GetExactDistSq(i_source) > i_distSq)
230 continue;
231 }
232 else
233 if (target->GetExactDist2dSq(i_source) > i_distSq)
234 continue;
235
236 // Send packet to all who are sharing the player's vision
237 if (target->HasSharedVision())
238 {
239 SharedVisionList::const_iterator i = target->GetSharedVisionList().begin();
240 for (; i != target->GetSharedVisionList().end(); ++i)
241 if ((*i)->m_seer == target)
242 SendPacket(*i);
243 }
244
245 if (target->m_seer == target || target->GetVehicle())
246 SendPacket(target);
247 }
248}
Vehicle * GetVehicle() const
Definition Unit.h:1926

References GridRefMgr< OBJECT >::begin(), GridRefMgr< OBJECT >::end(), Position::GetExactDist2dSq(), Position::GetExactDistSq(), Unit::GetSharedVisionList(), Unit::GetVehicle(), Unit::HasSharedVision(), i_distSq, i_phaseMask, i_source, WorldObject::InSamePhase(), Player::m_seer, required3dDist, and SendPacket().

◆ Visit() [5/5]

void MessageDistDeliverer::Visit ( VisiblePlayersMap const &  m)
204{
205 for (auto const& kvPair : m)
206 {
207 Player const* target = kvPair.second;
208 if (i_distSq != 0.0f && target->GetSightPosition().GetExactDist2dSq(i_source) > i_distSq)
209 continue;
210
211 // @todo: Might not need this check anymore
212 if (skipped_receiver == target)
213 continue;
214
216 }
217}
Position const & GetSightPosition() const
Definition Player.cpp:13519

References Position::GetExactDist2dSq(), Player::GetSightPosition(), i_distSq, i_message, i_source, Player::SendDirectMessage(), and skipped_receiver.

Referenced by WorldObject::SendMessageToSet(), Player::SendMessageToSet(), WorldObject::SendMessageToSetInRange(), and Player::SendMessageToSetInRange().

Member Data Documentation

◆ i_distSq

float Acore::MessageDistDeliverer::i_distSq

Referenced by Visit(), Visit(), Visit(), and Visit().

◆ i_message

WorldPacket const* Acore::MessageDistDeliverer::i_message

Referenced by SendPacket(), and Visit().

◆ i_phaseMask

uint32 Acore::MessageDistDeliverer::i_phaseMask

Referenced by Visit(), Visit(), and Visit().

◆ i_source

WorldObject const* Acore::MessageDistDeliverer::i_source

Referenced by SendPacket(), Visit(), Visit(), Visit(), and Visit().

◆ required3dDist

bool Acore::MessageDistDeliverer::required3dDist

Referenced by Visit(), Visit(), and Visit().

◆ skipped_receiver

Player const* Acore::MessageDistDeliverer::skipped_receiver

Referenced by SendPacket(), and Visit().

◆ teamFilter

TeamFilter Acore::MessageDistDeliverer::teamFilter

Referenced by SendPacket().

◆ teamId

TeamId Acore::MessageDistDeliverer::teamId

Referenced by SendPacket().


The documentation for this struct was generated from the following files: