aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp22
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h13
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h3
5 files changed, 28 insertions, 20 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 48ce07f3668..c1762421956 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -700,22 +700,8 @@ void WorldSession::HandlePlayedTime(WorldPackets::Character::RequestPlayedTime&
SendPacket(playedTime.Write());
}
-void WorldSession::HandleWorldTeleportOpcode(WorldPacket& recvData)
+void WorldSession::HandleWorldTeleportOpcode(WorldPackets::Misc::WorldTeleport& worldTeleport)
{
- uint32 time;
- uint32 mapid;
- float PositionX;
- float PositionY;
- float PositionZ;
- float Orientation;
-
- recvData >> time; // time in m.sec.
- recvData >> mapid;
- recvData >> PositionX;
- recvData >> PositionY;
- recvData >> PositionZ;
- recvData >> Orientation; // o (3.141593 = 180 degrees)
-
if (GetPlayer()->IsInFlight())
{
TC_LOG_DEBUG("network", "Player '%s' (%s) in flight, ignore worldport command.",
@@ -723,11 +709,11 @@ void WorldSession::HandleWorldTeleportOpcode(WorldPacket& recvData)
return;
}
- TC_LOG_DEBUG("network", "CMSG_WORLD_TELEPORT: Player = %s, Time = %u, map = %u, x = %f, y = %f, z = %f, o = %f",
- GetPlayer()->GetName().c_str(), time, mapid, PositionX, PositionY, PositionZ, Orientation);
+ TC_LOG_DEBUG("network", "CMSG_WORLD_TELEPORT: Player = %s, map = %u, x = %f, y = %f, z = %f, o = %f",
+ GetPlayer()->GetName().c_str(), worldTeleport.MapID, worldTeleport.Pos.x, worldTeleport.Pos.y, worldTeleport.Pos.z, worldTeleport.Facing);
if (HasPermission(rbac::RBAC_PERM_OPCODE_WORLD_TELEPORT))
- GetPlayer()->TeleportTo(mapid, PositionX, PositionY, PositionZ, Orientation);
+ GetPlayer()->TeleportTo(worldTeleport.MapID, worldTeleport.Pos.x, worldTeleport.Pos.y, worldTeleport.Pos.z, worldTeleport.Facing);
else
SendNotification(LANG_YOU_NOT_HAVE_PERMISSION);
}
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 7c45810bc13..b1799a1aa64 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -545,3 +545,11 @@ void WorldPackets::Misc::SetPvP::Read()
{
EnablePVP = _worldPacket.ReadBit();
}
+
+void WorldPackets::Misc::WorldTeleport::Read()
+{
+ _worldPacket >> MapID;
+ _worldPacket >> TransportGUID;
+ _worldPacket >> Pos;
+ _worldPacket >> Facing;
+}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index ea1d32b73cc..749b9516e82 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -712,6 +712,19 @@ namespace WorldPackets
bool EnablePVP = false;
};
+
+ class WorldTeleport final : public ClientPacket
+ {
+ public:
+ WorldTeleport(WorldPacket&& packet) : ClientPacket(CMSG_WORLD_TELEPORT, std::move(packet)) { }
+
+ void Read() override;
+
+ uint32 MapID = 0;
+ ObjectGuid TransportGUID;
+ G3D::Vector3 Pos;
+ float Facing = 0.0f;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 708981b00ec..4dcf5fe9bc4 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -825,7 +825,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_WHO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Who::WhoRequestPkt, &WorldSession::HandleWhoOpcode);
DEFINE_HANDLER(CMSG_WHO_IS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Who::WhoIsRequest, &WorldSession::HandleWhoIsOpcode);
DEFINE_HANDLER(CMSG_WORLD_PORT_RESPONSE, STATUS_TRANSFER, PROCESS_THREADUNSAFE, WorldPackets::Movement::WorldPortResponse, &WorldSession::HandleMoveWorldportAckOpcode);
- DEFINE_OPCODE_HANDLER_OLD(CMSG_WORLD_TELEPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleWorldTeleportOpcode );
+ DEFINE_HANDLER(CMSG_WORLD_TELEPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::WorldTeleport, &WorldSession::HandleWorldTeleportOpcode);
DEFINE_HANDLER(CMSG_WRAP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Item::WrapItem, &WorldSession::HandleWrapItem);
#undef DEFINE_OPCODE_HANDLER_OLD
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 18f7afab82f..8d31aefe48a 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -371,6 +371,7 @@ namespace WorldPackets
class OpeningCinematic;
class TogglePvP;
class SetPvP;
+ class WorldTeleport;
}
namespace Movement
@@ -1414,7 +1415,7 @@ class WorldSession
void HandleBfExitRequest(WorldPacket& recvData);
void HandleWardenDataOpcode(WorldPacket& recvData);
- void HandleWorldTeleportOpcode(WorldPacket& recvData);
+ void HandleWorldTeleportOpcode(WorldPackets::Misc::WorldTeleport& worldTeleport);
void HandleMinimapPingOpcode(WorldPackets::Party::MinimapPingClient& packet);
void HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet);
void HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet);