aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorIntel <chemicstry@gmail.com>2014-11-30 23:33:16 +0200
committerIntel <chemicstry@gmail.com>2014-11-30 23:35:12 +0200
commite65590fa6999c321db435c9c24eb7557a6f8d955 (patch)
tree48c742c2fb6e802b584e333839cc585e098ba876 /src/server/game/Entities/Unit
parent06bb904b2e6f6f11368c5d025e3afbdb81d9ca6a (diff)
Core/Packets: Added SMSG_MOVE_TELEPORT, SMSG_MOVE_UPDATE_TELEPORT, CMSG_MOVE_TELEPORT_ACK packets
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp65
1 files changed, 15 insertions, 50 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 802ebba5ef5..6a41a304639 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -10766,7 +10766,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
// Send notification to other players
WorldPackets::Movement::MoveUpdateSpeed packet(moveTypeToOpcode[mtype][2]);
- packet.movementInfo = m_movementInfo;
+ packet.movementInfo = &m_movementInfo;
packet.Speed = rate;
SendMessageToSet(packet.Write(), false);
}
@@ -15805,61 +15805,26 @@ void Unit::SendTeleportPacket(Position& pos)
ObjectGuid guid = GetGUID();
ObjectGuid transGuid = GetTransGUID();
- WorldPacket data(SMSG_MOVE_UPDATE_TELEPORT, 38);
- WriteMovementInfo(data);
+ WorldPackets::Movement::MoveUpdateTeleport packet;
+ packet.movementInfo = &m_movementInfo;
if (GetTypeId() == TYPEID_PLAYER)
{
- WorldPacket data2(SMSG_MOVE_TELEPORT, 38);
- data2.WriteBit(guid[6]);
- data2.WriteBit(guid[0]);
- data2.WriteBit(guid[3]);
- data2.WriteBit(guid[2]);
- data2.WriteBit(0); // unknown
- data2.WriteBit(!transGuid.IsEmpty());
- data2.WriteBit(guid[1]);
+ WorldPackets::Movement::MoveTeleport selfPacket;
+
+ selfPacket.MoverGUID = guid;
+
if (!transGuid.IsEmpty())
{
- data2.WriteBit(transGuid[1]);
- data2.WriteBit(transGuid[3]);
- data2.WriteBit(transGuid[2]);
- data2.WriteBit(transGuid[5]);
- data2.WriteBit(transGuid[0]);
- data2.WriteBit(transGuid[7]);
- data2.WriteBit(transGuid[6]);
- data2.WriteBit(transGuid[4]);
+ selfPacket.TransportGUID.Value = transGuid;
+ selfPacket.TransportGUID.HasValue = true;
}
- data2.WriteBit(guid[4]);
- data2.WriteBit(guid[7]);
- data2.WriteBit(guid[5]);
- data2.FlushBits();
- if (!transGuid.IsEmpty())
- {
- data2.WriteByteSeq(transGuid[6]);
- data2.WriteByteSeq(transGuid[5]);
- data2.WriteByteSeq(transGuid[1]);
- data2.WriteByteSeq(transGuid[7]);
- data2.WriteByteSeq(transGuid[0]);
- data2.WriteByteSeq(transGuid[2]);
- data2.WriteByteSeq(transGuid[4]);
- data2.WriteByteSeq(transGuid[3]);
- }
-
- data2 << uint32(0); // counter
- data2.WriteByteSeq(guid[1]);
- data2.WriteByteSeq(guid[2]);
- data2.WriteByteSeq(guid[3]);
- data2.WriteByteSeq(guid[5]);
- data2 << float(GetPositionX());
- data2.WriteByteSeq(guid[4]);
- data2 << float(GetOrientation());
- data2.WriteByteSeq(guid[7]);
- data2 << float(GetPositionZMinusOffset());
- data2.WriteByteSeq(guid[0]);
- data2.WriteByteSeq(guid[6]);
- data2 << float(GetPositionY());
- ToPlayer()->SendDirectMessage(&data2); // Send the MSG_MOVE_TELEPORT packet to self.
+ selfPacket.Pos.Relocate(GetPositionX(), GetPositionY(), GetPositionZMinusOffset());
+ selfPacket.Facing = GetOrientation();
+ selfPacket.SequenceIndex = m_movementCounter++;
+
+ ToPlayer()->SendDirectMessage(selfPacket.Write());
}
// Relocate the player/creature to its old position, so we can broadcast to nearby players correctly
@@ -15869,7 +15834,7 @@ void Unit::SendTeleportPacket(Position& pos)
Relocate(&oldPos);
// Broadcast the packet to everyone except self.
- SendMessageToSet(&data, false);
+ SendMessageToSet(packet.Write(), false);
}
bool Unit::UpdatePosition(float x, float y, float z, float orientation, bool teleport)