diff options
| -rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 22 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 13 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
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); |
