diff options
author | megamage <none@none> | 2009-03-23 20:13:37 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-23 20:13:37 -0600 |
commit | f18a9c916d23c96c013f702aaec6b2c539ceb273 (patch) | |
tree | 9e1858c39f31538d2fa0c101d4b3911c811e822a /src/game/GridNotifiers.cpp | |
parent | dcb08352e7420b6a1277dfa5de359d2f19651cd9 (diff) |
*Fix some crashes possibly related to vehicles.
*Fix a bug that client crashes when seer is far away from caster.
--HG--
branch : trunk
Diffstat (limited to 'src/game/GridNotifiers.cpp')
-rw-r--r-- | src/game/GridNotifiers.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 86f4be9adc6..a244e950dad 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -110,14 +110,15 @@ Deliverer::Visit(PlayerMapType &m) if(!iter->getSource()->InSamePhase(i_phaseMask)) continue; - if (!i_dist || iter->getSource()->GetDistance(&i_source) <= i_dist) + if (!i_dist || iter->getSource()->GetDistance(&i_source) < i_dist) { // Send packet to all who are sharing the player's vision if (!iter->getSource()->GetSharedVisionList().empty()) { - SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); - for ( ; it != iter->getSource()->GetSharedVisionList().end(); ++it) - SendPacket(*it); + SharedVisionList::const_iterator i = iter->getSource()->GetSharedVisionList().begin(); + for ( ; i != iter->getSource()->GetSharedVisionList().end(); ++i) + if((*i)->m_seer == iter->getSource()) + SendPacket(*i); } VisitObject(iter->getSource()); @@ -133,14 +134,15 @@ Deliverer::Visit(CreatureMapType &m) if(!iter->getSource()->InSamePhase(i_phaseMask)) continue; - if (!i_dist || iter->getSource()->GetDistance(&i_source) <= i_dist) + if (!i_dist || iter->getSource()->GetDistance(&i_source) < i_dist) { // Send packet to all who are sharing the creature's vision if (!iter->getSource()->GetSharedVisionList().empty()) { - SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); - for ( ; it != iter->getSource()->GetSharedVisionList().end(); ++it) - SendPacket(*it); + SharedVisionList::const_iterator i = iter->getSource()->GetSharedVisionList().begin(); + for ( ; i != iter->getSource()->GetSharedVisionList().end(); ++i) + if((*i)->m_seer == iter->getSource()) + SendPacket(*i); } } } @@ -154,13 +156,15 @@ Deliverer::Visit(DynamicObjectMapType &m) if(!iter->getSource()->InSamePhase(i_phaseMask)) continue; - if (IS_PLAYER_GUID(iter->getSource()->GetCasterGUID())) + if (!i_dist || iter->getSource()->GetDistance(&i_source) < i_dist) { - // Send packet back to the caster if the caster has vision of dynamic object - Player* caster = (Player*)iter->getSource()->GetCaster(); - if (caster && caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID() && - (!i_dist || iter->getSource()->GetDistance(&i_source) <= i_dist)) - SendPacket(caster); + if (IS_PLAYER_GUID(iter->getSource()->GetCasterGUID())) + { + // Send packet back to the caster if the caster has vision of dynamic object + Player* caster = (Player*)iter->getSource()->GetCaster(); + if (caster && caster->m_seer == iter->getSource()) + SendPacket(caster); + } } } } |