diff options
author | gvcoman <none@none> | 2008-11-14 20:40:35 -0600 |
---|---|---|
committer | gvcoman <none@none> | 2008-11-14 20:40:35 -0600 |
commit | 5deef1bb59ba53570d481a97e5c1df39ef316f37 (patch) | |
tree | 334e913e1247419d2ad485f1681e859aa8875044 /src/game/ObjectAccessor.cpp | |
parent | 3085e66b966fec0012decf2543c7e32064b47102 (diff) |
[svn] * Reimplemented packet/update forwarding in more generic way
* Implemented far sight spells (Far Sight, Eagle Eye, etc) at unlimited range and properly forward packets
* Implemented bind vision spells (Mind Vision, etc) to forward packets at unlimited distance
* Implemented Sentry Totem (both vision switching/forwarding and alerting)
* Other misc possession fixes
* Added .bindsight and .unbindsight commands
Please test out the above spells (including Mind Control) and report any issues on the forums.
--HG--
branch : trunk
Diffstat (limited to 'src/game/ObjectAccessor.cpp')
-rw-r--r-- | src/game/ObjectAccessor.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index 654645f3068..e5243ab941e 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -624,8 +624,12 @@ ObjectAccessor::WorldObjectChangeAccumulator::Visit(PlayerMapType &m) for(PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) { BuildPacket(iter->getSource()); - if (iter->getSource()->isPossessedByPlayer()) - BuildPacket((Player*)iter->getSource()->GetCharmer()); + if (!iter->getSource()->GetSharedVisionList().empty()) + { + SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); + for ( ; it != iter->getSource()->GetSharedVisionList().end(); ++it) + BuildPacket(*it); + } } } @@ -633,8 +637,28 @@ void ObjectAccessor::WorldObjectChangeAccumulator::Visit(CreatureMapType &m) { for(CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) - if (iter->getSource()->isPossessedByPlayer()) - BuildPacket((Player*)iter->getSource()->GetCharmer()); + { + if (!iter->getSource()->GetSharedVisionList().empty()) + { + SharedVisionList::const_iterator it = iter->getSource()->GetSharedVisionList().begin(); + for ( ; it != iter->getSource()->GetSharedVisionList().end(); ++it) + BuildPacket(*it); + } + } +} + +void +ObjectAccessor::WorldObjectChangeAccumulator::Visit(DynamicObjectMapType &m) +{ + for(DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter) + { + if (IS_PLAYER_GUID(iter->getSource()->GetCasterGUID())) + { + Player* caster = (Player*)iter->getSource()->GetCaster(); + if (caster->GetUInt64Value(PLAYER_FARSIGHT) == iter->getSource()->GetGUID()) + BuildPacket(caster); + } + } } void |