TrinityCore
Loading...
Searching...
No Matches
MovementPackets.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITYCORE_MOVEMENT_PACKETS_H
19#define TRINITYCORE_MOVEMENT_PACKETS_H
20
21#include "Packet.h"
23#include "MovementInfo.h"
24#include "Optional.h"
25#include "PacketUtilities.h"
26
27namespace Movement
28{
29 class MoveSpline;
30}
31
32namespace WorldPackets
33{
34 namespace Movement
35 {
41
43 {
44 public:
45 explicit ClientPlayerMovement(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
46
47 void Read() override;
48
50 };
51
52 class TC_GAME_API MoveUpdate final : public ServerPacket
53 {
54 public:
56
57 WorldPacket const* Write() override;
58
59 MovementInfo* Status = nullptr;
60 };
61
63 {
66 };
67
69 {
70 std::vector<MonsterSplineFilterKey> FilterKeys;
72 float BaseSpeed = 0.0f;
74 float DistToPrevFilterKey = 0.0f;
76 };
77
86
93
95 {
96 float StartFacing = 0.0f;
97 float TotalTurnRads = 0.0f;
98 float RadsPerSec = 0.0f;
99 };
100
108
115
117 {
118 std::array<MonsterSplineSpellVisualNodeInfo, 16> NodeInfo;
119 };
120
122 {
123 uint32 Flags = 0; // Spline flags
124 uint8 Face = 0; // Movement direction (see MonsterMoveType enum)
128 std::vector<TaggedPosition<Position::XYZ>> Points; // Spline path
129 uint8 Mode = 0; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags
131 bool TaxiSmoothing = false;
134 std::vector<TaggedPosition<Position::PackedXYZ>> PackedDeltas;
141 float FaceDirection = 0.0f;
144 };
145
147 {
149 bool CrzTeleport = false;
151 uint8 StopSplineStyle = 0; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits<float>::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2)
153 };
154
156 {
157 public:
158 static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const& moveSpline, ByteBuffer& data);
159
160 static void WriteMovementForceWithDirection(MovementForce const& movementForce, ByteBuffer& data, Position const* objectPosition = nullptr);
161 };
162
176
177 class FlightSplineSync final : public ServerPacket
178 {
179 public:
181
182 WorldPacket const* Write() override;
183
185 float SplineDist = 0.0f;
186 };
187
189 {
190 public:
191 explicit MoveSplineSetSpeed(OpcodeServer opcode) : ServerPacket(opcode, 12) { }
192
193 WorldPacket const* Write() override;
194
196 float Speed = 1.0f;
197 };
198
200 {
201 public:
202 explicit MoveSetSpeed(OpcodeServer opcode) : ServerPacket(opcode) { }
203
204 WorldPacket const* Write() override;
205
208 float Speed = 1.0f;
209 };
210
212 {
213 public:
214 explicit MoveUpdateSpeed(OpcodeServer opcode) : ServerPacket(opcode) { }
215
216 WorldPacket const* Write() override;
217
219 float Speed = 1.0f;
220 };
221
222 class SetAdvFlyingSpeed final : public ServerPacket
223 {
224 public:
225 explicit SetAdvFlyingSpeed(OpcodeServer opcode) : ServerPacket(opcode, 16 + 4 + 4) { }
226
227 WorldPacket const* Write() override;
228
231 float Speed = 1.0f;
232 };
233
235 {
236 public:
237 explicit SetAdvFlyingSpeedRange(OpcodeServer opcode) : ServerPacket(opcode, 16 + 4 + 4 + 4) { }
238
239 WorldPacket const* Write() override;
240
243 float SpeedMin = 1.0f;
244 float SpeedMax = 1.0f;
245 };
246
247 class MoveSplineSetFlag final : public ServerPacket
248 {
249 public:
250 explicit MoveSplineSetFlag(OpcodeServer opcode) : ServerPacket(opcode, 18) { }
251
252 WorldPacket const* Write() override;
253
255 };
256
257 class MoveSetFlag final : public ServerPacket
258 {
259 public:
260 explicit MoveSetFlag(OpcodeServer opcode) : ServerPacket(opcode, 18 + 4) { }
261
262 WorldPacket const* Write() override;
263
266 };
267
269 {
270 uint32 ID = 0;
272 };
273
287
288 class TransferAborted final : public ServerPacket
289 {
290 public:
291 explicit TransferAborted() : ServerPacket(SMSG_TRANSFER_ABORTED, 4 + 1 + 4 + 1) { }
292
293 WorldPacket const* Write() override;
294
299 };
300
307
308 class NewWorld final : public ServerPacket
309 {
310 public:
311 explicit NewWorld() : ServerPacket(SMSG_NEW_WORLD, 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4) { }
312
313 WorldPacket const* Write() override;
314
318 TaggedPosition<Position::XYZ> MovementOffset; // Adjusts all pending movement events by this offset
320 uint64 InstanceID = 0u; // Required for damageMeterResetOnNewInstance cvar to function
321 };
322
323 class WorldPortResponse final : public ClientPacket
324 {
325 public:
327
328 void Read() override { }
329 };
330
337
353
373
375 {
376 public:
377 explicit MoveApplyMovementForce() : ServerPacket(SMSG_MOVE_APPLY_MOVEMENT_FORCE, 16 + 4 + 16 + 12 + 12 + 4 + 4 + 1) { }
378
379 WorldPacket const* Write() override;
380
383 MovementForce const* Force = nullptr;
384 };
385
387 {
388 public:
390
391 void Read() override;
392
395 };
396
398 {
399 public:
401
402 WorldPacket const* Write() override;
403
407 };
408
410 {
411 public:
413
414 void Read() override;
415
418 };
419
421 {
422 public:
424
425 WorldPacket const* Write() override;
426
428 MovementForce const* Force = nullptr;
429 };
430
441
442 class MoveTeleportAck final : public ClientPacket
443 {
444 public:
445 explicit MoveTeleportAck(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_TELEPORT_ACK, std::move(packet)) { }
446
447 void Read() override;
448
452 };
453
454 class MovementAckMessage final : public ClientPacket
455 {
456 public:
457 explicit MovementAckMessage(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
458
459 void Read() override;
460
462 };
463
464 class MovementSpeedAck final : public ClientPacket
465 {
466 public:
467 explicit MovementSpeedAck(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
468
469 void Read() override;
470
472 float Speed = 0.0f;
473 };
474
476 {
477 public:
478 explicit MovementSpeedRangeAck(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
479
480 void Read() override;
481
483 float SpeedMin = 1.0f;
484 float SpeedMax = 1.0f;
485 };
486
487 class SetActiveMover final : public ClientPacket
488 {
489 public:
490 explicit SetActiveMover(WorldPacket&& packet) : ClientPacket(CMSG_SET_ACTIVE_MOVER, std::move(packet)) { }
491
492 void Read() override;
493
495 };
496
497 class MoveSetActiveMover final : public ServerPacket
498 {
499 public:
501
502 WorldPacket const* Write() override;
503
505 };
506
508 {
509 float HorzSpeed = 0.0f;
510 float VertSpeed = 0.0f;
511 };
512
525
527 {
528 public:
530
531 WorldPacket const* Write() override;
532
534 };
535
536 class MoveKnockBackAck final : public ClientPacket
537 {
538 public:
540
541 void Read() override;
542
545 };
546
548 {
549 Scale = 0,
550 Mount = 1,
551 Force = 2
552 };
553
569
571 {
572 public:
574
575 WorldPacket const* Write() override;
576
578 float Scale = 1.0f;
579 float Height = 1.0f;
580 };
581
594
595 class MoveTimeSkipped final : public ClientPacket
596 {
597 public:
598 explicit MoveTimeSkipped(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_TIME_SKIPPED, std::move(packet)) { }
599
600 void Read() override;
601
604 };
605
606 class MoveSkipTime final : public ServerPacket
607 {
608 public:
610
611 WorldPacket const* Write() override;
612
615 };
616
617 class SummonResponse final : public ClientPacket
618 {
619 public:
620 explicit SummonResponse(WorldPacket&& packet) : ClientPacket(CMSG_SUMMON_RESPONSE, std::move(packet)) { }
621
622 void Read() override;
623
624 bool Accept = false;
626 };
627
629 {
630 public:
632
633 WorldPacket const* Write() override;
634
636 bool On = false;
637 };
638
639 class MoveSplineDone final : public ClientPacket
640 {
641 public:
642 explicit MoveSplineDone(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_SPLINE_DONE, std::move(packet)) { }
643
644 void Read() override;
645
648 };
649
650 class SummonRequest final : public ServerPacket
651 {
652 public:
654 {
655 SPELL = 0,
656 SCENARIO = 1
657 };
658
659 explicit SummonRequest() : ServerPacket(SMSG_SUMMON_REQUEST, 16 + 4 + 4 + 1) { }
660
661 WorldPacket const* Write() override;
662
667 bool SkipStartingArea = false;
668 };
669
670 class SuspendToken final : public ServerPacket
671 {
672 public:
674
675 WorldPacket const* Write() override;
676
679 };
680
682 {
683 public:
685
686 void Read() override;
687
689 };
690
691 class ResumeToken final : public ServerPacket
692 {
693 public:
695
696 WorldPacket const* Write() override;
697
700 };
701
708
710 {
711 float Min = 0.0f;
712 float Max = 0.0f;
713 };
714
721
739
741 {
742 public:
744
745 WorldPacket const* Write() override;
746
748 std::vector<MoveStateChange> StateChanges;
749 };
750
752 {
753 public:
755
756 void Read() override;
757
759 };
760
773
774 class MoveRemoveInertia final : public ServerPacket
775 {
776 public:
778
779 WorldPacket const* Write() override;
780
784 };
785
787 {
788 public:
790
791 void Read() override;
792
796 };
797
799 {
800 public:
802
803 void Read() override;
804
807 };
808
820
822 {
823 public:
825
826 WorldPacket const* Write() override;
827
830 };
831
833 {
834 public:
836
837 void Read() override;
838
840 float GravityModifier = 1.0f;
841 };
842
844 {
845 public:
847
848 WorldPacket const* Write() override;
849
852 float GravityModifier = 1.0f;
853 };
854
856 {
857 public:
859
860 WorldPacket const* Write() override;
861
863 float GravityModifier = 1.0f;
864 };
865
867 }
868}
869
870ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo);
871
872ByteBuffer& operator<<(ByteBuffer& data, MovementInfo::TransportInfo const& transportInfo);
873
874#endif // TRINITYCORE_MOVEMENT_PACKETS_H
#define TC_GAME_API
Definition Define.h:129
uint8_t uint8
Definition Define.h:156
int16_t int16
Definition Define.h:151
int8_t int8
Definition Define.h:152
int32_t int32
Definition Define.h:150
uint64_t uint64
Definition Define.h:153
uint16_t uint16
Definition Define.h:155
uint32_t uint32
Definition Define.h:154
ByteBuffer & operator>>(ByteBuffer &data, MovementInfo &movementInfo)
ByteBuffer & operator<<(ByteBuffer &data, MovementInfo::TransportInfo const &transportInfo)
OpcodeServer
Definition Opcodes.h:1105
@ SMSG_NEW_WORLD
Definition Opcodes.h:2047
@ SMSG_MOVE_REMOVE_INERTIA
Definition Opcodes.h:1911
@ SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE
Definition Opcodes.h:2003
@ SMSG_MOVE_UPDATE_TELEPORT
Definition Opcodes.h:2009
@ SMSG_SUSPEND_TOKEN
Definition Opcodes.h:2402
@ SMSG_MOVE_KNOCK_BACK
Definition Opcodes.h:1909
@ SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE
Definition Opcodes.h:1995
@ SMSG_MOVE_UPDATE_APPLY_INERTIA
Definition Opcodes.h:1994
@ SMSG_MOVE_SET_COLLISION_HEIGHT
Definition Opcodes.h:1934
@ SMSG_TRANSFER_PENDING
Definition Opcodes.h:2426
@ SMSG_SUMMON_REQUEST
Definition Opcodes.h:2398
@ SMSG_MOVE_REMOVE_MOVEMENT_FORCE
Definition Opcodes.h:1912
@ SMSG_MOVE_SET_COMPOUND_STATE
Definition Opcodes.h:1935
@ SMSG_CONTROL_UPDATE
Definition Opcodes.h:1394
@ SMSG_MOVE_APPLY_MOVEMENT_FORCE
Definition Opcodes.h:1889
@ SMSG_MOVE_UPDATE_SET_GRAVITY_MODIFIER
Definition Opcodes.h:2006
@ SMSG_MOVE_SKIP_TIME
Definition Opcodes.h:1954
@ SMSG_MOVE_SET_GRAVITY_MODIFIER
Definition Opcodes.h:1939
@ SMSG_MOVE_UPDATE_REMOVE_INERTIA
Definition Opcodes.h:2002
@ SMSG_MOVE_SET_ACTIVE_MOVER
Definition Opcodes.h:1914
@ SMSG_FLIGHT_SPLINE_SYNC
Definition Opcodes.h:1481
@ SMSG_MOVE_UPDATE
Definition Opcodes.h:1992
@ SMSG_MOVE_UPDATE_KNOCK_BACK
Definition Opcodes.h:1999
@ SMSG_MOVE_UPDATE_COLLISION_HEIGHT
Definition Opcodes.h:1996
@ SMSG_ON_MONSTER_MOVE
Definition Opcodes.h:2055
@ SMSG_TRANSFER_ABORTED
Definition Opcodes.h:2425
@ SMSG_MOVE_TELEPORT
Definition Opcodes.h:1982
@ SMSG_RESUME_TOKEN
Definition Opcodes.h:2265
@ SMSG_MOVE_APPLY_INERTIA
Definition Opcodes.h:1888
@ CMSG_MOVE_APPLY_INERTIA_ACK
Definition Opcodes.h:604
@ CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK
Definition Opcodes.h:605
@ CMSG_MOVE_FORCE_GRAVITY_MODIFIER_CHANGE_ACK
Definition Opcodes.h:623
@ CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK
Definition Opcodes.h:646
@ CMSG_MOVE_TIME_SKIPPED
Definition Opcodes.h:698
@ CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE
Definition Opcodes.h:641
@ CMSG_SUMMON_RESPONSE
Definition Opcodes.h:991
@ CMSG_MOVE_TELEPORT_ACK
Definition Opcodes.h:697
@ CMSG_MOVE_SPLINE_DONE
Definition Opcodes.h:678
@ CMSG_MOVE_KNOCK_BACK_ACK
Definition Opcodes.h:643
@ CMSG_MOVE_SET_COLLISION_HEIGHT_ACK
Definition Opcodes.h:667
@ CMSG_SET_ACTIVE_MOVER
Definition Opcodes.h:918
@ CMSG_WORLD_PORT_RESPONSE
Definition Opcodes.h:1061
@ CMSG_MOVE_REMOVE_INERTIA_ACK
Definition Opcodes.h:644
@ CMSG_SUSPEND_TOKEN_RESPONSE
Definition Opcodes.h:995
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition Optional.h:25
AnimTier
Definition UnitDefines.h:69
static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const &moveSpline, ByteBuffer &data)
static void WriteMovementForceWithDirection(MovementForce const &movementForce, ByteBuffer &data, Position const *objectPosition=nullptr)
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > Pos
void InitializeSplineData(::Movement::MoveSpline const &moveSpline)
Duration< Milliseconds, uint32 > LifetimeMs
Duration< Milliseconds, uint32 > LifetimeMs
Optional< MoveKnockBackSpeeds > Speeds
TaggedPosition< Position::XY > Direction
WorldPacket const * Write() override
std::vector< MoveStateChange > StateChanges
uint32 SequenceIndex
Unit movement packet index, incremented each time.
WorldPacket const * Write() override
uint32 SequenceIndex
Unit movement packet index, incremented each time.
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
Optional< VehicleTeleport > Vehicle
TaggedPosition< Position::XYZ > Pos
Duration< Milliseconds, uint32 > LifetimeMs
WorldPacket const * Write() override
std::span< MovementForce const > MovementForces
TaggedPosition< Position::XYZ > MovementOffset
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > OldMapPosition
Optional< ShipTransferPending > Ship
WorldPacket const * Write() override
ByteBuffer & operator>>(ByteBuffer &data, MovementForce &movementForce)
STL namespace.
TaggedPosition< Position::XY > Direction
uint32 ExtraDuration
Duration of the transition (unit does not move during this time)
std::array< MonsterSplineSpellVisualNodeInfo, 16 > NodeInfo
std::vector< MonsterSplineFilterKey > FilterKeys
Optional< StateChangeRangeInfo > Range
MoveStateChange(OpcodeServer messageId, uint32 sequenceIndex)
Optional< CollisionHeightInfo > CollisionHeight
Optional< MovementForce > MovementForce_
std::vector< TaggedPosition< Position::XYZ > > Points
Optional< MonsterSplineTurnData > TurnData
Optional< MonsterSplineClientSpellVisualData > SpellVisualData
Optional< MonsterSplineSpellEffectExtraData > SpellEffectExtraData
Optional< MonsterSplineJumpExtraData > JumpExtraData
std::vector< TaggedPosition< Position::PackedXYZ > > PackedDeltas
Optional< MonsterSplineAnimTierTransition > AnimTierTransition
Optional< MonsterSplineFilter > SplineFilter
TaggedPosition< Position::XYZ > FaceSpot
uint32 ID
gameobject_template.entry of the transport the player is teleporting on
int32 OriginMapID
Map id the player is currently on (before teleport)
TaggedPosition< Position::XYZO > Pos