diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-07-13 23:13:29 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-07-13 23:13:29 +0200 |
commit | 555855c83abac9cf67609ebf4f74f721e283a0df (patch) | |
tree | 9c9f4d4d0cc964c1c67ce041c8874e14d886c60d /src | |
parent | dfe7238d89a1b3852041e882a67a094ab4b30175 (diff) |
Core/Movement: Update spline flags and enabled creature movement
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineFlag.h | 132 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MovementPacketBuilder.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Opcodes.h | 2 |
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, |