aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp8
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp2
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp2
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h16
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp2
-rw-r--r--src/server/game/Movement/Spline/MovementPacketBuilder.cpp75
-rw-r--r--src/server/game/Movement/Spline/MovementPacketBuilder.h4
-rw-r--r--src/server/game/Movement/Spline/MovementUtil.cpp114
8 files changed, 113 insertions, 110 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 0baec0c2e95..1f859a585e6 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -306,6 +306,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
data->WriteBit(flags & UPDATEFLAG_UNK5);
data->WriteBit(0);
data->WriteBit(flags & UPDATEFLAG_TRANSPORT);
+ bool fullSpline = false;
if (flags & UPDATEFLAG_LIVING)
{
@@ -349,10 +350,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
data->WriteBit(guid[4]);
if (self->IsSplineEnabled())
- {
- data->WriteBit(1); // Has extended spline data
- Movement::PacketBuilder::WriteCreateBits(*self->movespline, *data);
- }
+ Movement::PacketBuilder::WriteCreateBits(*self->movespline, *data, fullSpline);
data->WriteBit(guid[6]);
if (movementFlagsExtra & MOVEMENTFLAG2_INTERPOLATED_TURNING)
@@ -435,7 +433,7 @@ void Object::_BuildMovementUpdate(ByteBuffer* data, uint16 flags) const
*data << float(self->m_movementInfo.splineElevation);
if (self->IsSplineEnabled())
- Movement::PacketBuilder::WriteCreateData(*self->movespline, *data);
+ Movement::PacketBuilder::WriteCreateData(*self->movespline, *data, fullSpline);
*data << float(self->GetPositionZMinusOffset());
data->WriteByteSeq(guid[5]);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index a41d5ddaa0c..f8c0142c801 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -18252,5 +18252,5 @@ void Unit::SendMovementCanFlyChange()
bool Unit::IsSplineEnabled() const
{
- return !movespline->Finalized();
+ return movespline->Initialized();
}
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index b1c25aedfd7..443946a8376 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -214,7 +214,7 @@ bool MoveSplineInitArgs::Validate() const
// each vertex offset packed into 11 bytes
bool MoveSplineInitArgs::_checkPathBounds() const
{
- if (!(flags & MoveSplineFlag::Mask_CatmullRom) && path.size() > 2)
+ if (!(flags & MoveSplineFlag::Catmullrom) && path.size() > 2)
{
enum{
MAX_OFFSET = (1 << 11) / 2,
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h
index c096d93e268..e6967878167 100644
--- a/src/server/game/Movement/Spline/MoveSplineFlag.h
+++ b/src/server/game/Movement/Spline/MoveSplineFlag.h
@@ -71,10 +71,8 @@ namespace Movement
Mask_Animations = 0xF,
// 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,
- // CatmullRom interpolation mode used
- Mask_CatmullRom = Catmullrom | Flying,
// Unused, not suported flags
- Mask_Unused = No_Spline|Enter_Cycle|Frozen|UncompressedPath|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|Unknown6|Unknown7|Unknown8|Unknown9,
+ Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|Unknown6|Unknown7|Unknown8|Unknown9,
};
inline uint32& raw() { return (uint32&)*this; }
@@ -86,7 +84,7 @@ namespace Movement
// Constant interface
- bool isSmooth() const { return raw() & Mask_CatmullRom; }
+ bool isSmooth() const { return raw() & Catmullrom; }
bool isLinear() const { return !isSmooth(); }
bool isFacing() const { return raw() & Mask_Final_Facing; }
@@ -99,14 +97,14 @@ namespace Movement
// Not constant interface
- void operator &= (uint32 f) { raw() &= f;}
- void operator |= (uint32 f) { raw() |= f;}
+ void operator &= (uint32 f) { raw() &= f; }
+ void operator |= (uint32 f) { raw() |= f; }
- void EnableAnimation(uint8 anim) { raw() = (raw() & ~(Mask_Animations | Falling | Parabolic)) | Animation | anim; }
+ void EnableAnimation(uint8 anim) { raw() = (raw() & ~(Mask_Animations | Falling | Parabolic)) | Animation | (anim & Mask_Animations); }
void EnableParabolic() { raw() = (raw() & ~(Mask_Animations | Falling | Animation)) | Parabolic; }
void EnableFalling() { raw() = (raw() & ~(Mask_Animations | Parabolic | Animation)) | Falling; }
- void EnableFlying() { raw() = (raw() & ~Catmullrom) | Flying; }
- void EnableCatmullRom() { raw() = (raw() & ~Flying) | Catmullrom; }
+ void EnableFlying() { raw() = Flying; }
+ void EnableCatmullRom() { raw() = Catmullrom | UncompressedPath; }
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; }
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index ba5c59c1078..780b341f6f2 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -123,7 +123,7 @@ namespace Movement
args.TransformForTransport = unit.GetTransGUID();
// mix existing state into new
args.flags.walkmode = unit.m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING);
- args.flags.flying = unit.m_movementInfo.HasMovementFlag((MovementFlags)(MOVEMENTFLAG_CAN_FLY|MOVEMENTFLAG_DISABLE_GRAVITY));
+ args.flags.flying = unit.m_movementInfo.HasMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY));
}
void MoveSplineInit::SetFacing(const Unit * target)
diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
index 6a3c2ba8eea..19a250f7885 100644
--- a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
+++ b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
@@ -140,8 +140,12 @@ namespace Movement
WriteLinearPath(spline, data);
}
- void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data)
+ void PacketBuilder::WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data, bool& fullData)
{
+ fullData = data.WriteBit(!moveSpline.Finalized());
+ if (!fullData)
+ return;
+
data.WriteBits(uint8(moveSpline.spline.mode()), 2);
data.WriteBit(moveSpline.splineflags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation));
data.WriteBits(moveSpline.getPath().size(), 22);
@@ -176,47 +180,50 @@ namespace Movement
data.WriteBits(moveSpline.splineflags.raw(), 25);
}
- void PacketBuilder::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data)
+ void PacketBuilder::WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data, bool fullData)
{
- MoveSplineFlag splineFlags = moveSpline.splineflags;
+ if (fullData)
+ {
+ MoveSplineFlag splineFlags = moveSpline.splineflags;
- if ((splineFlags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration())
- data << moveSpline.vertical_acceleration; // added in 3.1
+ if ((splineFlags & MoveSplineFlag::Parabolic) && moveSpline.effect_start_time < moveSpline.Duration())
+ data << moveSpline.vertical_acceleration; // added in 3.1
- data << moveSpline.timePassed();
+ data << moveSpline.timePassed();
- if (splineFlags.final_angle)
- data << moveSpline.facing.angle;
- else if (splineFlags.final_target)
- {
- ObjectGuid facingGuid = moveSpline.facing.target;
- data.WriteByteSeq(facingGuid[5]);
- data.WriteByteSeq(facingGuid[3]);
- data.WriteByteSeq(facingGuid[7]);
- data.WriteByteSeq(facingGuid[1]);
- data.WriteByteSeq(facingGuid[6]);
- data.WriteByteSeq(facingGuid[4]);
- data.WriteByteSeq(facingGuid[2]);
- data.WriteByteSeq(facingGuid[0]);
- }
+ if (splineFlags.final_angle)
+ data << moveSpline.facing.angle;
+ else if (splineFlags.final_target)
+ {
+ ObjectGuid facingGuid = moveSpline.facing.target;
+ data.WriteByteSeq(facingGuid[5]);
+ data.WriteByteSeq(facingGuid[3]);
+ data.WriteByteSeq(facingGuid[7]);
+ data.WriteByteSeq(facingGuid[1]);
+ data.WriteByteSeq(facingGuid[6]);
+ data.WriteByteSeq(facingGuid[4]);
+ data.WriteByteSeq(facingGuid[2]);
+ data.WriteByteSeq(facingGuid[0]);
+ }
- uint32 nodes = moveSpline.getPath().size();
- for (uint32 i = 0; i < nodes; ++i)
- {
- data << float(moveSpline.getPath()[i].z);
- data << float(moveSpline.getPath()[i].x);
- data << float(moveSpline.getPath()[i].y);
- }
+ uint32 nodes = moveSpline.getPath().size();
+ for (uint32 i = 0; i < nodes; ++i)
+ {
+ data << float(moveSpline.getPath()[i].z);
+ data << float(moveSpline.getPath()[i].x);
+ data << float(moveSpline.getPath()[i].y);
+ }
- if (splineFlags.final_point)
- data << moveSpline.facing.f.x << moveSpline.facing.f.z << moveSpline.facing.f.y;
+ if (splineFlags.final_point)
+ data << moveSpline.facing.f.x << moveSpline.facing.f.z << moveSpline.facing.f.y;
- data << float(1.f); // splineInfo.duration_mod_next; added in 3.1
- data << moveSpline.Duration();
- if (splineFlags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation))
- data << moveSpline.effect_start_time; // added in 3.1
+ data << float(1.f); // splineInfo.duration_mod_next; added in 3.1
+ data << moveSpline.Duration();
+ if (splineFlags & (MoveSplineFlag::Parabolic | MoveSplineFlag::Animation))
+ data << moveSpline.effect_start_time; // added in 3.1
- data << float(1.f); // splineInfo.duration_mod; added in 3.1
+ data << float(1.f); // splineInfo.duration_mod; added in 3.1
+ }
if (!moveSpline.isCyclic())
{
diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.h b/src/server/game/Movement/Spline/MovementPacketBuilder.h
index a6e4e4d5d04..1b8506c5161 100644
--- a/src/server/game/Movement/Spline/MovementPacketBuilder.h
+++ b/src/server/game/Movement/Spline/MovementPacketBuilder.h
@@ -31,8 +31,8 @@ namespace Movement
public:
static void WriteMonsterMove(const MoveSpline& mov, WorldPacket& data);
- static void WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data);
- static void WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data);
+ static void WriteCreateBits(MoveSpline const& moveSpline, ByteBuffer& data, bool& fullData);
+ static void WriteCreateData(MoveSpline const& moveSpline, ByteBuffer& data, bool fullData);
};
}
#endif // TRINITYSERVER_PACKET_BUILDER_H
diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp
index f0ed01c4676..8684ed00627 100644
--- a/src/server/game/Movement/Spline/MovementUtil.cpp
+++ b/src/server/game/Movement/Spline/MovementUtil.cpp
@@ -100,7 +100,7 @@ namespace Movement
#define STR(x) #x
- const char * g_MovementFlag_names[]=
+ const char* g_MovementFlag_names[]=
{
STR(Forward ),// 0x00000001,
STR(Backward ),// 0x00000002,
@@ -112,29 +112,29 @@ namespace Movement
STR(Pitch_Down ),// 0x00000080,
STR(Walk ),// 0x00000100, // Walking
- STR(Ontransport ),// 0x00000200,
- STR(Levitation ),// 0x00000400,
- STR(Root ),// 0x00000800,
- STR(Falling ),// 0x00001000,
- STR(Fallingfar ),// 0x00002000,
- STR(Pendingstop ),// 0x00004000,
- STR(PendingSTRafestop ),// 0x00008000,
- STR(Pendingforward ),// 0x00010000,
- STR(Pendingbackward ),// 0x00020000,
- STR(PendingSTRafeleft ),// 0x00040000,
- STR(PendingSTRaferight ),// 0x00080000,
- STR(Pendingroot ),// 0x00100000,
- STR(Swimming ),// 0x00200000, // Appears With Fly Flag Also
- STR(Ascending ),// 0x00400000, // Swim Up Also
- STR(Descending ),// 0x00800000, // Swim Down Also
- STR(Can_Fly ),// 0x01000000, // Can Fly In 3.3?
- STR(Flying ),// 0x02000000, // Actual Flying Mode
- STR(Spline_Elevation ),// 0x04000000, // Used For Flight Paths
- STR(Spline_Enabled ),// 0x08000000, // Used For Flight Paths
- STR(Waterwalking ),// 0x10000000, // Prevent Unit From Falling Through Water
- STR(Safe_Fall ),// 0x20000000, // Active Rogue Safe Fall Spell (Passive)
- STR(Hover ),// 0x40000000
- STR(Unknown13 ),// 0x80000000
+ STR(Levitation ),// 0x00000200,
+ STR(Root ),// 0x00000400,
+ STR(Falling ),// 0x00000800,
+ STR(Fallingfar ),// 0x00001000,
+ STR(Pendingstop ),// 0x00002000,
+ STR(PendingSTRafestop ),// 0x00004000,
+ STR(Pendingforward ),// 0x00008000,
+ STR(Pendingbackward ),// 0x00010000,
+ STR(PendingSTRafeleft ),// 0x00020000,
+ STR(PendingSTRaferight ),// 0x00040000,
+ STR(Pendingroot ),// 0x00080000,
+ STR(Swimming ),// 0x00100000, // Appears With Fly Flag Also
+ STR(Ascending ),// 0x00200000, // Swim Up Also
+ STR(Descending ),// 0x00400000, // Swim Down Also
+ STR(Can_Fly ),// 0x00800000, // Can Fly In 3.3?
+ STR(Flying ),// 0x01000000, // Actual Flying Mode
+ STR(Spline_Elevation ),// 0x02000000, // Used For Flight Paths
+ STR(Waterwalking ),// 0x04000000, // Prevent Unit From Falling Through Water
+ STR(Safe_Fall ),// 0x08000000, // Active Rogue Safe Fall Spell (Passive)
+ STR(Hover ),// 0x10000000
+ STR(Local_Dirty ),// 0x20000000
+ STR(None31 ),// 0x40000000
+ STR(None32 ),// 0x80000000
STR(Unk1 ),
STR(Unk2 ),
STR(Unk3 ),
@@ -155,38 +155,38 @@ namespace Movement
const char * g_SplineFlag_names[32]=
{
- STR(AnimBit1 ),// 0x00000001,
- STR(AnimBit2 ),// 0x00000002,
- STR(AnimBit3 ),// 0x00000004,
- STR(AnimBit4 ),// 0x00000008,
- STR(AnimBit5 ),// 0x00000010,
- STR(AnimBit6 ),// 0x00000020,
- STR(AnimBit7 ),// 0x00000040,
- STR(AnimBit8 ),// 0x00000080,
- STR(Done ),// 0x00000100,
- STR(Falling ),// 0x00000200, // Not Compartible With Trajectory Movement
- STR(No_Spline ),// 0x00000400,
- STR(Trajectory ),// 0x00000800, // Not Compartible With Fall Movement
- STR(Walkmode ),// 0x00001000,
- STR(Flying ),// 0x00002000, // Smooth Movement(Catmullrom Interpolation Mode), Flying Animation
- STR(Knockback ),// 0x00004000, // Model Orientation Fixed
- STR(Final_Point ),// 0x00008000,
- STR(Final_Target ),// 0x00010000,
- STR(Final_Angle ),// 0x00020000,
- STR(Catmullrom ),// 0x00040000, // Used Catmullrom Interpolation Mode
- STR(Cyclic ),// 0x00080000, // Movement By Cycled Spline
- STR(Enter_Cycle ),// 0x00100000, // Everytime Appears With Cyclic Flag In Monster Move Packet
- STR(Animation ),// 0x00200000, // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement
- STR(Unknown4 ),// 0x00400000, // Disables Movement By Path
- STR(Unknown5 ),// 0x00800000,
- STR(Unknown6 ),// 0x01000000,
- STR(Unknown7 ),// 0x02000000,
- STR(Unknown8 ),// 0x04000000,
- STR(OrientationInversed ),// 0x08000000, // Appears With Runmode Flag, Nodes ),// 1, Handles Orientation
- STR(Unknown10 ),// 0x10000000,
- STR(Unknown11 ),// 0x20000000,
- STR(Unknown12 ),// 0x40000000,
- STR(Unknown13 ),// 0x80000000,
+ STR(AnimBit1 ),// 0x00000001,
+ STR(AnimBit2 ),// 0x00000002,
+ STR(AnimBit3 ),// 0x00000004,
+ STR(AnimBit4 ),// 0x00000008,
+ STR(Unknown1 ),// 0x00000010,
+ STR(Done ),// 0x00000020,
+ STR(Falling ),// 0x00000040, // Not Compartible With Trajectory Movement
+ STR(No_Spline ),// 0x00000080,
+ STR(Unknown2 ),// 0x00000100,
+ STR(Flying ),// 0x00000200, // Smooth Movement(Catmullrom Interpolation Mode), Flying Animation
+ STR(OrientationFixed ),// 0x00000400, // Model Orientation Fixed
+ STR(Catmullrom ),// 0x00000800, // Used Catmullrom Interpolation Mode
+ STR(Cyclic ),// 0x00001000, // Movement By Cycled Spline
+ STR(Enter_Cycle ),// 0x00002000, // Everytime Appears With Cyclic Flag In Monster Move Packet
+ STR(Frozen ),// 0x00004000,
+ STR(TransportEnter ),// 0x00008000
+ STR(TransportExit ),// 0x00010000
+ STR(Unknown3 ),// 0x00020000,
+ STR(Unknown4 ),// 0x00040000,
+ STR(OrientationInversed),// 0x00080000, // Appears With Runmode Flag, Nodes ),// 1, Handles Orientation
+ STR(Unknown5 ),// 0x00100000,
+ STR(Walkmode ),// 0x00200000,
+ STR(UncompressedPath ),// 0x00400000,
+ STR(Unknown6 ),// 0x00800000,
+ STR(Animation ),// 0x01000000, // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement
+ STR(Parabolic ),// 0x02000000, // Not Compartible With Fall Movement
+ STR(Final_Point ),// 0x04000000,
+ STR(Final_Target ),// 0x08000000,
+ STR(Final_Angle ),// 0x10000000,
+ STR(Unknown7 ),// 0x20000000,
+ STR(Unknown8 ),// 0x40000000,
+ STR(Unknown9 ),// 0x80000000,
};
template<class Flags, int N>
@@ -202,7 +202,7 @@ namespace Movement
std::string MoveSplineFlag::ToString() const
{
std::string str;
- print_flags(raw(),g_SplineFlag_names,str);
+ print_flags(raw(), g_SplineFlag_names, str);
return str;
}
}