aboutsummaryrefslogtreecommitdiff
path: root/src/game/ObjectAccessor.cpp
diff options
context:
space:
mode:
authorgvcoman <none@none>2008-11-05 20:51:05 -0600
committergvcoman <none@none>2008-11-05 20:51:05 -0600
commit44bdb135f4ed5bb834795cfb928ccbb0504cf834 (patch)
tree7995df4957fb2e0e6cde895fbe3e85b7efde5fa7 /src/game/ObjectAccessor.cpp
parent8d331f2b10cff29ee0571f7056ad353df6a3eabd (diff)
[svn] Implemented player on player and player on creature possession:
* Implemented packet and vision forwarding through possessed units * Added new OnPossess script call alerting scripts on when possession is applied/removed * Moved fall damage and fall under map calculations into the Player class * Added new PossessedAI that is applied only while possession on creature is active * Implemented summon possessed spell effect * Fixed Eyes of the Beast --HG-- branch : trunk
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