diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-08-15 14:24:42 +0200 |
---|---|---|
committer | ForesterDev <gmmunchkinbox@gmail.com> | 2020-03-12 17:10:13 +0100 |
commit | 425f588525cb0b5f384e0bc3b566cdd476579dbb (patch) | |
tree | 422eca92db13b75927b8b0ed5072822b35d461a2 /src | |
parent | af6d207addfef177fb5ac3e7fa61ec93ced83d16 (diff) |
Core/PacketIO: Updated and enabled CMSG_WORLD_TELEPORT (GM opcode)
(cherry picked from commit 7632e1182584236ab2e8069ac6e3739fd7de47b0)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 33 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 13 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
4 files changed, 32 insertions, 24 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 38e0ea8a19f..552db8c6ffc 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -38,6 +38,7 @@ #include "Language.h" #include "Log.h" #include "MapManager.h" +#include "MiscPackets.h" #include "Object.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" @@ -1042,36 +1043,22 @@ void WorldSession::HandleInspectHonorStatsOpcode(WorldPacket& recvData) SendPacket(&data); } -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) - - TC_LOG_DEBUG("network", "WORLD: Received CMSG_WORLD_TELEPORT"); - - if (GetPlayer()->IsInFlight()) + if (_player->IsInFlight()) { - TC_LOG_DEBUG("network", "Player '%s' (GUID: %u) in flight, ignore worldport command.", - GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().GetCounter()); + TC_LOG_DEBUG("network", "Player '%s' (%s) in flight, ignore worldport command.", + _player->GetName().c_str(), _player->GetGUID().ToString().c_str()); 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); + WorldLocation loc(worldTeleport.MapID, worldTeleport.Pos); + loc.SetOrientation(worldTeleport.Facing); + TC_LOG_DEBUG("network", "CMSG_WORLD_TELEPORT: Player = %s, time = %u, map = %u, pos = %s", + _player->GetName().c_str(), worldTeleport.Time, worldTeleport.MapID, loc.ToString().c_str()); if (HasPermission(rbac::RBAC_PERM_OPCODE_WORLD_TELEPORT)) - GetPlayer()->TeleportTo(mapid, PositionX, PositionY, PositionZ, Orientation); + _player->TeleportTo(loc); 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 efd9bc1f44e..32cb5484afd 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -115,3 +115,10 @@ WorldPacket const* WorldPackets::Misc::OverrideLight::Write() return &_worldPacket; } +void WorldPackets::Misc::WorldTeleport::Read() +{ + _worldPacket >> Time; + _worldPacket >> MapID; + _worldPacket >> Pos; + _worldPacket >> Facing; +} diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 0ae667a8fa2..19c20abb2a0 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -199,6 +199,19 @@ namespace WorldPackets int32 TransitionMilliseconds = 0; int32 OverrideLightID = 0; }; + + class WorldTeleport final : public ClientPacket + { + public: + WorldTeleport(WorldPacket&& packet) : ClientPacket(CMSG_WORLD_TELEPORT, std::move(packet)) { } + + void Read() override; + + uint32 Time = 0; + uint32 MapID = 0; + TaggedPosition<Position::XYZ> Pos; + float Facing = 0.0f; + }; } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 6e8379b994b..9edd5f28893 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -98,6 +98,7 @@ namespace WorldPackets class CompleteMovie; class NextCinematicCamera; class OpeningCinematic; + class WorldTeleport; } namespace Query { @@ -873,7 +874,7 @@ class TC_GAME_API WorldSession void HandleBfExitRequest(WorldPacket& recvData); void HandleWardenDataOpcode(WorldPacket& recvData); - void HandleWorldTeleportOpcode(WorldPacket& recvData); + void HandleWorldTeleportOpcode(WorldPackets::Misc::WorldTeleport& worldTeleport); void HandleMinimapPingOpcode(WorldPacket& recvData); void HandleRandomRollOpcode(WorldPacket& recvData); void HandleFarSightOpcode(WorldPacket& recvData); |