aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Player
diff options
context:
space:
mode:
authorRat <gmstreetrat@gmail.com>2012-01-20 14:34:04 +0100
committerRat <gmstreetrat@gmail.com>2012-01-20 14:34:04 +0100
commit6cd52e7e027c325fad16c295dc83bd70da9d2ded (patch)
tree2a10ef948a9dc14f8fad2e1894c71f1daa40c185 /src/server/game/Entities/Player
parent7d2c5d263d5a8b5681cb1f900e4519712f090468 (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-xsrc/server/game/Entities/Player/Player.cpp46
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h1
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();