aboutsummaryrefslogtreecommitdiff
path: root/src/game/ObjectAccessor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/ObjectAccessor.cpp')
-rw-r--r--src/game/ObjectAccessor.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp
index 39687e27e49..c81a6303be6 100644
--- a/src/game/ObjectAccessor.cpp
+++ b/src/game/ObjectAccessor.cpp
@@ -622,8 +622,30 @@ void
ObjectAccessor::WorldObjectChangeAccumulator::Visit(PlayerMapType &m)
{
for(PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
- if(iter->getSource()->HaveAtClient(&i_object))
- ObjectAccessor::_buildPacket(iter->getSource(), &i_object, i_updateDatas);
+ {
+ BuildPacket(iter->getSource());
+ if (iter->getSource()->isPossessedByPlayer())
+ BuildPacket((Player*)iter->getSource()->GetCharmer());
+ }
+}
+
+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());
+}
+
+void
+ObjectAccessor::WorldObjectChangeAccumulator::BuildPacket(Player* plr)
+{
+ // Only send update once to a player
+ if (plr_list.find(plr->GetGUID()) == plr_list.end() && plr->HaveAtClient(&i_object))
+ {
+ ObjectAccessor::_buildPacket(plr, &i_object, i_updateDatas);
+ plr_list.insert(plr->GetGUID());
+ }
}
void