aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-06-05 17:57:19 +0200
committerShauren <shauren.trinity@gmail.com>2016-06-05 17:57:19 +0200
commit737469cfaaaf45fe700ae8a9673015b88afd0b00 (patch)
tree0954ecdef5e57f95436a491df7e371e77c2875a3
parent6b1c85a6762e6343e5b1787db73e0b200c5af70d (diff)
Core/PacketIO: Update movement packets
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp18
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h25
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp6
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.h2
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInitArgs.h4
-rw-r--r--src/server/game/Movement/Spline/MovementUtil.cpp24
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp123
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h35
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp110
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp8
10 files changed, 178 insertions, 177 deletions
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index c58cc3d9e55..b16bee6aec0 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -43,11 +43,11 @@ Location MoveSpline::ComputePosition() const
else if (splineflags.falling)
computeFallElevation(c.z);
- if (splineflags.done && splineflags.isFacing())
+ if (splineflags.done && facing.type != MONSTER_MOVE_NORMAL)
{
- if (splineflags.final_angle)
+ if (facing.type == MONSTER_MOVE_FACING_ANGLE)
c.orientation = facing.angle;
- else if (splineflags.final_point)
+ else if (facing.type == MONSTER_MOVE_FACING_SPOT)
c.orientation = std::atan2(facing.f.y - c.y, facing.f.x - c.x);
//nothing to do for MoveSplineFlag::Final_Target flag
}
@@ -165,7 +165,7 @@ void MoveSpline::Initialize(MoveSplineInitArgs const& args)
time_passed = 0;
vertical_acceleration = 0.f;
effect_start_time = 0;
- splineIsFacingOnly = args.path.size() == 2 && args.flags & MoveSplineFlag::Mask_Final_Facing && ((args.path[1] - args.path[0]).length() < 0.1f);
+ splineIsFacingOnly = args.path.size() == 2 && args.facing.type != MONSTER_MOVE_NORMAL && ((args.path[1] - args.path[0]).length() < 0.1f);
// Check if its a stop spline
if (args.flags.done)
@@ -178,7 +178,7 @@ void MoveSpline::Initialize(MoveSplineInitArgs const& args)
// init parabolic / animation
// spline initialized, duration known and i able to compute parabolic acceleration
- if (args.flags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation))
+ if (args.flags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation | MoveSplineFlag::Unknown6))
{
effect_start_time = Duration() * args.time_perc;
if (args.flags.parabolic && effect_start_time < Duration())
@@ -217,7 +217,7 @@ bool MoveSplineInitArgs::Validate(Unit* unit) const
// check path lengths - why are we even starting such short movement?
bool MoveSplineInitArgs::_checkPathLengths() const
{
- if (path.size() > 2 || !(flags & MoveSplineFlag::Mask_Final_Facing))
+ if (path.size() > 2 || facing.type == MONSTER_MOVE_NORMAL)
for (uint32 i = 0; i < path.size() - 1; ++i)
if ((path[i + 1] - path[i]).length() < 0.1f)
return false;
@@ -274,11 +274,11 @@ std::string MoveSpline::ToString() const
str << "MoveSpline" << std::endl;
str << "spline Id: " << GetId() << std::endl;
str << "flags: " << splineflags.ToString() << std::endl;
- if (splineflags.final_angle)
+ if (facing.type == MONSTER_MOVE_FACING_ANGLE)
str << "facing angle: " << facing.angle;
- else if (splineflags.final_target)
+ else if (facing.type == MONSTER_MOVE_FACING_TARGET)
str << "facing target: " << facing.target.ToString();
- else if (splineflags.final_point)
+ else if (facing.type == MONSTER_MOVE_FACING_SPOT)
str << "facing point: " << facing.f.x << " " << facing.f.y << " " << facing.f.z;
str << std::endl;
str << "time passed: " << time_passed << std::endl;
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h
index acd0c94bbf1..94d0b7bc13f 100644
--- a/src/server/game/Movement/Spline/MoveSplineFlag.h
+++ b/src/server/game/Movement/Spline/MoveSplineFlag.h
@@ -56,20 +56,19 @@ namespace Movement
Unknown5 = 0x01000000, // NOT VERIFIED
Animation = 0x02000000, // Plays animation after some time passed
Parabolic = 0x04000000, // Affects elevation computation, can't be combined with Falling flag
- Final_Point = 0x08000000,
- Final_Target = 0x10000000,
- Final_Angle = 0x20000000,
- Unknown6 = 0x40000000, // NOT VERIFIED
- Unknown7 = 0x80000000, // NOT VERIFIED
+ Unknown6 = 0x08000000, // NOT VERIFIED
+ Unknown7 = 0x10000000, // NOT VERIFIED
+ Unknown8 = 0x20000000, // NOT VERIFIED
+ Unknown9 = 0x40000000, // NOT VERIFIED
+ Unknown10 = 0x80000000, // NOT VERIFIED
// Masks
- Mask_Final_Facing = Final_Point | Final_Target | Final_Angle,
// animation ids stored here, see AnimType enum, used with Animation flag
Mask_Animations = 0x7,
// flags that shouldn't be appended into SMSG_MONSTER_MOVE\SMSG_MONSTER_MOVE_TRANSPORT packet, should be more probably
- Mask_No_Monster_Move = Mask_Final_Facing | Mask_Animations | Done,
+ Mask_No_Monster_Move = Mask_Animations | Done,
// Unused, not suported flags
- Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown0|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|Unknown6|Unknown7
+ Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown0|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|Unknown6|Unknown7|Unknown8|Unknown9|Unknown10
};
inline uint32& raw() { return (uint32&)*this; }
@@ -83,7 +82,6 @@ namespace Movement
bool isSmooth() const { return (raw() & Catmullrom) != 0; }
bool isLinear() const { return !isSmooth(); }
- bool isFacing() const { return (raw() & Mask_Final_Facing) != 0; }
uint8 getAnimationId() const { return animId; }
bool hasAllFlags(uint32 f) const { return (raw() & f) == f; }
@@ -102,9 +100,6 @@ namespace Movement
void EnableFlying() { raw() = (raw() & ~(Falling)) | Flying; }
void EnableFalling() { raw() = (raw() & ~(Mask_Animations | Parabolic | Animation | Flying)) | Falling; }
void EnableCatmullRom() { raw() = (raw() & ~SmoothGroundPath) | Catmullrom; }
- void EnableFacingPoint() { raw() = (raw() & ~Mask_Final_Facing) | Final_Point; }
- void EnableFacingAngle() { raw() = (raw() & ~Mask_Final_Facing) | Final_Angle; }
- void EnableFacingTarget() { raw() = (raw() & ~Mask_Final_Facing) | Final_Target; }
void EnableTransportEnter() { raw() = (raw() & ~TransportExit) | TransportEnter; }
void EnableTransportExit() { raw() = (raw() & ~TransportEnter) | TransportExit; }
@@ -133,11 +128,11 @@ namespace Movement
bool unknown5 : 1;
bool animation : 1;
bool parabolic : 1;
- bool final_point : 1;
- bool final_target : 1;
- bool final_angle : 1;
bool unknown6 : 1;
bool unknown7 : 1;
+ bool unknown8 : 1;
+ bool unknown9 : 1;
+ bool unknown10 : 1;
};
#pragma pack(pop)
}
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index 114f683b601..f4d5a449e57 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -161,6 +161,7 @@ namespace Movement
WorldPackets::Movement::MonsterMove packet;
packet.MoverGUID = unit->GetGUID();
packet.Pos = loc;
+ packet.SplineData.StopDistanceTolerance = 2;
packet.SplineData.ID = move_spline.GetId();
if (transport)
@@ -185,8 +186,9 @@ namespace Movement
void MoveSplineInit::SetFacing(const Unit* target)
{
- args.flags.EnableFacingTarget();
+ args.facing.angle = unit->GetAngle(target);
args.facing.target = target->GetGUID();
+ args.facing.type = MONSTER_MOVE_FACING_TARGET;
}
void MoveSplineInit::SetFacing(float angle)
@@ -200,7 +202,7 @@ namespace Movement
}
args.facing.angle = G3D::wrap(angle, 0.f, (float)G3D::twoPi());
- args.flags.EnableFacingAngle();
+ args.facing.type = MONSTER_MOVE_FACING_ANGLE;
}
void MoveSplineInit::MoveTo(const Vector3& dest, bool generatePath, bool forceDestination)
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h
index 421a8d6b06c..f0b5e9aaac0 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.h
+++ b/src/server/game/Movement/Spline/MoveSplineInit.h
@@ -200,7 +200,7 @@ namespace Movement
args.facing.f.x = finalSpot.x;
args.facing.f.y = finalSpot.y;
args.facing.f.z = finalSpot.z;
- args.flags.EnableFacingPoint();
+ args.facing.type = MONSTER_MOVE_FACING_SPOT;
}
inline void MoveSplineInit::DisableTransportPathTransformations() { args.TransformForTransport = false; }
diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h
index 0b1851f2a1a..60cb4db8b55 100644
--- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h
+++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h
@@ -35,7 +35,9 @@ namespace Movement
ObjectGuid target;
float angle;
- FacingInfo() : angle(0.0f) { }
+ MonsterMoveType type;
+
+ FacingInfo() : angle(0.0f), type(MONSTER_MOVE_NORMAL) { }
};
struct MoveSplineInitArgs
diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp
index a7aa84f3680..745802f0138 100644
--- a/src/server/game/Movement/Spline/MovementUtil.cpp
+++ b/src/server/game/Movement/Spline/MovementUtil.cpp
@@ -149,7 +149,7 @@ namespace Movement
STRINGIZE(Done ), // 0x00000020
STRINGIZE(Falling ), // 0x00000040 // Not Compartible With Trajectory Movement
STRINGIZE(No_Spline ), // 0x00000080
- STRINGIZE(Unknown2 ), // 0x00000100
+ STRINGIZE(Unknown1 ), // 0x00000100
STRINGIZE(Flying ), // 0x00000200 // Smooth Movement(Catmullrom Interpolation Mode), Flying Animation
STRINGIZE(OrientationFixed ), // 0x00000400 // Model Orientation Fixed
STRINGIZE(Catmullrom ), // 0x00000800 // Used Catmullrom Interpolation Mode
@@ -158,21 +158,21 @@ namespace Movement
STRINGIZE(Frozen ), // 0x00004000
STRINGIZE(TransportEnter ), // 0x00008000
STRINGIZE(TransportExit ), // 0x00010000
- STRINGIZE(Unknown3 ), // 0x00020000
- STRINGIZE(Unknown4 ), // 0x00040000
+ STRINGIZE(Unknown2 ), // 0x00020000
+ STRINGIZE(Unknown3 ), // 0x00040000
STRINGIZE(OrientationInversed), // 0x00080000 // Appears With Runmode Flag, Nodes ), // 1, Handles Orientation
STRINGIZE(SmoothGroundPath ), // 0x00100000
STRINGIZE(Walkmode ), // 0x00200000
STRINGIZE(UncompressedPath ), // 0x00400000
- STRINGIZE(Unknown6 ), // 0x00800000
- STRINGIZE(Animation ), // 0x01000000 // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement
- STRINGIZE(Parabolic ), // 0x02000000 // Not Compartible With Fall Movement
- STRINGIZE(Final_Point ), // 0x04000000
- STRINGIZE(Final_Target ), // 0x08000000
- STRINGIZE(Final_Angle ), // 0x10000000
- STRINGIZE(Unknown7 ), // 0x20000000
- STRINGIZE(Unknown8 ), // 0x40000000
- STRINGIZE(Unknown9 ), // 0x80000000
+ STRINGIZE(Unknown4 ), // 0x00800000
+ STRINGIZE(Unknown5 ), // 0x01000000
+ STRINGIZE(Animation ), // 0x02000000 // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement
+ STRINGIZE(Parabolic ), // 0x04000000 // Not Compartible With Fall Movement
+ STRINGIZE(Unknown6 ), // 0x08000000
+ STRINGIZE(Unknown7 ), // 0x10000000
+ STRINGIZE(Unknown8 ), // 0x20000000
+ STRINGIZE(Unknown9 ), // 0x40000000
+ STRINGIZE(Unknown10 ), // 0x80000000
};
template<class Flags, int N>
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index fde1b1bf875..4da78116d90 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -186,8 +186,8 @@ void WorldPackets::Movement::ClientPlayerMovement::Read()
ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MonsterSplineFilterKey const& monsterSplineFilterKey)
{
- data << monsterSplineFilterKey.Idx;
- data << monsterSplineFilterKey.Speed;
+ data << int16(monsterSplineFilterKey.Idx);
+ data << uint16(monsterSplineFilterKey.Speed);
return data;
}
@@ -195,10 +195,10 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MonsterSplineFi
ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MonsterSplineFilter const& monsterSplineFilter)
{
data << uint32(monsterSplineFilter.FilterKeys.size());
- data << monsterSplineFilter.BaseSpeed;
- data << monsterSplineFilter.StartOffset;
- data << monsterSplineFilter.DistToPrevFilterKey;
- data << monsterSplineFilter.AddedToStart;
+ data << float(monsterSplineFilter.BaseSpeed);
+ data << int16(monsterSplineFilter.StartOffset);
+ data << float(monsterSplineFilter.DistToPrevFilterKey);
+ data << int16(monsterSplineFilter.AddedToStart);
for (WorldPackets::Movement::MonsterSplineFilterKey const& filterKey : monsterSplineFilter.FilterKeys)
data << filterKey;
data.WriteBits(monsterSplineFilter.FilterFlags, 2);
@@ -207,28 +207,38 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MonsterSplineFi
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineSpellEffectExtraData const& spellEffectExtraData)
+{
+ data << spellEffectExtraData.field_1;
+ data << uint32(spellEffectExtraData.field_2);
+ data << uint32(spellEffectExtraData.field_3);
+ data << uint32(spellEffectExtraData.field_4);
+
+ return data;
+}
+
ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline const& movementSpline)
{
- data << movementSpline.Flags;
- data << movementSpline.AnimTier;
- data << movementSpline.TierTransStartTime;
- data << movementSpline.Elapsed;
- data << movementSpline.MoveTime;
- data << movementSpline.JumpGravity;
- data << movementSpline.SpecialTime;
- data << int32(movementSpline.Points.size());
- data << movementSpline.Mode;
- data << movementSpline.VehicleExitVoluntary;
+ data << uint32(movementSpline.Flags);
+ data << uint8(movementSpline.AnimTier);
+ data << uint32(movementSpline.TierTransStartTime);
+ data << int32(movementSpline.Elapsed);
+ data << uint32(movementSpline.MoveTime);
+ data << float(movementSpline.JumpGravity);
+ data << uint32(movementSpline.SpecialTime);
+ data << uint32(movementSpline.Points.size());
+ data << uint8(movementSpline.Mode);
+ data << uint8(movementSpline.VehicleExitVoluntary);
data << movementSpline.TransportGUID;
- data << movementSpline.VehicleSeat;
- data << int32(movementSpline.PackedDeltas.size());
+ data << int8(movementSpline.VehicleSeat);
+ data << uint32(movementSpline.PackedDeltas.size());
for (G3D::Vector3 const& pos : movementSpline.Points)
data << pos;
for (G3D::Vector3 const& pos : movementSpline.PackedDeltas)
data.appendPackXYZ(pos.x, pos.y, pos.z);
data.WriteBits(movementSpline.Face, 2);
data.WriteBit(movementSpline.SplineFilter.is_initialized());
- data.WriteBit(0); // New Legion bit
+ data.WriteBit(movementSpline.SpellEffectExtraData.is_initialized());
data.FlushBits();
if (movementSpline.SplineFilter)
@@ -240,20 +250,16 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
data << movementSpline.FaceSpot;
break;
case ::Movement::MONSTER_MOVE_FACING_TARGET:
- data << movementSpline.FaceDirection;
+ data << float(movementSpline.FaceDirection);
data << movementSpline.FaceGUID;
break;
case ::Movement::MONSTER_MOVE_FACING_ANGLE:
- data << movementSpline.FaceDirection;
+ data << float(movementSpline.FaceDirection);
break;
}
- // New legion block, controlled by new bit above
- // if (false)
- // {
- // data << ObjectGuid::Empty;
- // data << 0 << 0 << 0;
- // }
+ if (movementSpline.SpellEffectExtraData)
+ data << *movementSpline.SpellEffectExtraData;
return data;
}
@@ -263,9 +269,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementMonster
data << movementMonsterSpline.ID;
data << movementMonsterSpline.Destination;
data.WriteBit(movementMonsterSpline.CrzTeleport);
-
- // Unk bits. 0 if monster is moving, 1 or 2 if stopped
- data.WriteBits(movementMonsterSpline.Move.Flags ? 0 : 2, 2);
+ data.WriteBits(movementMonsterSpline.StopDistanceTolerance, 3);
data << movementMonsterSpline.Move;
@@ -296,20 +300,12 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(::
data << uint32(moveSpline.getPath().size());
data.append<G3D::Vector3>(&moveSpline.getPath()[0], moveSpline.getPath().size());
- uint8 face = ::Movement::MONSTER_MOVE_NORMAL;
- if (splineFlags.final_angle)
- face = ::Movement::MONSTER_MOVE_FACING_ANGLE;
- else if (splineFlags.final_target)
- face = ::Movement::MONSTER_MOVE_FACING_TARGET;
- else if (splineFlags.final_point)
- face = ::Movement::MONSTER_MOVE_FACING_SPOT;
-
- data.WriteBits(face, 2); // Face
+ data.WriteBits(moveSpline.facing.type, 2); // Face
bool HasJumpGravity = data.WriteBit(moveSpline.splineflags & (::Movement::MoveSplineFlag::Parabolic | ::Movement::MoveSplineFlag::Animation)); // HasJumpGravity
bool HasSpecialTime = data.WriteBit((moveSpline.splineflags & ::Movement::MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration()); // HasSpecialTime
data.WriteBits(uint8(moveSpline.spline.mode()), 2); // Mode
data.WriteBit(0); // HasSplineFilter
- data.WriteBit(0); // Unknown_1
+ data.WriteBit(0); // HasSpellEffectExtraData
data.FlushBits();
//if (HasSplineFilterKey)
@@ -325,7 +321,7 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(::
// data.FlushBits();
//}
- switch (face)
+ switch (moveSpline.facing.type)
{
case ::Movement::MONSTER_MOVE_FACING_SPOT:
data << moveSpline.facing.f; // FaceSpot
@@ -344,7 +340,7 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(::
if (HasSpecialTime)
data << uint32(moveSpline.effect_start_time); // SpecialTime
- //if (Unknown_1)
+ //if (HasSpellEffectExtraData)
//{
// data << ObjectGuid();
// data << uint32();
@@ -362,25 +358,10 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
::Movement::MoveSplineFlag splineFlags = moveSpline.splineflags;
splineFlags.enter_cycle = moveSpline.isCyclic();
movementSpline.Flags = uint32(splineFlags & uint32(~::Movement::MoveSplineFlag::Mask_No_Monster_Move));
-
- switch (moveSpline.splineflags & ::Movement::MoveSplineFlag::Mask_Final_Facing)
- {
- case ::Movement::MoveSplineFlag::Final_Point:
- movementSpline.Face = ::Movement::MONSTER_MOVE_FACING_SPOT;
- movementSpline.FaceSpot = moveSpline.facing.f;
- break;
- case ::Movement::MoveSplineFlag::Final_Target:
- movementSpline.Face = ::Movement::MONSTER_MOVE_FACING_TARGET;
- movementSpline.FaceGUID = moveSpline.facing.target;
- break;
- case ::Movement::MoveSplineFlag::Final_Angle:
- movementSpline.Face = ::Movement::MONSTER_MOVE_FACING_ANGLE;
- movementSpline.FaceDirection = moveSpline.facing.angle;
- break;
- default:
- movementSpline.Face = ::Movement::MONSTER_MOVE_NORMAL;
- break;
- }
+ movementSpline.Face = moveSpline.facing.type;
+ movementSpline.FaceDirection = moveSpline.facing.angle;
+ movementSpline.FaceGUID = moveSpline.facing.target;
+ movementSpline.FaceSpot = moveSpline.facing.f;
if (splineFlags.animation)
{
@@ -396,6 +377,9 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS
movementSpline.SpecialTime = moveSpline.effect_start_time;
}
+ if (splineFlags.unknown6)
+ movementSpline.SpecialTime = moveSpline.effect_start_time;
+
::Movement::Spline<int32> const& spline = moveSpline.spline;
std::vector<G3D::Vector3> const& array = spline.getPoints();
@@ -506,6 +490,7 @@ WorldPacket const* WorldPackets::Movement::TransferAborted::Write()
{
_worldPacket << uint32(MapID);
_worldPacket << uint8(Arg);
+ _worldPacket << int32(MapDifficultyXConditionID);
_worldPacket.WriteBits(TransfertAbort, 5);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -513,22 +498,19 @@ WorldPacket const* WorldPackets::Movement::TransferAborted::Write()
WorldPacket const* WorldPackets::Movement::NewWorld::Write()
{
- _worldPacket << MapID;
+ _worldPacket << int32(MapID);
_worldPacket << Pos.PositionXYZOStream();
- _worldPacket << Reason;
- // New in 7.x - Does something movement-related (velocities ???)
- _worldPacket << float(0.0f);
- _worldPacket << float(0.0f);
- _worldPacket << float(0.0f);
+ _worldPacket << uint32(Reason);
+ _worldPacket << MovementOffset.PositionXYZStream();
return &_worldPacket;
}
WorldPacket const* WorldPackets::Movement::MoveTeleport::Write()
{
_worldPacket << MoverGUID;
- _worldPacket << SequenceIndex;
+ _worldPacket << uint32(SequenceIndex);
_worldPacket << Pos.PositionXYZStream();
- _worldPacket << Facing;
+ _worldPacket << float(Facing);
_worldPacket << uint8(0); //! New in 7.x (gets written into movement queue node)
_worldPacket.WriteBit(Vehicle.is_initialized());
@@ -537,7 +519,7 @@ WorldPacket const* WorldPackets::Movement::MoveTeleport::Write()
if (Vehicle)
{
- _worldPacket << Vehicle->VehicleSeatIndex;
+ _worldPacket << uint8(Vehicle->VehicleSeatIndex);
_worldPacket.WriteBit(Vehicle->VehicleExitVoluntary);
_worldPacket.WriteBit(Vehicle->VehicleExitTeleport);
_worldPacket.FlushBits();
@@ -748,6 +730,7 @@ WorldPacket const* WorldPackets::Movement::SummonRequest::Write()
_worldPacket << SummonerGUID;
_worldPacket << uint32(SummonerVirtualRealmAddress);
_worldPacket << int32(AreaID);
+ _worldPacket << uint8(Reason);
_worldPacket.WriteBit(SkipStartingArea);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 6e1337e2912..8a89dba4c79 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -54,8 +54,8 @@ namespace WorldPackets
struct MonsterSplineFilterKey
{
- int16 Idx = 0;
- int16 Speed = 0;
+ int16 Idx = 0;
+ uint16 Speed = 0;
};
struct MonsterSplineFilter
@@ -68,13 +68,21 @@ namespace WorldPackets
int16 AddedToStart = 0;
};
+ struct MonsterSplineSpellEffectExtraData
+ {
+ ObjectGuid field_1;
+ uint32 field_2;
+ uint32 field_3;
+ uint32 field_4;
+ };
+
struct MovementSpline
{
uint32 Flags = 0; // Spline flags
uint8 Face = 0; // Movement direction (see MonsterMoveType enum)
uint8 AnimTier = 0;
uint32 TierTransStartTime = 0;
- uint32 Elapsed = 0;
+ int32 Elapsed = 0;
uint32 MoveTime = 0;
float JumpGravity = 0.0f;
uint32 SpecialTime = 0;
@@ -82,9 +90,10 @@ namespace WorldPackets
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
uint8 VehicleExitVoluntary = 0;
ObjectGuid TransportGUID;
- uint8 VehicleSeat = 255;
+ int8 VehicleSeat = -1;
std::vector<G3D::Vector3> PackedDeltas;
Optional<MonsterSplineFilter> SplineFilter;
+ Optional<MonsterSplineSpellEffectExtraData> SpellEffectExtraData;
float FaceDirection = 0.0f;
ObjectGuid FaceGUID;
G3D::Vector3 FaceSpot;
@@ -95,6 +104,7 @@ namespace WorldPackets
uint32 ID = 0;
G3D::Vector3 Destination;
bool CrzTeleport = false;
+ uint8 StopDistanceTolerance = 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)
MovementSpline Move;
};
@@ -194,25 +204,27 @@ namespace WorldPackets
class TransferAborted final : public ServerPacket
{
public:
- TransferAborted() : ServerPacket(SMSG_TRANSFER_ABORTED, 4 + 1 + 4) { }
+ TransferAborted() : ServerPacket(SMSG_TRANSFER_ABORTED, 4 + 1 + 4 + 1) { }
WorldPacket const* Write() override;
- uint32 TransfertAbort = 0;
- uint8 Arg = 0;
uint32 MapID = 0;
+ uint8 Arg = 0;
+ int32 MapDifficultyXConditionID;
+ uint32 TransfertAbort = 0;
};
class NewWorld final : public ServerPacket
{
public:
- NewWorld() : ServerPacket(SMSG_NEW_WORLD, 24) { }
+ NewWorld() : ServerPacket(SMSG_NEW_WORLD, 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4) { }
WorldPacket const* Write() override;
int32 MapID = 0;
uint32 Reason = 0;
Position Pos;
+ Position MovementOffset; // Adjusts all pending movement events by this offset
};
class WorldPortResponse final : public ClientPacket
@@ -475,6 +487,12 @@ namespace WorldPackets
class SummonRequest final : public ServerPacket
{
public:
+ enum SummonReason : uint8
+ {
+ SPELL = 0,
+ SCENARIO = 1
+ };
+
SummonRequest() : ServerPacket(SMSG_SUMMON_REQUEST, 16 + 4 + 4 + 1) { }
WorldPacket const* Write() override;
@@ -482,6 +500,7 @@ namespace WorldPackets
ObjectGuid SummonerGUID;
uint32 SummonerVirtualRealmAddress = 0;
int32 AreaID = 0;
+ SummonReason Reason = SPELL;
bool SkipStartingArea = false;
};
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index d04bda1a0d9..6519bd63cf1 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -477,67 +477,67 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MOUNT_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOUNT_SPECIAL_ANIM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::MountSpecial, &WorldSession::HandleMountSpecialAnimOpcode);
DEFINE_HANDLER(CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_MOVE_CHANGE_TRANSPORT, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_CHANGE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_CHANGE_VEHICLE_SEATS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::MoveChangeVehicleSeats, &WorldSession::HandleMoveChangeVehicleSeats);
DEFINE_HANDLER(CMSG_MOVE_CHARM_TELEPORT_CHEAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_MOVE_DISMISS_VEHICLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::MoveDismissVehicle, &WorldSession::HandleMoveDismissVehicle);
- DEFINE_HANDLER(CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_FALL_LAND, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_FALL_RESET, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_ROOT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_UNROOT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
- DEFINE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_HEARTBEAT, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_JUMP, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_KNOCK_BACK_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMoveKnockBackAck);
+ DEFINE_HANDLER(CMSG_MOVE_DISMISS_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::MoveDismissVehicle, &WorldSession::HandleMoveDismissVehicle);
+ DEFINE_HANDLER(CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_FALL_LAND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_FALL_RESET, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementSpeedAck, &WorldSession::HandleForceSpeedChangeAck);
+ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_JUMP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_KNOCK_BACK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMoveKnockBackAck);
DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCES, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MoveSetCollisionHeightAck, &WorldSession::HandleSetCollisionHeightAck);
- DEFINE_HANDLER(CMSG_MOVE_SET_FACING, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
- DEFINE_HANDLER(CMSG_MOVE_SET_PITCH, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MoveSetCollisionHeightAck, &WorldSession::HandleSetCollisionHeightAck);
+ DEFINE_HANDLER(CMSG_MOVE_SET_FACING, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_SET_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_SET_RELATIVE_POSITION, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_MOVE_SET_RUN_MODE, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_SET_RUN_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_SET_VEHICLE_REC_ID_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Vehicle::MoveSetVehicleRecIdAck, &WorldSession::HandleMoveSetVehicleRecAck);
- DEFINE_HANDLER(CMSG_MOVE_SET_WALK_MODE, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_SPLINE_DONE, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MoveSplineDone, &WorldSession::HandleMoveSplineDoneOpcode);
- DEFINE_HANDLER(CMSG_MOVE_START_ASCEND, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_BACKWARD, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_DESCEND, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_FORWARD, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_PITCH_DOWN, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_PITCH_UP, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_STRAFE_LEFT, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_STRAFE_RIGHT, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_SWIM, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_TURN_LEFT, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_START_TURN_RIGHT, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_STOP, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_STOP_ASCEND, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_STOP_PITCH, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_STOP_STRAFE, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_STOP_SWIM, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_STOP_TURN, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
- DEFINE_HANDLER(CMSG_MOVE_TELEPORT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MoveTeleportAck, &WorldSession::HandleMoveTeleportAck);
+ DEFINE_HANDLER(CMSG_MOVE_SET_WALK_MODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_SPLINE_DONE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MoveSplineDone, &WorldSession::HandleMoveSplineDoneOpcode);
+ DEFINE_HANDLER(CMSG_MOVE_START_ASCEND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_BACKWARD, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_DESCEND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_FORWARD, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_PITCH_DOWN, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_PITCH_UP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_STRAFE_LEFT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_STRAFE_RIGHT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_TURN_LEFT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_START_TURN_RIGHT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_STOP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_STOP_ASCEND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_STOP_PITCH, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_STOP_STRAFE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_STOP_SWIM, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_STOP_TURN, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::ClientPlayerMovement, &WorldSession::HandleMovementOpcodes);
+ DEFINE_HANDLER(CMSG_MOVE_TELEPORT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MoveTeleportAck, &WorldSession::HandleMoveTeleportAck);
DEFINE_HANDLER(CMSG_MOVE_TELEPORT_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Movement::MoveTimeSkipped, &WorldSession::HandleMoveTimeSkippedOpcode);
DEFINE_HANDLER(CMSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Movement::MovementAckMessage, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_NEUTRAL_PLAYER_SELECT_FACTION, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_NEXT_CINEMATIC_CAMERA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Misc::NextCinematicCamera, &WorldSession::HandleNextCinematicCamera);
DEFINE_HANDLER(CMSG_OBJECT_UPDATE_FAILED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::ObjectUpdateFailed, &WorldSession::HandleObjectUpdateFailedOpcode);
@@ -1395,7 +1395,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_RECEIVED_MAIL, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OFFER_PETITION_ERROR, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_MONSTER_MOVE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_MONSTER_MOVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_CONTAINER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1653,7 +1653,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_STREAMING_MOVIES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_CANCEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_REQUEST, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_REQUEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPERCEDED_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPPRESS_NPC_GREETINGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_COMMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1674,7 +1674,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRADE_UPDATED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_BUY_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSMOG_COLLECTION_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index dafe9a214d5..dd087a63146 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -895,12 +895,15 @@ public:
static bool HandleUnstuckCommand(ChatHandler* handler, char const* args)
{
+#define SPELL_UNSTUCK_ID 7355
+#define SPELL_UNSTUCK_VISUAL 2683
+
// No args required for players
if (handler->GetSession() && !handler->GetSession()->HasPermission(rbac::RBAC_PERM_COMMANDS_USE_UNSTUCK_WITH_ARGS))
{
// 7355: "Stuck"
if (Player* player = handler->GetSession()->GetPlayer())
- player->CastSpell(player, 7355, false);
+ player->CastSpell(player, SPELL_UNSTUCK_ID, false);
return true;
}
@@ -921,9 +924,6 @@ public:
if (player->IsInFlight() || player->IsInCombat())
{
-#define SPELL_UNSTUCK_ID 7355
-#define SPELL_UNSTUCK_VISUAL 2683
-
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_UNSTUCK_ID);
if (!spellInfo)
return false;