aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/GridNotifiers.h6
-rw-r--r--src/game/MovementHandler.cpp15
-rw-r--r--src/game/Object.cpp6
-rw-r--r--src/game/Object.h1
-rw-r--r--src/game/Player.cpp11
-rw-r--r--src/game/Player.h1
6 files changed, 30 insertions, 10 deletions
diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h
index c6c4ee30a87..49d2bd38d02 100644
--- a/src/game/GridNotifiers.h
+++ b/src/game/GridNotifiers.h
@@ -127,9 +127,11 @@ namespace Trinity
uint32 i_phaseMask;
float i_distSq;
uint32 team;
- MessageDistDeliverer(WorldObject *src, WorldPacket *msg, float dist, bool own_team_only = false)
+ Player const* skipped_receiver;
+ MessageDistDeliverer(WorldObject *src, WorldPacket *msg, float dist, bool own_team_only = false, Player const* skipped = NULL)
: i_source(src), i_message(msg), i_distSq(dist * dist), i_phaseMask(src->GetPhaseMask())
, team((own_team_only && src->GetTypeId() == TYPEID_PLAYER) ? ((Player*)src)->GetTeam() : 0)
+ , skipped_receiver(skipped)
{
}
void Visit(PlayerMapType &m);
@@ -140,7 +142,7 @@ namespace Trinity
void SendPacket(Player* plr)
{
// never send packet to self
- if(plr == i_source || team && plr->GetTeam() != team)
+ if(plr == i_source || (team && plr->GetTeam() != team) || skipped_receiver == plr)
return;
plr->GetSession()->SendPacket(i_message);
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp
index 03ad6bf6e63..f138b42c486 100644
--- a/src/game/MovementHandler.cpp
+++ b/src/game/MovementHandler.cpp
@@ -349,7 +349,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
movementInfo.time = getMSTime();
movementInfo.guid = mover->GetGUID();
WriteMovementInfo(&data, &movementInfo);
- GetPlayer()->SendMessageToSet(&data, false);
+ mover->SendMessageToSet(&data, _player);
mover->m_movementInfo = movementInfo;
@@ -360,9 +360,10 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
return;
}
+ mover->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
+
if (plMover) // nothing is charmed, or player charmed
{
- plMover->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
plMover->UpdateFallInformationIfNeed(movementInfo, opcode);
if (movementInfo.z < -500.0f)
@@ -396,17 +397,15 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
}
}
}
- else // creature charmed
+ /*else // creature charmed
{
- mover->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
-
- /*if(mover->canFly())
+ if(mover->canFly())
{
bool flying = mover->IsFlying();
if(flying != ((mover->GetByteValue(UNIT_FIELD_BYTES_1, 3) & 0x02) ? true : false))
mover->SetFlying(flying);
- }*/
- }
+ }
+ }*/
//sLog.outString("Receive Movement Packet %s:", opcodeTable[recv_data.GetOpcode()]);
//mover->OutMovementInfo();
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index a5279e6a581..61f56cb0b81 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -1656,6 +1656,12 @@ void WorldObject::SendMessageToSetInRange(WorldPacket *data, float dist, bool /*
VisitNearbyWorldObject(dist, notifier);
}
+void WorldObject::SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr)
+{
+ Trinity::MessageDistDeliverer notifier(this, data, GetMap()->GetVisibilityDistance(), false, skipped_rcvr);
+ VisitNearbyWorldObject(GetMap()->GetVisibilityDistance(), notifier);
+}
+
void WorldObject::SendObjectDeSpawnAnim(uint64 guid)
{
WorldPacket data(SMSG_GAMEOBJECT_DESPAWN_ANIM, 8);
diff --git a/src/game/Object.h b/src/game/Object.h
index dd8b808b920..6029a756620 100644
--- a/src/game/Object.h
+++ b/src/game/Object.h
@@ -598,6 +598,7 @@ class WorldObject : public Object, public WorldLocation
virtual void SendMessageToSet(WorldPacket *data, bool self);
virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self);
+ virtual void SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr);
void MonsterSay(const char* text, uint32 language, uint64 TargetGuid);
void MonsterYell(const char* text, uint32 language, uint64 TargetGuid);
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index d8b8e4d8b65..1a1bffa4b0a 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -6045,6 +6045,17 @@ void Player::SendMessageToSetInRange(WorldPacket *data, float dist, bool self, b
VisitNearbyWorldObject(dist, notifier);
}
+void Player::SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr)
+{
+ if (skipped_rcvr != this)
+ GetSession()->SendPacket(data);
+
+ // we use World::GetMaxVisibleDistance() because i cannot see why not use a distance
+ // update: replaced by GetMap()->GetVisibilityDistance()
+ Trinity::MessageDistDeliverer notifier(this, data, GetMap()->GetVisibilityDistance(), false, skipped_rcvr);
+ VisitNearbyWorldObject(GetMap()->GetVisibilityDistance(), notifier);
+}
+
void Player::SendDirectMessage(WorldPacket *data)
{
if (m_session)
diff --git a/src/game/Player.h b/src/game/Player.h
index b1b32ce9008..0578553b83b 100644
--- a/src/game/Player.h
+++ b/src/game/Player.h
@@ -1824,6 +1824,7 @@ class Player : public Unit, public GridObject<Player>
void SendMessageToSet(WorldPacket *data, bool self);// overwrite Object::SendMessageToSet
void SendMessageToSetInRange(WorldPacket *data, float fist, bool self);// overwrite Object::SendMessageToSetInRange
void SendMessageToSetInRange(WorldPacket *data, float dist, bool self, bool own_team_only);
+ void SendMessageToSet(WorldPacket *data, Player const* skipped_rcvr);
void SendTeleportPacket(Position &oldPos);
void SendTeleportAckPacket();