diff options
| author | Rat <gmstreetrat@gmail.com> | 2012-01-20 14:34:04 +0100 |
|---|---|---|
| committer | Rat <gmstreetrat@gmail.com> | 2012-01-20 14:34:04 +0100 |
| commit | 6cd52e7e027c325fad16c295dc83bd70da9d2ded (patch) | |
| tree | 2a10ef948a9dc14f8fad2e1894c71f1daa40c185 /src/server/game/Entities/Player | |
| parent | 7d2c5d263d5a8b5681cb1f900e4519712f090468 (diff) | |
Core/Movement: Fixed short-range teleportation, needs more testing
-added structure for CMSG_MOVE_TIME_SKIPPED, still need to implement the time synch
Diffstat (limited to 'src/server/game/Entities/Player')
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 46 | ||||
| -rwxr-xr-x | src/server/game/Entities/Player/Player.h | 1 |
2 files changed, 32 insertions, 15 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 61d4121c2e4..30427b2bec0 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2068,20 +2068,39 @@ uint8 Player::GetChatTag() const void Player::SendTeleportPacket(Position &oldPos) { - WorldPacket data2(SMSG_MOVE_TELEPORT, 38); - data2.append(GetPackGUID()); - BuildMovementPacket(&data2); - Relocate(&oldPos); - SendMessageToSet(&data2, false); -} + WorldPacket data(SMSG_MOVE_TELEPORT, 38); + + uint64 guid = GetGUID(); + uint8* bytes = (uint8*)&guid; + + data.WriteBit(GetTransGUID()); + data.WriteBit(bytes[0]); + data.WriteBit(bytes[2]); + data.WriteBit(bytes[6]); + data.WriteBit(bytes[7]); + data.WriteBit(bytes[4]); + data.WriteBit(bytes[5]); + data.WriteBit(bytes[3]); + data.WriteBit(bytes[1]); + data.WriteBit(0); //unk byte's bit + data << GetPositionX(); + data << GetPositionY(); + data << GetPositionZ(); + data.WriteByteSeq(bytes[5]); + data.WriteByteSeq(bytes[4]); + if (GetTransGUID()) data << GetTransGUID(); + data.WriteByteSeq(bytes[2]); + data.WriteByteSeq(bytes[7]); + data << uint32(0); //unk int + data.WriteByteSeq(bytes[1]); + data.WriteByteSeq(bytes[0]); + data.WriteByteSeq(bytes[6]); + data.WriteByteSeq(bytes[3]); + // unk byte, only if bit is set + data << GetOrientation(); -void Player::SendTeleportAckPacket() -{ - WorldPacket data(CMSG_MOVE_TELEPORT_ACK, 41); - data.append(GetPackGUID()); - data << uint32(0); // this value increments every time - BuildMovementPacket(&data); - GetSession()->SendPacket(&data); + Relocate(&oldPos); + SendDirectMessage(&data); } bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options) @@ -2195,7 +2214,6 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati Position oldPos; GetPosition(&oldPos); Relocate(x, y, z, orientation); - SendTeleportAckPacket(); SendTeleportPacket(oldPos); // this automatically relocates to oldPos in order to broadcast the packet in the right place } } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index f27e427b435..9c8f60b3abc 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1983,7 +1983,6 @@ class Player : public Unit, public GridObject<Player> void SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr); void SendTeleportPacket(Position &oldPos); - void SendTeleportAckPacket(); Corpse* GetCorpse() const; void SpawnCorpseBones(); |
