aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2015-08-15 14:24:42 +0200
committerForesterDev <gmmunchkinbox@gmail.com>2020-03-12 17:10:13 +0100
commit425f588525cb0b5f384e0bc3b566cdd476579dbb (patch)
tree422eca92db13b75927b8b0ed5072822b35d461a2 /src
parentaf6d207addfef177fb5ac3e7fa61ec93ced83d16 (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.cpp33
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h13
-rw-r--r--src/server/game/Server/WorldSession.h3
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);