aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2012-07-13 23:13:29 +0200
committerShauren <shauren.trinity@gmail.com>2012-07-13 23:13:29 +0200
commit555855c83abac9cf67609ebf4f74f721e283a0df (patch)
tree9c9f4d4d0cc964c1c67ce041c8874e14d886c60d /src
parentdfe7238d89a1b3852041e882a67a094ab4b30175 (diff)
Core/Movement: Update spline flags and enabled creature movement
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h132
-rw-r--r--src/server/game/Movement/Spline/MovementPacketBuilder.cpp2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
-rwxr-xr-xsrc/server/game/Server/Protocol/Opcodes.h2
4 files changed, 74 insertions, 66 deletions
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h
index cfc2fdee450..b011efac5be 100644
--- a/src/server/game/Movement/Spline/MoveSplineFlag.h
+++ b/src/server/game/Movement/Spline/MoveSplineFlag.h
@@ -35,46 +35,50 @@ namespace Movement
public:
enum eFlags{
None = 0x00000000,
- // x00-xFF(first byte) used as animation Ids storage in pair with Animation flag
- Done = 0x00000100,
- Falling = 0x00000200, // Affects elevation computation, can't be combined with Parabolic flag
- No_Spline = 0x00000400,
- Parabolic = 0x00000800, // Affects elevation computation, can't be combined with Falling flag
- Walkmode = 0x00001000,
- Flying = 0x00002000, // Smooth movement(Catmullrom interpolation mode), flying animation
- OrientationFixed = 0x00004000, // Model orientation fixed
- Final_Point = 0x00008000,
- Final_Target = 0x00010000,
- Final_Angle = 0x00020000,
- Catmullrom = 0x00040000, // Used Catmullrom interpolation mode
- Cyclic = 0x00080000, // Movement by cycled spline
- Enter_Cycle = 0x00100000, // Everytimes appears with cyclic flag in monster move packet, erases first spline vertex after first cycle done
- Animation = 0x00200000, // Plays animation after some time passed
- Frozen = 0x00400000, // Will never arrive
- TransportEnter = 0x00800000,
- TransportExit = 0x01000000,
- Unknown7 = 0x02000000,
- Unknown8 = 0x04000000,
- OrientationInversed = 0x08000000,
- Unknown10 = 0x10000000,
- Unknown11 = 0x20000000,
- Unknown12 = 0x40000000,
- Unknown13 = 0x80000000,
+ // x00-xF(first byte) used as animation Ids storage in pair with Animation flag
+ Unknown1 = 0x00000010, // NOT VERIFIED
+ Done = 0x00000020,
+ Falling = 0x00000040, // Affects elevation computation, can't be combined with Parabolic flag
+ No_Spline = 0x00000080,
+ Unknown2 = 0x00000100, // NOT VERIFIED
+ Flying = 0x00000200, // Smooth movement(Catmullrom interpolation mode), flying animation
+ OrientationFixed = 0x00000400, // Model orientation fixed
+ Catmullrom = 0x00000800, // Used Catmullrom interpolation mode
+ Cyclic = 0x00001000, // Movement by cycled spline
+ Enter_Cycle = 0x00002000, // Everytimes appears with cyclic flag in monster move packet, erases first spline vertex after first cycle done
+ Frozen = 0x00004000, // Will never arrive
+ TransportEnter = 0x00008000,
+ TransportExit = 0x00010000,
+ Unknown3 = 0x00020000, // NOT VERIFIED
+ Unknown4 = 0x00040000, // NOT VERIFIED
+ OrientationInversed = 0x00080000,
+ Unknown5 = 0x00100000, // NOT VERIFIED
+ Walkmode = 0x00200000,
+ UncompressedPath = 0x00400000,
+ Unknown6 = 0x00800000, // NOT VERIFIED
+ Animation = 0x01000000, // Plays animation after some time passed
+ Parabolic = 0x02000000, // Affects elevation computation, can't be combined with Falling flag
+ Final_Point = 0x04000000,
+ Final_Target = 0x08000000,
+ Final_Angle = 0x10000000,
+ Unknown7 = 0x20000000, // NOT VERIFIED
+ Unknown8 = 0x40000000, // NOT VERIFIED
+ Unknown9 = 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 = 0xFF,
+ 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 = Flying | Catmullrom,
+ Mask_CatmullRom = Catmullrom,
// Unused, not suported flags
- Mask_Unused = No_Spline|Enter_Cycle|Frozen|Unknown7|Unknown8|Unknown10|Unknown11|Unknown12|Unknown13,
+ Mask_Unused = No_Spline|Enter_Cycle|Frozen|UncompressedPath|Unknown1|Unknown2|Unknown3|Unknown4|Unknown5|Unknown6|Unknown7|Unknown8|Unknown9,
};
- inline uint32& raw() { return (uint32&)*this;}
- inline const uint32& raw() const { return (const uint32&)*this;}
+ inline uint32& raw() { return (uint32&)*this; }
+ inline const uint32& raw() const { return (const uint32&)*this; }
MoveSplineFlag() { raw() = 0; }
MoveSplineFlag(uint32 f) { raw() = f; }
@@ -82,15 +86,15 @@ namespace Movement
// Constant interface
- bool isSmooth() const { return raw() & Mask_CatmullRom;}
- bool isLinear() const { return !isSmooth();}
- bool isFacing() const { return raw() & Mask_Final_Facing;}
+ bool isSmooth() const { return raw() & Mask_CatmullRom; }
+ bool isLinear() const { return !isSmooth(); }
+ bool isFacing() const { return raw() & Mask_Final_Facing; }
- uint8 getAnimationId() const { return animId;}
- bool hasAllFlags(uint32 f) const { return (raw() & f) == f;}
- bool hasFlag(uint32 f) const { return (raw() & f) != 0;}
- uint32 operator & (uint32 f) const { return (raw() & f);}
- uint32 operator | (uint32 f) const { return (raw() | f);}
+ uint8 getAnimationId() const { return animId; }
+ bool hasAllFlags(uint32 f) const { return (raw() & f) == f; }
+ bool hasFlag(uint32 f) const { return (raw() & f) != 0; }
+ uint32 operator & (uint32 f) const { return (raw() & f); }
+ uint32 operator | (uint32 f) const { return (raw() | f); }
std::string ToString() const;
// Not constant interface
@@ -109,31 +113,35 @@ namespace Movement
void EnableTransportEnter() { raw() = (raw() & ~TransportExit) | TransportEnter; }
void EnableTransportExit() { raw() = (raw() & ~TransportEnter) | TransportExit; }
- uint8 animId : 8;
- bool done : 1;
- bool falling : 1;
- bool no_spline : 1;
- bool parabolic : 1;
- bool walkmode : 1;
- bool flying : 1;
- bool orientationFixed : 1;
- bool final_point : 1;
- bool final_target : 1;
- bool final_angle : 1;
- bool catmullrom : 1;
- bool cyclic : 1;
- bool enter_cycle : 1;
- bool animation : 1;
- bool frozen : 1;
- bool transportEnter: 1;
- bool transportExit : 1;
- bool unknown7 : 1;
- bool unknown8 : 1;
+ uint8 animId : 4;
+ bool unknown1 : 1;
+ bool done : 1;
+ bool falling : 1;
+ bool no_spline : 1;
+ bool unknown2 : 1;
+ bool flying : 1;
+ bool orientationFixed : 1;
+ bool catmullrom : 1;
+ bool cyclic : 1;
+ bool enter_cycle : 1;
+ bool frozen : 1;
+ bool transportEnter : 1;
+ bool transportExit : 1;
+ bool unknown3 : 1;
+ bool unknown4 : 1;
bool orientationInversed : 1;
- bool unknown10 : 1;
- bool unknown11 : 1;
- bool unknown12 : 1;
- bool unknown13 : 1;
+ bool unknown5 : 1;
+ bool walkmode : 1;
+ bool uncompressedPath : 1;
+ bool unknown6 : 1;
+ bool animation : 1;
+ bool parabolic : 1;
+ bool final_point : 1;
+ bool final_target : 1;
+ bool final_angle : 1;
+ bool unknown7 : 1;
+ bool unknown8 : 1;
+ bool unknown9 : 1;
};
#if defined( __GNUC__ )
#pragma pack()
diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
index 2cf7bd6e2bb..f35d9e1b64f 100644
--- a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
+++ b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp
@@ -128,7 +128,7 @@ namespace Movement
const Spline<int32>& spline = move_spline.spline;
MoveSplineFlag splineflags = move_spline.splineflags;
- if (splineflags & MoveSplineFlag::Mask_CatmullRom)
+ if (splineflags & MoveSplineFlag::UncompressedPath)
{
if (splineflags.cyclic)
WriteCatmullRomCyclicPath(spline, data);
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 328311f99ee..b052e0735af 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1097,8 +1097,8 @@ void InitOpcodes()
//DEFINE_OPCODE_HANDLER(SMSG_MINIGAME_STATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MIRRORIMAGE_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MONSTER_MOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
- //DEFINE_OPCODE_HANDLER(SMSG_MONSTER_MOVE_TRANSPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MONSTER_MOVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
+ DEFINE_OPCODE_HANDLER(SMSG_MONSTER_MOVE_TRANSPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
DEFINE_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOUNTRESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//DEFINE_OPCODE_HANDLER(SMSG_MOUNTSPECIAL_ANIM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index f1780c15fe9..d02961e3a8c 100755
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -843,7 +843,7 @@ enum Opcodes
SMSG_MIRRORIMAGE_DATA = 0x0000,
SMSG_MODIFY_COOLDOWN = 0x0000,
SMSG_MONSTER_MOVE = 0x6E17,
- SMSG_MONSTER_MOVE_TRANSPORT = 0x0000,
+ SMSG_MONSTER_MOVE_TRANSPORT = 0x2004,
SMSG_MOTD = 0x0A35,
SMSG_MOUNTRESULT = 0x0000,
SMSG_MOUNTSPECIAL_ANIM = 0x0000,