29 bool hasFallData = hasFallDirection || movementInfo.
jump.
fallTime != 0;
30 bool hasSpline =
false;
31 bool hasInertia = movementInfo.
inertia.has_value();
32 bool hasAdvFlying = movementInfo.
advFlying.has_value();
35 data << movementInfo.
guid;
41 data << float(movementInfo.
pitch);
44 uint32 removeMovementForcesCount = 0;
45 data << removeMovementForcesCount;
55 data.
WriteBit(hasStandingOnGameObjectGUID);
70 if (hasStandingOnGameObjectGUID)
76 data << movementInfo.
inertia->force.PositionXYZStream();
82 data << float(movementInfo.
advFlying->forwardVelocity);
83 data << float(movementInfo.
advFlying->upVelocity);
108 data >> movementInfo.
guid;
109 data >> movementInfo.
flags;
110 data >> movementInfo.
flags2;
111 data >> movementInfo.
flags3;
112 data >> movementInfo.
time;
114 data >> movementInfo.
pitch;
117 uint32 removeMovementForcesCount;
118 data >> removeMovementForcesCount;
123 for (
uint32 i = 0; i < removeMovementForcesCount; ++i)
129 bool hasStandingOnGameObjectGUID = data.
ReadBit();
130 bool hasTransport = data.
ReadBit();
136 bool hasInertia = data.
ReadBit();
137 bool hasAdvFlying = data.
ReadBit();
142 if (hasStandingOnGameObjectGUID)
147 movementInfo.
inertia.emplace();
149 data >> movementInfo.
inertia->id;
150 data >> movementInfo.
inertia->force.PositionXYZStream();
151 data >> movementInfo.
inertia->lifetime;
158 data >> movementInfo.
advFlying->forwardVelocity;
159 data >> movementInfo.
advFlying->upVelocity;
169 bool hasFallDirection = data.
ReadBit();
170 if (hasFallDirection)
183 data >> transportInfo.
guid;
185 data >> transportInfo.
seat;
186 data >> transportInfo.
time;
188 bool hasPrevTime = data.
ReadBit();
189 bool hasVehicleId = data.
ReadBit();
202 bool hasPrevTime = transportInfo.
prevTime != 0;
203 bool hasVehicleId = transportInfo.
vehicleId != 0;
205 data << transportInfo.
guid;
210 data << transportInfo.
seat;
211 data << transportInfo.
time;
234 data <<
int16(monsterSplineFilterKey.
Idx);
243 data << float(monsterSplineFilter.
BaseSpeed);
321 switch (movementSpline.
Face)
358 data << movementMonsterSpline.
ID;
362 data << movementMonsterSpline.
Move;
375 dest = G3D::Vector3::zero();
377 data << dest.x << dest.y << dest.z;
417 data << float(moveSpline.
facing.
f.
x);
418 data << float(moveSpline.
facing.
f.
y);
419 data << float(moveSpline.
facing.
f.
z);
432 if (hasFadeObjectTime)
446 if (hasJumpExtraData)
482 data << movementForce.
ID;
483 data << movementForce.
Origin;
493 if (lengthSquared > 0.0f)
495 float mult = 1.0f / std::sqrt(lengthSquared) * movementForce.
Magnitude;
502 if (lengthSquared > minLengthSquared)
521 SplineData.ID = moveSpline.
m_Id;
563 std::vector<G3D::Vector3>
const& array = spline.
getPoints();
570 for (
uint32 i = 0; i < count; ++i)
571 movementSpline.
Points.emplace_back(array[i + 2].x, array[i + 2].y, array[i + 2].z);
576 movementSpline.
Points.emplace_back(array[1].x, array[1].y, array[1].z);
577 for (
uint32 i = 0; i < count; ++i)
578 movementSpline.
Points.emplace_back(array[i + 1].x, array[i + 1].y, array[i + 1].z);
584 G3D::Vector3
const* realPath = &spline.
getPoint(1);
586 movementSpline.
Points.emplace_back(realPath[lastIdx].x, realPath[lastIdx].y, realPath[lastIdx].z);
590 G3D::Vector3 middle = (realPath[0] + realPath[lastIdx]) / 2.f;
593 for (
uint32 i = 1; i < lastIdx; ++i)
595 G3D::Vector3 delta = middle - realPath[i];
596 movementSpline.
PackedDeltas.emplace_back(delta.x, delta.y, delta.z);
604 _worldPacket << MoverGUID;
606 _worldPacket << SplineData;
607 return &_worldPacket;
612 _worldPacket << Guid;
613 _worldPacket << float(SplineDist);
615 return &_worldPacket;
620 _worldPacket << MoverGUID;
621 _worldPacket << Speed;
622 return &_worldPacket;
627 _worldPacket << MoverGUID;
628 _worldPacket << SequenceIndex;
629 _worldPacket << Speed;
630 return &_worldPacket;
635 _worldPacket << *Status;
636 _worldPacket << Speed;
637 return &_worldPacket;
642 _worldPacket << MoverGUID;
643 return &_worldPacket;
648 _worldPacket << MoverGUID;
649 _worldPacket << SequenceIndex;
650 return &_worldPacket;
655 _worldPacket << *Status;
657 return &_worldPacket;
662 _worldPacket <<
int32(MapID);
663 _worldPacket << OldMapPosition;
664 _worldPacket.WriteBit(Ship.has_value());
665 _worldPacket.WriteBit(TransferSpellID.has_value());
668 _worldPacket <<
uint32(Ship->ID);
669 _worldPacket <<
int32(Ship->OriginMapID);
673 _worldPacket <<
int32(*TransferSpellID);
675 _worldPacket.FlushBits();
677 return &_worldPacket;
682 _worldPacket <<
uint32(MapID);
683 _worldPacket <<
uint8(Arg);
684 _worldPacket <<
int32(MapDifficultyXConditionID);
685 _worldPacket.WriteBits(TransfertAbort, 6);
686 _worldPacket.FlushBits();
687 return &_worldPacket;
692 data << teleportLocation.
Pos;
701 _worldPacket <<
int32(MapID);
703 _worldPacket <<
uint32(Reason);
704 _worldPacket << MovementOffset;
705 return &_worldPacket;
710 _worldPacket << MoverGUID;
711 _worldPacket <<
uint32(SequenceIndex);
713 _worldPacket << float(Facing);
714 _worldPacket <<
uint8(PreloadWorld);
716 _worldPacket.WriteBit(TransportGUID.has_value());
717 _worldPacket.WriteBit(
Vehicle.has_value());
718 _worldPacket.FlushBits();
723 _worldPacket.WriteBit(
Vehicle->VehicleExitVoluntary);
724 _worldPacket.WriteBit(
Vehicle->VehicleExitTeleport);
725 _worldPacket.FlushBits();
729 _worldPacket << *TransportGUID;
731 return &_worldPacket;
742 data >> movementForce.
ID;
743 data >> movementForce.
Origin;
755 _worldPacket << *Status;
758 _worldPacket.WriteBit(WalkSpeed.has_value());
759 _worldPacket.WriteBit(RunSpeed.has_value());
760 _worldPacket.WriteBit(RunBackSpeed.has_value());
761 _worldPacket.WriteBit(SwimSpeed.has_value());
762 _worldPacket.WriteBit(SwimBackSpeed.has_value());
763 _worldPacket.WriteBit(FlightSpeed.has_value());
764 _worldPacket.WriteBit(FlightBackSpeed.has_value());
765 _worldPacket.WriteBit(TurnRate.has_value());
766 _worldPacket.WriteBit(PitchRate.has_value());
767 _worldPacket.FlushBits();
771 _worldPacket << force;
774 _worldPacket << *WalkSpeed;
777 _worldPacket << *RunSpeed;
780 _worldPacket << *RunBackSpeed;
783 _worldPacket << *SwimSpeed;
786 _worldPacket << *SwimBackSpeed;
789 _worldPacket << *FlightSpeed;
792 _worldPacket << *FlightBackSpeed;
795 _worldPacket << *TurnRate;
798 _worldPacket << *PitchRate;
800 return &_worldPacket;
805 _worldPacket >> MoverGUID;
806 _worldPacket >> AckIndex;
807 _worldPacket >> MoveTime;
825 _worldPacket >> Speed;
830 _worldPacket >> ActiveMover;
835 _worldPacket << MoverGUID;
837 return &_worldPacket;
858 _worldPacket << MoverGUID;
859 _worldPacket <<
uint32(SequenceIndex);
861 _worldPacket << Speeds;
863 return &_worldPacket;
868 _worldPacket << *Status;
870 return &_worldPacket;
876 bool hasSpeeds = _worldPacket.ReadBit();
880 _worldPacket >> *Speeds;
886 _worldPacket << MoverGUID;
887 _worldPacket <<
uint32(SequenceIndex);
888 _worldPacket << float(Height);
889 _worldPacket << float(
Scale);
890 _worldPacket <<
uint8(Reason);
891 _worldPacket <<
uint32(MountDisplayID);
892 _worldPacket <<
int32(ScaleDuration);
893 _worldPacket.FlushBits();
895 return &_worldPacket;
900 _worldPacket << *Status;
901 _worldPacket << float(Height);
902 _worldPacket << float(
Scale);
904 return &_worldPacket;
909 _worldPacket << MoverGUID;
910 _worldPacket << SequenceIndex;
911 _worldPacket << *
Force;
913 return &_worldPacket;
919 _worldPacket >>
Force;
924 _worldPacket << MoverGUID;
925 _worldPacket << SequenceIndex;
928 return &_worldPacket;
939 _worldPacket << *Status;
940 _worldPacket << *
Force;
942 return &_worldPacket;
947 _worldPacket << *Status;
948 _worldPacket << TriggerGUID;
950 return &_worldPacket;
955 _worldPacket >>
Data;
956 _worldPacket >> Height;
957 _worldPacket >> MountDisplayID;
963 _worldPacket >> MoverGUID;
964 _worldPacket >> TimeSkipped;
969 _worldPacket << MoverGUID;
970 _worldPacket << TimeSkipped;
972 return &_worldPacket;
977 _worldPacket >> SummonerGUID;
978 Accept = _worldPacket.ReadBit();
983 _worldPacket << Guid;
985 _worldPacket.FlushBits();
987 return &_worldPacket;
992 _worldPacket >> Status;
993 _worldPacket >> SplineID;
998 _worldPacket << SummonerGUID;
999 _worldPacket <<
uint32(SummonerVirtualRealmAddress);
1000 _worldPacket <<
int32(AreaID);
1001 _worldPacket <<
uint8(Reason);
1002 _worldPacket.WriteBit(SkipStartingArea);
1003 _worldPacket.FlushBits();
1005 return &_worldPacket;
1010 _worldPacket <<
uint32(SequenceIndex);
1011 _worldPacket.WriteBits(Reason, 2);
1012 _worldPacket.FlushBits();
1014 return &_worldPacket;
1019 _worldPacket >> SequenceIndex;
1024 _worldPacket <<
uint32(SequenceIndex);
1025 _worldPacket.WriteBits(Reason, 2);
1026 _worldPacket.FlushBits();
1028 return &_worldPacket;
1049 if (stateChange.
Speed)
1050 data << float(*stateChange.
Speed);
1060 data << float(stateChange.
KnockBack->HorzSpeed);
1061 data << stateChange.
KnockBack->Direction;
1062 data << float(stateChange.
KnockBack->InitVertSpeed);
1089 _worldPacket << MoverGUID;
1090 _worldPacket <<
uint32(StateChanges.size());
1092 _worldPacket << stateChange;
1094 return &_worldPacket;
1099 _worldPacket >> Ticks;
ByteBuffer & operator<<(ByteBuffer &data, MovementInfo const &movementInfo)
ByteBuffer & operator>>(ByteBuffer &data, MovementInfo &movementInfo)
@ MOVEMENTFLAG_FALLING_FAR
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
uint32 ReadBits(int32 bits)
void WriteBits(std::size_t value, int32 bits)
MySpline::ControlArray const & getPath() const
Optional< AnimTierTransition > anim_tier
float vertical_acceleration
Vector3 const & FinalDestination() const
MoveSplineFlag splineflags
Optional< SpellEffectExtraData > spell_effect_extra
ControlArray const & getPoints() const
Vector3 const & getPoint(index_type i) const
index_type getPointCount() const
static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const &moveSpline, ByteBuffer &data)
static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline< int32 > const &spline, ByteBuffer &data)
static void WriteMovementForceWithDirection(MovementForce const &movementForce, ByteBuffer &data, Position const *objectPosition=nullptr)
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
void InitializeSplineData(::Movement::MoveSpline const &moveSpline)
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
WorldPacket const * Write() override
@ MONSTER_MOVE_FACING_TARGET
@ MONSTER_MOVE_FACING_ANGLE
@ MONSTER_MOVE_FACING_SPOT
UpdateCollisionHeightReason
ByteBuffer & operator<<(ByteBuffer &data, Movement::MonsterSplineFilterKey const &monsterSplineFilterKey)
TaggedPosition< Position::XYZ > Origin
TaggedPosition< Position::XYZ > Direction
Optional< Inertia > inertia
Optional< ObjectGuid > standingOnGameObjectGUID
struct MovementInfo::JumpInfo jump
float stepUpStartElevation
struct MovementInfo::TransportInfo transport
bool HasMovementFlag(uint32 flag) const
Optional< AdvFlying > advFlying
struct Movement::FacingInfo::@323 f
Streamer< XYZO > PositionXYZOStream()
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr float GetExactDistSq(float x, float y, float z) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
float DistToPrevFilterKey
std::vector< MonsterSplineFilterKey > FilterKeys
Spells::SpellCastVisual Visual
std::array< Inner, 16 > Data
Optional< MovementForce > MovementForce_
Optional< int32 > MovementInertiaID
Optional< int32 > VehicleRecID
Optional< MoveSetCompoundState::SpeedRange > SpeedRange
Optional< KnockBackInfo > KnockBack
Optional< uint32 > MovementInertiaLifetimeMs
Optional< CollisionHeightInfo > CollisionHeight
Optional< ObjectGuid > MovementForceGUID
uint8 StopDistanceTolerance
std::vector< TaggedPosition< Position::XYZ > > Points
Optional< MonsterSplineSpellEffectExtraData > SpellEffectExtraData
Optional< MonsterSplineJumpExtraData > JumpExtraData
bool VehicleExitVoluntary
std::vector< TaggedPosition< Position::PackedXYZ > > PackedDeltas
Optional< MonsterSplineAnimTierTransition > AnimTierTransition
Optional< MonsterSplineUnknown901 > Unknown901
Optional< MonsterSplineFilter > SplineFilter
TaggedPosition< Position::XYZ > FaceSpot
TaggedPosition< Position::XYZO > Pos