diff options
Diffstat (limited to 'src')
30 files changed, 5237 insertions, 3148 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index f1328bbd259..0b665b2e571 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -735,7 +735,7 @@ void SmartAI::SetRun(bool run) void SmartAI::SetFly(bool fly) { me->SetDisableGravity(fly); - me->SendMovementFlagUpdate(); + me->SendMovementDisableGravity(); } void SmartAI::SetSwim(bool swim) @@ -744,7 +744,7 @@ void SmartAI::SetSwim(bool swim) me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING); else me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); - me->SendMovementFlagUpdate(); + me->SendMovementSwimming(); } void SmartAI::sGossipHello(Player* player) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 892f44dba73..705d1d8bd3a 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2570,52 +2570,10 @@ bool Creature::SetWalk(bool enable) if (!Unit::SetWalk(enable)) return false; - ObjectGuid guid = GetGUID(); - WorldPacket data; - if (enable) - { - data.Initialize(SMSG_SPLINE_MOVE_SET_WALK_MODE, 9); - data.WriteBit(guid[7]); - data.WriteBit(guid[6]); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[0]); - - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - } - else - { - data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_MODE, 9); - data.WriteBit(guid[5]); - data.WriteBit(guid[6]); - data.WriteBit(guid[3]); - data.WriteBit(guid[7]); - data.WriteBit(guid[2]); - data.WriteBit(guid[0]); - data.WriteBit(guid[4]); - data.WriteBit(guid[1]); - - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[3]); - } - - SendMessageToSet(&data, false); + if (!movespline->Initialized()) + return true; + + SendMovementWalkMode(); return true; } @@ -2629,52 +2587,7 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly/*=false*/) if (!movespline->Initialized()) return true; - ObjectGuid guid = GetGUID(); - WorldPacket data; - if (disable) - { - data.Initialize(SMSG_SPLINE_MOVE_GRAVITY_DISABLE, 9); - data.WriteBit(guid[7]); - data.WriteBit(guid[3]); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[0]); - data.WriteBit(guid[6]); - - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[0]); - } - else - { - data.Initialize(SMSG_SPLINE_MOVE_GRAVITY_ENABLE, 9); - data.WriteBit(guid[5]); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[6]); - data.WriteBit(guid[2]); - data.WriteBit(guid[0]); - - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[5]); - } - - SendMessageToSet(&data, false); + SendMovementDisableGravity(); return true; } @@ -2692,53 +2605,10 @@ bool Creature::SetHover(bool enable) if (!movespline->Initialized()) return true; - //! Not always a packet is sent - ObjectGuid guid = GetGUID(); - WorldPacket data; - if (enable) - { - data.Initialize(SMSG_SPLINE_MOVE_SET_HOVER, 9); - data.WriteBit(guid[3]); - data.WriteBit(guid[7]); - data.WriteBit(guid[0]); - data.WriteBit(guid[1]); - data.WriteBit(guid[4]); - data.WriteBit(guid[6]); - data.WriteBit(guid[2]); - data.WriteBit(guid[5]); - - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[6]); - } - else - { - data.Initialize(SMSG_SPLINE_MOVE_UNSET_HOVER, 9); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - data.WriteBit(guid[4]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[1]); - data.WriteBit(guid[5]); - data.WriteBit(guid[2]); - - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[1]); - } - - SendMessageToSet(&data, false); + // If creature hovers using aura, the hover movement opcode is sent from aura handler + if (!HasAuraType(SPELL_AURA_HOVER)) + SendMovementHover(); + return true; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 73adc61b185..ad01c99a747 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -79,6 +79,7 @@ #include "World.h" #include "WorldPacket.h" #include "WorldSession.h" +#include "MovementStructures.h" #define ZONE_UPDATE_INTERVAL (1*IN_MILLISECONDS) @@ -5097,7 +5098,8 @@ void Player::BuildPlayerRepop() // convert player body to ghost SetHealth(1); - SendMovementSetWaterWalking(true); + AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + SendMovementWaterWalking(); if (!GetSession()->isLogingOut()) SetRooted(false); @@ -5139,7 +5141,8 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) setDeathState(ALIVE); - SendMovementSetWaterWalking(false); + RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + SendMovementWaterWalking(); SetRooted(false); m_deathTimer = 0; @@ -26792,256 +26795,19 @@ VoidStorageItem* Player::GetVoidStorageItem(uint64 id, uint8& slot) const return NULL; } -void Player::SendMovementSetCanFly(bool apply) -{ - ObjectGuid guid = GetGUID(); - WorldPacket data; - if (apply) - { - data.Initialize(SMSG_MOVE_SET_CAN_FLY, 1 + 8 + 4); - data.WriteBit(guid[1]); - data.WriteBit(guid[6]); - data.WriteBit(guid[5]); - data.WriteBit(guid[0]); - data.WriteBit(guid[7]); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[3]); - - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[3]); - - data << uint32(0); //! movement counter - - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[5]); - } - else - { - data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 1 + 8 + 4); - data.WriteBit(guid[1]); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[5]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[6]); - - data << uint32(0); //! movement counter - - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[7]); - } - SendDirectMessage(&data); -} - void Player::SendMovementSetCanTransitionBetweenSwimAndFly(bool apply) { - WorldPacket data(apply ? + Movement::PacketSender(this, NULL_OPCODE, apply ? SMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY : - SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY, 12); - data.append(GetPackGUID()); - data << uint32(0); //! movement counter - SendDirectMessage(&data); -} - -void Player::SendMovementSetHover(bool apply) -{ - ObjectGuid guid = GetGUID(); - WorldPacket data; - if (apply) - { - data.Initialize(SMSG_MOVE_SET_HOVER, 12); - data.WriteBit(guid[1]); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[3]); - data.WriteBit(guid[0]); - data.WriteBit(guid[5]); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[7]); - data << uint32(0); // movement counter - } - else - { - data.Initialize(SMSG_MOVE_UNSET_HOVER, 12); - data.WriteBit(guid[4]); - data.WriteBit(guid[6]); - data.WriteBit(guid[3]); - data.WriteBit(guid[1]); - data.WriteBit(guid[2]); - data.WriteBit(guid[7]); - data.WriteBit(guid[5]); - data.WriteBit(guid[0]); - - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[0]); - data << uint32(0); // movement counter - } - - SendDirectMessage(&data); -} - -void Player::SendMovementSetWaterWalking(bool apply) -{ - ObjectGuid guid = GetGUID(); - WorldPacket data; - if (apply) - { - data.Initialize(SMSG_MOVE_WATER_WALK, 1 + 4 + 8); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.WriteBit(guid[6]); - data.WriteBit(guid[0]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[5]); - data.WriteBit(guid[2]); - - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[2]); - data << uint32(0); //! movement counter - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[6]); - } - else - { - data.Initialize(SMSG_MOVE_LAND_WALK, 1 + 4 + 8); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[6]); - data.WriteBit(guid[2]); - data.WriteBit(guid[3]); - data.WriteBit(guid[4]); - data.WriteBit(guid[0]); - data.WriteBit(guid[7]); - - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[2]); - data << uint32(0); //! movement counter - } - SendDirectMessage(&data); -} - -void Player::SendMovementSetFeatherFall(bool apply) -{ - ObjectGuid guid = GetGUID(); - WorldPacket data; - - if (apply) - { - data.Initialize(SMSG_MOVE_FEATHER_FALL, 1 + 4 + 8); - data.WriteBit(guid[3]); - data.WriteBit(guid[1]); - data.WriteBit(guid[7]); - data.WriteBit(guid[0]); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[5]); - data.WriteBit(guid[6]); - - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[2]); - data << uint32(0); //! movement counter - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[6]); - } - else - { - data.Initialize(SMSG_MOVE_NORMAL_FALL, 1 + 4 + 8); - - data << uint32(0); //! movement counter - - data.WriteBit(guid[3]); - data.WriteBit(guid[0]); - data.WriteBit(guid[1]); - data.WriteBit(guid[5]); - data.WriteBit(guid[7]); - data.WriteBit(guid[4]); - data.WriteBit(guid[6]); - data.WriteBit(guid[2]); - - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[6]); - } - - SendDirectMessage(&data); + SMSG_MOVE_UNSET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY).Send(); } void Player::SendMovementSetCollisionHeight(float height) { - ObjectGuid guid = GetGUID(); - WorldPacket data(SMSG_MOVE_SET_COLLISION_HEIGHT, 2 + 8 + 4 + 4); - data.WriteBits(0, 2); - data.WriteBit(guid[6]); - data.WriteBit(guid[1]); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.WriteBit(guid[5]); - data.WriteBit(guid[2]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.FlushBits(); - - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[5]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[7]); - data << float(height); - - SendDirectMessage(&data); + static MovementStatusElements const heightElement = MSEExtraFloat; + Movement::ExtraMovementStatusElement extra(&heightElement); + extra.Data.floatData = height; + Movement::PacketSender(this, NULL_OPCODE, SMSG_MOVE_SET_COLLISION_HEIGHT, SMSG_MOVE_UPDATE_COLLISION_HEIGHT, &extra).Send(); } float Player::GetCollisionHeight(bool mounted) const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e0b24c919a6..55c0e5a1eb9 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2488,11 +2488,7 @@ class Player : public Unit, public GridObject<Player> /*! These methods send different packets to the client in apply and unapply case. These methods are only sent to the current unit. */ - void SendMovementSetCanFly(bool apply); void SendMovementSetCanTransitionBetweenSwimAndFly(bool apply); - void SendMovementSetHover(bool apply); - void SendMovementSetWaterWalking(bool apply); - void SendMovementSetFeatherFall(bool apply); void SendMovementSetCollisionHeight(float height); bool CanFly() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f06f3fbfdd5..1c8f1dc552d 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8606,7 +8606,7 @@ void Unit::SetCharm(Unit* charm, bool apply) if (_isWalkingBeforeCharm) { charm->SetWalk(false); - charm->SendMovementFlagUpdate(); + charm->SendMovementWalkMode(); } m_Controlled.insert(charm); @@ -8644,7 +8644,7 @@ void Unit::SetCharm(Unit* charm, bool apply) if (charm->IsWalking() != _isWalkingBeforeCharm) { charm->SetWalk(_isWalkingBeforeCharm); - charm->SendMovementFlagUpdate(true); // send packet to self, to update movement state on player. + charm->SendMovementWalkMode(); } if (charm->GetTypeId() == TYPEID_PLAYER @@ -11168,418 +11168,35 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) propagateSpeedChange(); - WorldPacket data; - ObjectGuid guid = GetGUID(); - if (!forced) + static Opcodes const moveTypeToOpcode[MAX_MOVE_TYPE][3] = + { + {SMSG_SPLINE_MOVE_SET_WALK_SPEED, SMSG_MOVE_SET_WALK_SPEED, SMSG_MOVE_UPDATE_WALK_SPEED }, + {SMSG_SPLINE_MOVE_SET_RUN_SPEED, SMSG_MOVE_SET_RUN_SPEED, SMSG_MOVE_UPDATE_RUN_SPEED }, + {SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, SMSG_MOVE_SET_RUN_BACK_SPEED, SMSG_MOVE_UPDATE_RUN_BACK_SPEED }, + {SMSG_SPLINE_MOVE_SET_SWIM_SPEED, SMSG_MOVE_SET_SWIM_SPEED, SMSG_MOVE_UPDATE_SWIM_SPEED }, + {SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, SMSG_MOVE_SET_SWIM_BACK_SPEED, SMSG_MOVE_UPDATE_SWIM_BACK_SPEED }, + {SMSG_SPLINE_MOVE_SET_TURN_RATE, SMSG_MOVE_SET_TURN_RATE, SMSG_MOVE_UPDATE_TURN_RATE }, + {SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, SMSG_MOVE_SET_FLIGHT_SPEED, SMSG_MOVE_UPDATE_FLIGHT_SPEED }, + {SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, SMSG_MOVE_SET_FLIGHT_BACK_SPEED, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED}, + {SMSG_SPLINE_MOVE_SET_PITCH_RATE, SMSG_MOVE_SET_PITCH_RATE, SMSG_MOVE_UPDATE_PITCH_RATE }, + }; + + if (GetTypeId() == TYPEID_PLAYER) { - switch (mtype) - { - case MOVE_WALK: - data.Initialize(SMSG_SPLINE_MOVE_SET_WALK_SPEED, 8+4+2+4+4+4+4+4+4+4); - data.WriteBit(guid[0]); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - data.WriteBit(guid[3]); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[2]); - data.WriteBit(guid[4]); - data.FlushBits(); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[5]); - break; - case MOVE_RUN: - data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_SPEED, 1 + 8 + 4); - data.WriteBit(guid[4]); - data.WriteBit(guid[0]); - data.WriteBit(guid[5]); - data.WriteBit(guid[7]); - data.WriteBit(guid[6]); - data.WriteBit(guid[3]); - data.WriteBit(guid[1]); - data.WriteBit(guid[2]); - data.FlushBits(); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[1]); - break; - case MOVE_RUN_BACK: - data.Initialize(SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4); - data.WriteBit(guid[1]); - data.WriteBit(guid[2]); - data.WriteBit(guid[6]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[7]); - data.WriteBit(guid[5]); - data.WriteBit(guid[4]); - data.FlushBits(); - data.WriteByteSeq(guid[1]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[7]); - break; - case MOVE_SWIM: - data.Initialize(SMSG_SPLINE_MOVE_SET_SWIM_SPEED, 1 + 8 + 4); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[5]); - data.WriteBit(guid[0]); - data.WriteBit(guid[7]); - data.WriteBit(guid[6]); - data.WriteBit(guid[3]); - data.WriteBit(guid[1]); - data.FlushBits(); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[4]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - break; - case MOVE_SWIM_BACK: - data.Initialize(SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4); - data.WriteBit(guid[0]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[6]); - data.WriteBit(guid[4]); - data.WriteBit(guid[5]); - data.WriteBit(guid[7]); - data.WriteBit(guid[2]); - data.FlushBits(); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[6]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[2]); - break; - case MOVE_TURN_RATE: - data.Initialize(SMSG_SPLINE_MOVE_SET_TURN_RATE, 1 + 8 + 4); - data.WriteBit(guid[2]); - data.WriteBit(guid[4]); - data.WriteBit(guid[6]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[5]); - data.WriteBit(guid[7]); - data.WriteBit(guid[0]); - data.FlushBits(); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[0]); - break; - case MOVE_FLIGHT: - data.Initialize(SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4); - data.WriteBit(guid[7]); - data.WriteBit(guid[4]); - data.WriteBit(guid[0]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[6]); - data.WriteBit(guid[5]); - data.WriteBit(guid[2]); - data.FlushBits(); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[6]); - data << float(GetSpeed(mtype)); - break; - case MOVE_FLIGHT_BACK: - data.Initialize(SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4); - data.WriteBit(guid[2]); - data.WriteBit(guid[1]); - data.WriteBit(guid[6]); - data.WriteBit(guid[5]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.FlushBits(); - data.WriteByteSeq(guid[5]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[4]); - break; - case MOVE_PITCH_RATE: - data.Initialize(SMSG_SPLINE_MOVE_SET_PITCH_RATE, 1 + 8 + 4); - data.WriteBit(guid[3]); - data.WriteBit(guid[5]); - data.WriteBit(guid[6]); - data.WriteBit(guid[1]); - data.WriteBit(guid[0]); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.WriteBit(guid[2]); - data.FlushBits(); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[2]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[4]); - break; - default: - sLog->outError(LOG_FILTER_UNITS, "Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype); - return; - } + // register forced speed changes for WorldSession::HandleForceSpeedChangeAck + // and do it only for real sent packets and use run for run/mounted as client expected + ++ToPlayer()->m_forced_speed_changes[mtype]; - SendMessageToSet(&data, true); + if (!isInCombat()) + if (Pet* pet = ToPlayer()->GetPet()) + pet->SetSpeed(mtype, m_speed_rate[mtype], forced); } - else - { - if (GetTypeId() == TYPEID_PLAYER) - { - // register forced speed changes for WorldSession::HandleForceSpeedChangeAck - // and do it only for real sent packets and use run for run/mounted as client expected - ++ToPlayer()->m_forced_speed_changes[mtype]; - if (!isInCombat()) - if (Pet* pet = ToPlayer()->GetPet()) - pet->SetSpeed(mtype, m_speed_rate[mtype], forced); - } + static MovementStatusElements const speedVal = MSEExtraFloat; + Movement::ExtraMovementStatusElement extra(&speedVal); + extra.Data.floatData = GetSpeed(mtype); - switch (mtype) - { - case MOVE_WALK: - data.Initialize(SMSG_MOVE_SET_WALK_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[0]); - data.WriteBit(guid[4]); - data.WriteBit(guid[5]); - data.WriteBit(guid[2]); - data.WriteBit(guid[3]); - data.WriteBit(guid[1]); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[5]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[2]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - break; - case MOVE_RUN: - data.Initialize(SMSG_MOVE_SET_RUN_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[6]); - data.WriteBit(guid[1]); - data.WriteBit(guid[5]); - data.WriteBit(guid[2]); - data.WriteBit(guid[7]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[4]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[4]); - data << uint32(m_movementCounter++); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[2]); - break; - case MOVE_RUN_BACK: - data.Initialize(SMSG_MOVE_SET_RUN_BACK_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[0]); - data.WriteBit(guid[6]); - data.WriteBit(guid[2]); - data.WriteBit(guid[1]); - data.WriteBit(guid[3]); - data.WriteBit(guid[4]); - data.WriteBit(guid[5]); - data.WriteBit(guid[7]); - data.WriteByteSeq(guid[5]); - data << uint32(m_movementCounter++); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[6]); - break; - case MOVE_SWIM: - data.Initialize(SMSG_MOVE_SET_SWIM_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[5]); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.WriteBit(guid[3]); - data.WriteBit(guid[2]); - data.WriteBit(guid[0]); - data.WriteBit(guid[1]); - data.WriteBit(guid[6]); - data.WriteByteSeq(guid[0]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[2]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[4]); - break; - case MOVE_SWIM_BACK: - data.Initialize(SMSG_MOVE_SET_SWIM_BACK_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[4]); - data.WriteBit(guid[2]); - data.WriteBit(guid[3]); - data.WriteBit(guid[6]); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[0]); - data.WriteBit(guid[7]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[1]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[2]); - break; - case MOVE_TURN_RATE: - data.Initialize(SMSG_MOVE_SET_TURN_RATE, 1 + 8 + 4 + 4); - data.WriteBit(guid[7]); - data.WriteBit(guid[2]); - data.WriteBit(guid[1]); - data.WriteBit(guid[0]); - data.WriteBit(guid[4]); - data.WriteBit(guid[5]); - data.WriteBit(guid[6]); - data.WriteBit(guid[3]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[2]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[0]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[4]); - break; - case MOVE_FLIGHT: - data.Initialize(SMSG_MOVE_SET_FLIGHT_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[0]); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[6]); - data.WriteBit(guid[3]); - data.WriteBit(guid[2]); - data.WriteBit(guid[7]); - data.WriteBit(guid[4]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[5]); - data << float(GetSpeed(mtype)); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[4]); - break; - case MOVE_FLIGHT_BACK: - data.Initialize(SMSG_MOVE_SET_FLIGHT_BACK_SPEED, 1 + 8 + 4 + 4); - data.WriteBit(guid[1]); - data.WriteBit(guid[2]); - data.WriteBit(guid[6]); - data.WriteBit(guid[4]); - data.WriteBit(guid[7]); - data.WriteBit(guid[3]); - data.WriteBit(guid[0]); - data.WriteBit(guid[5]); - data.WriteByteSeq(guid[3]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[6]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[0]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[7]); - break; - case MOVE_PITCH_RATE: - data.Initialize(SMSG_MOVE_SET_PITCH_RATE, 1 + 8 + 4 + 4); - data.WriteBit(guid[1]); - data.WriteBit(guid[2]); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[5]); - data.WriteBit(guid[4]); - data << float(GetSpeed(mtype)); - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[0]); - data << uint32(m_movementCounter++); - data.WriteByteSeq(guid[1]); - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[7]); - data.WriteByteSeq(guid[3]); - data.WriteByteSeq(guid[5]); - break; - default: - sLog->outError(LOG_FILTER_UNITS, "Unit::SetSpeed: Unsupported move type (%d), data not sent to client.", mtype); - return; - } - SendMessageToSet(&data, true); - } + Movement::PacketSender(this, moveTypeToOpcode[mtype][0], moveTypeToOpcode[mtype][1], moveTypeToOpcode[mtype][2], &extra).Send(); } void Unit::setDeathState(DeathState s) @@ -13663,13 +13280,6 @@ void Unit::StopMoving() init.Launch(); } -void Unit::SendMovementFlagUpdate(bool self /* = false */) -{ - WorldPacket data; - BuildHeartBeatMsg(&data); - SendMessageToSet(&data, self); -} - bool Unit::IsSitState() const { uint8 s = getStandState(); @@ -16440,13 +16050,7 @@ void Unit::NearTeleportTo(float x, float y, float z, float orientation, bool cas } } -void Unit::BuildHeartBeatMsg(WorldPacket* data) -{ - data->Initialize(MSG_MOVE_HEARTBEAT, 32); - WriteMovementInfo(*data); -} - -void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) +void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras /*= NULL*/) { if (GetTypeId() != TYPEID_PLAYER) return; @@ -16460,7 +16064,7 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) MovementStatusElements* sequence = GetMovementStatusElementsSequence(data.GetOpcode()); if (sequence == NULL) { - sLog->outError(LOG_FILTER_NETWORKIO, "WorldSession::ReadMovementInfo: No movement sequence found for opcode 0x%04X", uint32(data.GetOpcode())); + sLog->outError(LOG_FILTER_NETWORKIO, "Unit::ReadMovementInfo: No movement sequence found for opcode %s", GetOpcodeNameForLogging(data.GetOpcode()).c_str()); return; } @@ -16501,15 +16105,6 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) continue; } - if (element >= MSESpeedWalk && - element <= MSESpeedPitchRate) - { - /// @TODO: Possibly verify with current speed - but need to keep in mind that core - /// might trigger multiple changes before client has a chance to reply so only check the last value - data.read_skip<float>(); - continue; - } - switch (element) { case MSEHasMovementFlags: @@ -16590,7 +16185,7 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) break; case MSETransportOrientation: if (hasTransportData) - mi->pos.SetOrientation(data.read<float>()); + mi->t_pos.SetOrientation(data.read<float>()); break; case MSETransportSeat: if (hasTransportData) @@ -16643,6 +16238,9 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) case MSEOneBit: data.ReadBit(); break; + case MSEExtraElement: + extras->ReadNextElement(data); + break; default: ASSERT(false && "Incorrect sequence element detected at ReadMovementInfo"); break; @@ -16729,7 +16327,7 @@ void Unit::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) #undef REMOVE_VIOLATING_FLAGS } -void Unit::WriteMovementInfo(WorldPacket& data) +void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusElement* extras /*= NULL*/) { Unit const* mover = GetCharmerGUID() ? GetCharmer() : this; if (Player const* player = ToPlayer()) @@ -16773,7 +16371,7 @@ void Unit::WriteMovementInfo(WorldPacket& data) MovementStatusElements* sequence = GetMovementStatusElementsSequence(data.GetOpcode()); if (!sequence) { - sLog->outError(LOG_FILTER_NETWORKIO, "Unit::WriteMovementInfo: No movement sequence found for opcode 0x%04X", uint32(data.GetOpcode())); + sLog->outError(LOG_FILTER_NETWORKIO, "Unit::WriteMovementInfo: No movement sequence found for opcode %s", GetOpcodeNameForLogging(data.GetOpcode()).c_str()); return; } @@ -16814,13 +16412,6 @@ void Unit::WriteMovementInfo(WorldPacket& data) continue; } - if (element >= MSESpeedWalk && - element <= MSESpeedPitchRate) - { - data << mover->GetSpeed(UnitMoveType(element - MSESpeedWalk)); - continue; - } - switch (element) { case MSEHasMovementFlags: @@ -16956,6 +16547,9 @@ void Unit::WriteMovementInfo(WorldPacket& data) case MSEOneBit: data.WriteBit(1); break; + case MSEExtraElement: + extras->WriteNextElement(data); + break; default: ASSERT(false && "Incorrect sequence element detected at ReadMovementInfo"); break; @@ -16965,7 +16559,7 @@ void Unit::WriteMovementInfo(WorldPacket& data) void Unit::SendTeleportPacket(Position& pos) { - // MSG_MOVE_UPDATE_TELEPORT is sent to nearby players to signal the teleport + // SMSG_MOVE_UPDATE_TELEPORT is sent to nearby players to signal the teleport // MSG_MOVE_TELEPORT is sent to self in order to trigger MSG_MOVE_TELEPORT_ACK and update the position server side // This oldPos actually contains the destination position if the Unit is a Player. @@ -16977,7 +16571,7 @@ void Unit::SendTeleportPacket(Position& pos) ObjectGuid guid = GetGUID(); ObjectGuid transGuid = GetTransGUID(); - WorldPacket data(MSG_MOVE_UPDATE_TELEPORT, 38); + WorldPacket data(SMSG_MOVE_UPDATE_TELEPORT, 38); WriteMovementInfo(data); if (GetTypeId() == TYPEID_PLAYER) @@ -17436,63 +17030,59 @@ bool Unit::SetHover(bool enable) void Unit::SendMovementHover() { - if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->SendMovementSetHover(HasUnitMovementFlag(MOVEMENTFLAG_HOVER)); - - WorldPacket data(MSG_MOVE_HOVER, 64); - WriteMovementInfo(data); - SendMessageToSet(&data, false); + if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_HOVER, SMSG_MOVE_SET_HOVER).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_UNSET_HOVER, SMSG_MOVE_UNSET_HOVER).Send(); } void Unit::SendMovementWaterWalking() { - if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->SendMovementSetWaterWalking(HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING)); - - WorldPacket data(MSG_MOVE_WATER_WALK, 64); - WriteMovementInfo(data); - SendMessageToSet(&data, false); + if (HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_WATER_WALK, SMSG_MOVE_WATER_WALK).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_LAND_WALK, SMSG_MOVE_LAND_WALK).Send(); } void Unit::SendMovementFeatherFall() { - if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->SendMovementSetFeatherFall(HasUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW)); + if (HasUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_FEATHER_FALL, SMSG_MOVE_FEATHER_FALL).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_NORMAL_FALL, SMSG_MOVE_NORMAL_FALL).Send(); +} - WorldPacket data(MSG_MOVE_FEATHER_FALL, 64); - WriteMovementInfo(data); - SendMessageToSet(&data, false); +void Unit::SendMovementCanFlyChange() +{ + if (HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_FLYING, SMSG_MOVE_SET_CAN_FLY).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_UNSET_FLYING, SMSG_MOVE_UNSET_CAN_FLY).Send(); } -void Unit::SendMovementGravityChange() +void Unit::SendMovementDisableGravity() { - WorldPacket data(MSG_MOVE_GRAVITY_CHNG, 64); - WriteMovementInfo(data); - SendMessageToSet(&data, false); + if (HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_GRAVITY_DISABLE, SMSG_MOVE_GRAVITY_DISABLE).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_GRAVITY_ENABLE, SMSG_MOVE_GRAVITY_ENABLE).Send(); } -void Unit::SendMovementCanFlyChange() +void Unit::SendMovementWalkMode() { - /*! - if ( a3->MoveFlags & MOVEMENTFLAG_CAN_FLY ) - { - v4->MoveFlags |= 0x1000000u; - result = 1; - } - else - { - if ( v4->MoveFlags & MOVEMENTFLAG_FLYING ) - CMovement::DisableFlying(v4); - v4->MoveFlags &= 0xFEFFFFFFu; - result = 1; - } - */ - if (GetTypeId() == TYPEID_PLAYER) - ToPlayer()->SendMovementSetCanFly(CanFly()); + ///@ TODO: Find proper opcode for walk mode setting in player mind controlling a player case + if (HasUnitMovementFlag(MOVEMENTFLAG_WALKING)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_WALK_MODE, SMSG_SPLINE_MOVE_SET_WALK_MODE).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_SET_RUN_MODE, SMSG_SPLINE_MOVE_SET_WALK_MODE).Send(); +} - WorldPacket data(MSG_MOVE_UPDATE_CAN_FLY, 64); - WriteMovementInfo(data); - SendMessageToSet(&data, false); +void Unit::SendMovementSwimming() +{ + if (HasUnitMovementFlag(MOVEMENTFLAG_SWIMMING)) + Movement::PacketSender(this, SMSG_SPLINE_MOVE_START_SWIM, NULL_OPCODE).Send(); + else + Movement::PacketSender(this, SMSG_SPLINE_MOVE_STOP_SWIM, NULL_OPCODE).Send(); } bool Unit::IsSplineEnabled() const diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index d3125b5275a..a5eeb1613ff 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -354,6 +354,10 @@ class Vehicle; class VehicleJoinEvent; class TransportBase; class SpellCastTargets; +namespace Movement +{ + class ExtraMovementStatusElement; +} typedef std::list<Unit*> UnitList; typedef std::list< std::pair<Aura*, uint8> > DispelChargesList; @@ -1593,9 +1597,6 @@ class Unit : public WorldObject void JumpTo(WorldObject* obj, float speedZ); void MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath = false, bool forceDestination = false); - //void SetFacing(float ori, WorldObject* obj = NULL); - //void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player = NULL); - void SendMovementFlagUpdate(bool self = false); /*! These methods send the same packet to the client in apply and unapply case. The client-side interpretation of this packet depends on the presence of relevant movementflags @@ -1605,8 +1606,10 @@ class Unit : public WorldObject void SendMovementHover(); void SendMovementFeatherFall(); void SendMovementWaterWalking(); - void SendMovementGravityChange(); void SendMovementCanFlyChange(); + void SendMovementDisableGravity(); + void SendMovementWalkMode(); + void SendMovementSwimming(); bool IsLevitating() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);} bool IsWalking() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING);} @@ -1625,8 +1628,6 @@ class Unit : public WorldObject void SendClearTarget(); - void BuildHeartBeatMsg(WorldPacket* data); - bool isAlive() const { return (m_deathState == ALIVE); } bool isDying() const { return (m_deathState == JUST_DIED); } bool isDead() const { return (m_deathState == DEAD || m_deathState == CORPSE); } @@ -2111,8 +2112,8 @@ class Unit : public WorldObject void _ExitVehicle(Position const* exitPosition = NULL); void _EnterVehicle(Vehicle* vehicle, int8 seatId, AuraApplication const* aurApp = NULL); - void ReadMovementInfo(WorldPacket& data, MovementInfo* mi); - void WriteMovementInfo(WorldPacket& data); + void ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::ExtraMovementStatusElement* extras = NULL); + void WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusElement* extras = NULL); bool isMoving() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING); } bool isTurning() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_TURNING); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index cdc6ef1f2cb..90b8ae93661 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1054,7 +1054,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) pCurrChar->CastSpell(pCurrChar, 20584, true, 0);// auras SPELL_AURA_INCREASE_SPEED(+speed in wisp form), SPELL_AURA_INCREASE_SWIM_SPEED(+swim speed in wisp form), SPELL_AURA_TRANSFORM (to wisp form) pCurrChar->CastSpell(pCurrChar, 8326, true, 0); // auras SPELL_AURA_GHOST, SPELL_AURA_INCREASE_SPEED(why?), SPELL_AURA_INCREASE_SWIM_SPEED(why?) - pCurrChar->SendMovementSetWaterWalking(true); + pCurrChar->AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + pCurrChar->SendMovementWaterWalking(); } pCurrChar->ContinueTaxiFlight(); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 2b904537b1e..892a926d2c3 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -30,6 +30,7 @@ #include "WaypointMovementGenerator.h" #include "InstanceSaveMgr.h" #include "ObjectMgr.h" +#include "MovementStructures.h" void WorldSession::HandleMoveWorldportAckOpcode(WorldPacket& /*recvPacket*/) { @@ -425,28 +426,19 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recvData) uint32 opcode = recvData.GetOpcode(); /* extract packet */ - uint64 guid; - uint32 unk1; - float newspeed; - - recvData.readPackGUID(guid); + MovementInfo movementInfo; + static MovementStatusElements const speedElement = MSEExtraFloat; + Movement::ExtraMovementStatusElement extras(&speedElement); + GetPlayer()->ReadMovementInfo(recvData, &movementInfo, &extras); // now can skip not our packet - if (_player->GetGUID() != guid) + if (_player->GetGUID() != movementInfo.guid) { recvData.rfinish(); // prevent warnings spam return; } - // continue parse packet - - recvData >> unk1; // counter or moveEvent - - MovementInfo movementInfo; - movementInfo.guid = guid; - GetPlayer()->ReadMovementInfo(recvData, &movementInfo); - - recvData >> newspeed; + float newspeed = extras.Data.floatData; /*----------------*/ // client ACK send one packet for mounted/run case and need skip all except last from its @@ -615,3 +607,13 @@ void WorldSession::HandleSummonResponseOpcode(WorldPacket& recvData) _player->SummonIfPossible(agree); } + +void WorldSession::HandleSetCollisionHeightAck(WorldPacket& recvPacket) +{ + sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_MOVE_SET_COLLISION_HEIGHT_ACK"); + + static MovementStatusElements const heightElement = MSEExtraFloat; + Movement::ExtraMovementStatusElement extra(&heightElement); + MovementInfo movementInfo; + GetPlayer()->ReadMovementInfo(recvPacket, &movementInfo, &extra); +} diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp index 81442570940..2c3d5b3bf61 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp @@ -19,6 +19,7 @@ #include "IdleMovementGenerator.h" #include "CreatureAI.h" #include "Creature.h" +#include <G3D/g3dmath.h> IdleMovementGenerator si_idleMovement; @@ -44,25 +45,17 @@ void RotateMovementGenerator::Initialize(Unit* owner) owner->SetInFront(owner->getVictim()); owner->AddUnitState(UNIT_STATE_ROTATING); - owner->AttackStop(); } bool RotateMovementGenerator::Update(Unit* owner, uint32 diff) { float angle = owner->GetOrientation(); - if (m_direction == ROTATE_DIRECTION_LEFT) - { - angle += (float)diff * static_cast<float>(M_PI * 2) / m_maxDuration; - while (angle >= static_cast<float>(M_PI * 2)) angle -= static_cast<float>(M_PI * 2); - } - else - { - angle -= (float)diff * static_cast<float>(M_PI * 2) / m_maxDuration; - while (angle < 0) angle += static_cast<float>(M_PI * 2); - } - owner->SetOrientation(angle); - owner->SendMovementFlagUpdate(); // this is a hack. we do not have anything correct to send in the beginning + angle += (float(diff) * static_cast<float>(M_PI * 2) / m_maxDuration) * (m_direction == ROTATE_DIRECTION_LEFT ? 1.0f : -1.0f); + angle = G3D::wrap(angle, 0.0f, float(G3D::twoPi())); + + owner->SetOrientation(angle); // UpdateSplinePosition does not set orientation with UNIT_STATE_ROTATING + owner->SetFacingTo(angle); // Send spline movement to clients if (m_duration > diff) m_duration -= diff; diff --git a/src/server/game/Movement/MovementStructures.cpp b/src/server/game/Movement/MovementStructures.cpp new file mode 100644 index 00000000000..d1bc5f20b9f --- /dev/null +++ b/src/server/game/Movement/MovementStructures.cpp @@ -0,0 +1,5010 @@ +/* +* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/> +* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along +* with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "MovementStructures.h" +#include "Player.h" + +//4.3.4 +MovementStatusElements PlayerMoveSequence[] = +{ + MSEHasFallData, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasMovementFlags2, + MSEHasSpline, + MSEHasTimestamp, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEMovementFlags2, + MSEHasGuidByte7, + MSEHasMovementFlags, + MSEHasOrientation, + MSEHasGuidByte2, + MSEHasSplineElevation, + MSEZeroBit, + MSEHasGuidByte4, + MSEHasFallDirection, + MSEHasGuidByte5, + MSEHasTransportData, + MSEMovementFlags, + MSEHasTransportGuidByte3, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEHasPitch, + MSEGuidByte5, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSESplineElevation, + MSEGuidByte7, + MSEPositionY, + MSEGuidByte3, + MSETransportTime3, + MSETransportGuidByte6, + MSETransportSeat, + MSETransportGuidByte5, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportOrientation, + MSETransportGuidByte2, + MSETransportTime2, + MSETransportGuidByte0, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte4, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportTime, + MSEGuidByte4, + MSEPositionX, + MSEGuidByte6, + MSEPositionZ, + MSETimestamp, + MSEGuidByte2, + MSEPitch, + MSEGuidByte0, + MSEOrientation, + MSEGuidByte1, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementFallLandSequence[] = +{ + MSEPositionX, + MSEPositionY, + MSEPositionZ, + MSEHasTransportData, + MSEHasGuidByte7, + MSEHasGuidByte1, + MSEHasMovementFlags2, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasOrientation, + MSEHasGuidByte6, + MSEHasTimestamp, + MSEZeroBit, + MSEHasPitch, + MSEHasGuidByte4, + MSEHasSpline, + MSEHasGuidByte5, + MSEHasMovementFlags, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportTime2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte5, + MSETransportTime, + MSETransportPositionZ, + MSETransportPositionY, + MSETransportPositionX, + MSETransportGuidByte5, + MSETransportTime3, + MSETransportGuidByte1, + MSETransportSeat, + MSETransportTime2, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportGuidByte0, + MSETransportGuidByte7, + MSETransportGuidByte3, + MSETransportGuidByte6, + MSETransportGuidByte2, + MSEFallVerticalSpeed, + MSEFallTime, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSESplineElevation, + MSETimestamp, + MSEPitch, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementHeartBeatSequence[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEHasPitch, + MSEHasTimestamp, + MSEHasFallData, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasGuidByte7, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasOrientation, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasSpline, + MSEZeroBit, + MSEHasGuidByte6, + MSEHasMovementFlags, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte2, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasFallDirection, + MSEMovementFlags, + MSEMovementFlags2, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte5, + MSEGuidByte0, + MSEGuidByte4, + MSETransportPositionZ, + MSETransportSeat, + MSETransportOrientation, + MSETransportGuidByte4, + MSETransportPositionY, + MSETransportTime, + MSETransportPositionX, + MSETransportGuidByte5, + MSETransportGuidByte1, + MSETransportGuidByte3, + MSETransportGuidByte7, + MSETransportTime3, + MSETransportTime2, + MSETransportGuidByte2, + MSETransportGuidByte0, + MSETransportGuidByte6, + MSEOrientation, + MSEFallVerticalSpeed, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEPitch, + MSESplineElevation, + MSETimestamp, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementJumpSequence[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasTimestamp, + MSEHasGuidByte5, + MSEHasMovementFlags, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasMovementFlags2, + MSEHasGuidByte0, + MSEHasTransportData, + MSEHasGuidByte3, + MSEHasPitch, + MSEHasGuidByte7, + MSEHasFallData, + MSEHasSpline, + MSEHasOrientation, + MSEHasGuidByte1, + MSEHasSplineElevation, + MSEZeroBit, + MSEHasGuidByte2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEHasTransportTime2, + MSEHasTransportGuidByte2, + MSEHasFallDirection, + MSEMovementFlags, + MSEMovementFlags2, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte7, + MSEGuidByte1, + MSETransportGuidByte1, + MSETransportGuidByte7, + MSETransportPositionX, + MSETransportGuidByte4, + MSETransportTime3, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportTime2, + MSETransportTime, + MSETransportGuidByte6, + MSETransportPositionZ, + MSETransportSeat, + MSETransportPositionY, + MSETransportGuidByte3, + MSETransportGuidByte2, + MSETransportGuidByte5, + MSEPitch, + MSETimestamp, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEFallTime, + MSESplineElevation, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetFacingSequence[] = +{ + MSEPositionX, + MSEPositionY, + MSEPositionZ, + MSEHasGuidByte6, + MSEHasTransportData, + MSEHasGuidByte4, + MSEHasSpline, + MSEHasGuidByte0, + MSEHasOrientation, + MSEHasTimestamp, + MSEHasPitch, + MSEHasMovementFlags2, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasSplineElevation, + MSEHasMovementFlags, + MSEHasGuidByte3, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasTransportTime3, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportTime2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte3, + MSETransportGuidByte0, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportTime2, + MSETransportGuidByte4, + MSETransportPositionZ, + MSETransportOrientation, + MSETransportGuidByte2, + MSETransportTime3, + MSETransportGuidByte3, + MSETransportSeat, + MSETransportPositionY, + MSETransportGuidByte5, + MSETransportGuidByte6, + MSETransportTime, + MSETransportGuidByte7, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSESplineElevation, + MSEOrientation, + MSETimestamp, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetPitchSequence[] = +{ + MSEPositionX, + MSEPositionZ, + MSEPositionY, + MSEHasFallData, + MSEHasMovementFlags, + MSEHasGuidByte1, + MSEHasOrientation, + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasSplineElevation, + MSEHasGuidByte6, + MSEHasPitch, + MSEHasGuidByte4, + MSEHasSpline, + MSEHasGuidByte2, + MSEZeroBit, + MSEHasTimestamp, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte5, + MSEHasTransportTime3, + MSEHasTransportGuidByte7, + MSEHasTransportTime2, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte3, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte2, + MSEGuidByte4, + MSETransportGuidByte4, + MSETransportGuidByte3, + MSETransportGuidByte6, + MSETransportOrientation, + MSETransportGuidByte1, + MSETransportTime3, + MSETransportTime, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETransportGuidByte0, + MSETransportTime2, + MSETransportPositionY, + MSETransportGuidByte5, + MSETransportSeat, + MSETransportGuidByte7, + MSETransportPositionX, + MSEFallVerticalSpeed, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEPitch, + MSESplineElevation, + MSETimestamp, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartBackwardSequence[] = +{ + MSEPositionX, + MSEPositionZ, + MSEPositionY, + MSEHasTransportData, + MSEHasGuidByte3, + MSEHasGuidByte0, + MSEHasGuidByte2, + MSEHasTimestamp, + MSEHasGuidByte7, + MSEHasPitch, + MSEZeroBit, + MSEHasMovementFlags, + MSEHasOrientation, + MSEHasSpline, + MSEHasMovementFlags2, + MSEHasFallData, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportTime2, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte3, + MSETransportPositionZ, + MSETransportGuidByte2, + MSETransportTime3, + MSETransportGuidByte0, + MSETransportGuidByte5, + MSETransportPositionY, + MSETransportGuidByte1, + MSETransportPositionX, + MSETransportTime2, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportSeat, + MSETransportGuidByte7, + MSETransportTime, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSEPitch, + MSETimestamp, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSEOrientation, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartForwardSequence[] = +{ + MSEPositionY, + MSEPositionZ, + MSEPositionX, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEZeroBit, + MSEHasMovementFlags, + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasOrientation, + MSEHasGuidByte6, + MSEHasSpline, + MSEHasSplineElevation, + MSEHasGuidByte4, + MSEHasTransportData, + MSEHasTimestamp, + MSEHasPitch, + MSEHasMovementFlags2, + MSEHasFallData, + MSEMovementFlags, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte1, + MSEHasTransportTime3, + MSEHasTransportTime2, + MSEHasFallDirection, + MSEMovementFlags2, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte0, + MSEFallVerticalSpeed, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallTime, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportPositionZ, + MSETransportGuidByte1, + MSETransportGuidByte4, + MSETransportGuidByte7, + MSETransportOrientation, + MSETransportGuidByte2, + MSETransportPositionX, + MSETransportGuidByte5, + MSETransportTime3, + MSETransportTime, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportSeat, + MSETransportTime2, + MSESplineElevation, + MSEPitch, + MSEOrientation, + MSETimestamp, + + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartStrafeLeftSequence[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEHasSplineElevation, + MSEHasGuidByte5, + MSEHasPitch, + MSEHasGuidByte6, + MSEHasTimestamp, + MSEHasGuidByte1, + MSEZeroBit, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasOrientation, + MSEHasGuidByte3, + MSEHasMovementFlags2, + MSEHasGuidByte7, + MSEHasSpline, + MSEHasMovementFlags, + MSEHasTransportData, + MSEHasFallDirection, + MSEHasTransportTime2, + MSEHasTransportGuidByte7, + MSEHasTransportTime3, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEMovementFlags, + MSEMovementFlags2, + MSEGuidByte2, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte5, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSETransportSeat, + MSETransportGuidByte2, + MSETransportTime2, + MSETransportGuidByte3, + MSETransportPositionZ, + MSETransportTime3, + MSETransportGuidByte0, + MSETransportGuidByte7, + MSETransportPositionY, + MSETransportGuidByte5, + MSETransportGuidByte1, + MSETransportOrientation, + MSETransportTime, + MSETransportGuidByte6, + MSETransportGuidByte4, + MSETransportPositionX, + MSETimestamp, + MSEOrientation, + MSEPitch, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartStrafeRightSequence[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasPitch, + MSEHasGuidByte1, + MSEHasOrientation, + MSEHasGuidByte4, + MSEHasSpline, + MSEZeroBit, + MSEHasGuidByte5, + MSEHasFallData, + MSEHasSplineElevation, + MSEHasTimestamp, + MSEHasMovementFlags, + MSEHasGuidByte2, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte0, + MSEHasTransportTime2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte0, + MSETransportGuidByte5, + MSETransportGuidByte1, + MSETransportGuidByte6, + MSETransportPositionY, + MSETransportOrientation, + MSETransportGuidByte0, + MSETransportGuidByte2, + MSETransportSeat, + MSETransportPositionX, + MSETransportTime3, + MSETransportTime, + MSETransportGuidByte4, + MSETransportGuidByte7, + MSETransportTime2, + MSETransportPositionZ, + MSETransportGuidByte3, + MSEPitch, + MSEOrientation, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + MSEFallVerticalSpeed, + MSETimestamp, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartTurnLeftSequence[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasOrientation, + MSEHasSpline, + MSEHasMovementFlags, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasMovementFlags2, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasTransportData, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasPitch, + MSEHasTimestamp, + MSEHasFallData, + MSEMovementFlags2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasTransportTime2, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte6, + MSEHasFallDirection, + MSEMovementFlags, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte1, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEFallTime, + MSETransportGuidByte0, + MSETransportPositionX, + MSETransportTime, + MSETransportSeat, + MSETransportPositionZ, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportGuidByte2, + MSETransportGuidByte6, + MSETransportGuidByte1, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportTime3, + MSETransportTime2, + MSETransportGuidByte5, + MSETransportGuidByte7, + MSETimestamp, + MSEPitch, + MSEOrientation, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartTurnRightSequence[] = +{ + MSEPositionX, + MSEPositionZ, + MSEPositionY, + MSEHasGuidByte3, + MSEHasGuidByte5, + MSEHasMovementFlags, + MSEHasSpline, + MSEHasGuidByte0, + MSEHasOrientation, + MSEHasTransportData, + MSEHasGuidByte7, + MSEZeroBit, + MSEHasMovementFlags2, + MSEHasGuidByte1, + MSEHasTimestamp, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasSplineElevation, + MSEHasPitch, + MSEHasFallData, + MSEHasTransportGuidByte1, + MSEHasTransportTime2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte7, + MSEHasTransportTime3, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte5, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte4, + MSEGuidByte6, + MSETransportPositionY, + MSETransportGuidByte0, + MSETransportGuidByte4, + MSETransportGuidByte1, + MSETransportGuidByte6, + MSETransportGuidByte2, + MSETransportSeat, + MSETransportOrientation, + MSETransportGuidByte5, + MSETransportTime3, + MSETransportPositionZ, + MSETransportPositionX, + MSETransportTime, + MSETransportGuidByte7, + MSETransportGuidByte3, + MSETransportTime2, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSEPitch, + MSEOrientation, + MSESplineElevation, + MSETimestamp, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStopSequence[] = +{ + MSEPositionX, + MSEPositionY, + MSEPositionZ, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasSpline, + MSEHasOrientation, + MSEHasGuidByte7, + MSEHasMovementFlags, + MSEHasGuidByte5, + MSEHasFallData, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasTimestamp, + MSEHasGuidByte4, + MSEHasGuidByte1, + MSEZeroBit, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEHasPitch, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte5, + MSEHasTransportTime2, + MSEHasTransportTime3, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte2, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte7, + MSETransportGuidByte4, + MSETransportGuidByte7, + MSETransportTime, + MSETransportSeat, + MSETransportPositionZ, + MSETransportTime3, + MSETransportGuidByte2, + MSETransportGuidByte0, + MSETransportPositionY, + MSETransportGuidByte1, + MSETransportGuidByte3, + MSETransportTime2, + MSETransportPositionX, + MSETransportOrientation, + MSETransportGuidByte5, + MSETransportGuidByte6, + MSETimestamp, + MSEOrientation, + MSEPitch, + MSESplineElevation, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEFallTime, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStopStrafeSequence[] = +{ + MSEPositionY, + MSEPositionZ, + MSEPositionX, + MSEHasPitch, + MSEHasTimestamp, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasGuidByte7, + MSEHasSplineElevation, + MSEHasGuidByte3, + MSEHasOrientation, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasMovementFlags, + MSEHasSpline, + MSEHasGuidByte0, + MSEZeroBit, + MSEHasGuidByte6, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte5, + MSEHasTransportTime2, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte3, + MSEHasTransportTime3, + MSEMovementFlags, + MSEHasFallDirection, + MSEMovementFlags2, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte0, + MSETransportSeat, + MSETransportGuidByte6, + MSETransportPositionZ, + MSETransportTime3, + MSETransportGuidByte1, + MSETransportGuidByte3, + MSETransportGuidByte2, + MSETransportGuidByte4, + MSETransportGuidByte5, + MSETransportTime, + MSETransportOrientation, + MSETransportPositionX, + MSETransportGuidByte0, + MSETransportPositionY, + MSETransportTime2, + MSETransportGuidByte7, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSETimestamp, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStopTurnSequence[] = +{ + MSEPositionX, + MSEPositionZ, + MSEPositionY, + MSEHasGuidByte5, + MSEHasGuidByte4, + MSEHasFallData, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasSpline, + MSEHasMovementFlags, + MSEHasGuidByte2, + MSEHasGuidByte6, + MSEHasPitch, + MSEHasTransportData, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasTimestamp, + MSEHasMovementFlags2, + MSEHasOrientation, + MSEHasGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte7, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasFallDirection, + MSEMovementFlags, + MSEMovementFlags2, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte5, + MSESplineElevation, + MSETransportPositionX, + MSETransportGuidByte5, + MSETransportSeat, + MSETransportGuidByte2, + MSETransportGuidByte3, + MSETransportOrientation, + MSETransportTime2, + MSETransportTime3, + MSETransportGuidByte7, + MSETransportGuidByte1, + MSETransportGuidByte0, + MSETransportGuidByte4, + MSETransportPositionY, + MSETransportPositionZ, + MSETransportTime, + MSETransportGuidByte6, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSETimestamp, + MSEPitch, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartAscendSequence[] = +{ + MSEPositionX, + MSEPositionY, + MSEPositionZ, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte7, + MSEZeroBit, + MSEHasGuidByte5, + MSEHasTransportData, + MSEHasGuidByte2, + MSEHasSplineElevation, + MSEHasFallData, + MSEHasSpline, + MSEHasGuidByte3, + MSEHasMovementFlags2, + MSEHasGuidByte6, + MSEHasMovementFlags, + MSEHasPitch, + MSEHasTimestamp, + MSEHasOrientation, + MSEHasGuidByte4, + MSEMovementFlags, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte4, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte4, + MSEGuidByte2, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte7, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportSeat, + MSETransportGuidByte2, + MSETransportOrientation, + MSETransportPositionY, + MSETransportGuidByte7, + MSETransportTime2, + MSETransportPositionZ, + MSETransportTime3, + MSETransportGuidByte6, + MSETransportTime, + MSETransportGuidByte0, + MSETransportGuidByte1, + MSETransportPositionX, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + MSEFallVerticalSpeed, + MSEOrientation, + MSEPitch, + MSETimestamp, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartDescendSequence[] = +{ + MSEPositionY, + MSEPositionZ, + MSEPositionX, + MSEHasGuidByte0, + MSEHasPitch, + MSEHasFallData, + MSEHasGuidByte4, + MSEHasOrientation, + MSEHasTimestamp, + MSEHasMovementFlags2, + MSEHasMovementFlags, + MSEHasGuidByte6, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasTransportData, + MSEHasSpline, + MSEHasSplineElevation, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEHasGuidByte7, + MSEHasGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportTime2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte3, + MSEPitch, + MSETransportPositionZ, + MSETransportSeat, + MSETransportTime3, + MSETransportGuidByte6, + MSETransportTime2, + MSETransportGuidByte1, + MSETransportTime, + MSETransportGuidByte4, + MSETransportPositionY, + MSETransportPositionX, + MSETransportGuidByte7, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSETransportGuidByte2, + MSETransportOrientation, + MSETransportGuidByte0, + MSEFallTime, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSETimestamp, + MSEOrientation, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartSwimSequence[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEZeroBit, + MSEHasPitch, + MSEHasGuidByte0, + MSEHasOrientation, + MSEHasMovementFlags, + MSEHasFallData, + MSEHasGuidByte5, + MSEHasTransportData, + MSEHasMovementFlags2, + MSEHasTimestamp, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasSpline, + MSEHasGuidByte2, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEHasTransportTime2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportTime3, + MSEMovementFlags, + MSEHasFallDirection, + MSEMovementFlags2, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte7, + MSEPitch, + MSETransportTime2, + MSETransportGuidByte2, + MSETransportPositionY, + MSETransportGuidByte3, + MSETransportTime, + MSETransportPositionX, + MSETransportOrientation, + MSETransportTime3, + MSETransportGuidByte6, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportPositionZ, + MSETransportGuidByte1, + MSETransportGuidByte7, + MSETransportGuidByte0, + MSETransportSeat, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSEOrientation, + MSETimestamp, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStopSwimSequence[] = +{ + MSEPositionX, + MSEPositionY, + MSEPositionZ, + MSEHasSpline, + MSEHasPitch, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEHasGuidByte7, + MSEHasSplineElevation, + MSEHasMovementFlags, + MSEHasGuidByte4, + MSEHasMovementFlags2, + MSEHasGuidByte2, + MSEHasGuidByte6, + MSEHasTransportData, + MSEHasOrientation, + MSEZeroBit, + MSEHasTimestamp, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasFallData, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasTransportTime2, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte2, + MSETransportTime3, + MSETransportGuidByte4, + MSETransportTime, + MSETransportPositionZ, + MSETransportSeat, + MSETransportGuidByte3, + MSETransportGuidByte2, + MSETransportPositionY, + MSETransportGuidByte7, + MSETransportGuidByte1, + MSETransportGuidByte6, + MSETransportGuidByte5, + MSETransportTime2, + MSETransportPositionX, + MSETransportGuidByte0, + MSETransportOrientation, + MSEFallVerticalSpeed, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallTime, + MSETimestamp, + MSEPitch, + MSEOrientation, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStopAscendSequence[] = +{ + MSEPositionZ, + MSEPositionY, + MSEPositionX, + MSEHasGuidByte3, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasGuidByte7, + MSEHasOrientation, + MSEHasPitch, + MSEHasSpline, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasMovementFlags, + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasTransportData, + MSEHasMovementFlags2, + MSEHasTimestamp, + MSEHasGuidByte5, + MSEHasTransportTime2, + MSEHasTransportTime3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte6, + MSETransportGuidByte5, + MSETransportPositionY, + MSETransportGuidByte7, + MSETransportGuidByte2, + MSETransportGuidByte6, + MSETransportTime2, + MSETransportTime3, + MSETransportOrientation, + MSETransportGuidByte3, + MSETransportGuidByte4, + MSETransportSeat, + MSETransportGuidByte1, + MSETransportTime, + MSETransportGuidByte0, + MSETransportPositionX, + MSETransportPositionZ, + MSEFallTime, + MSEFallVerticalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEPitch, + MSESplineElevation, + MSETimestamp, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStopPitchSequence[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEHasFallData, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasPitch, + MSEHasSpline, + MSEHasOrientation, + MSEZeroBit, + MSEHasMovementFlags2, + MSEHasSplineElevation, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasTimestamp, + MSEHasTransportData, + MSEHasMovementFlags, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte2, + MSETimestamp, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSETransportGuidByte5, + MSETransportGuidByte2, + MSETransportTime2, + MSETransportPositionX, + MSETransportOrientation, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportPositionZ, + MSETransportTime3, + MSETransportGuidByte0, + MSETransportGuidByte4, + MSETransportTime, + MSETransportPositionY, + MSETransportSeat, + MSETransportGuidByte7, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartPitchDownSequence[] = +{ + MSEPositionX, + MSEPositionZ, + MSEPositionY, + MSEHasMovementFlags, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasPitch, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasTimestamp, + MSEHasSplineElevation, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEHasSpline, + MSEHasOrientation, + MSEHasFallData, + MSEHasGuidByte2, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte5, + MSEHasTransportTime3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportTime2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEMovementFlags2, + MSEHasFallDirection, + MSEMovementFlags, + MSEGuidByte3, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte2, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte1, + MSETransportTime3, + MSETransportGuidByte3, + MSETransportTime2, + MSETransportGuidByte5, + MSETransportGuidByte1, + MSETransportPositionY, + MSETransportGuidByte6, + MSETransportGuidByte4, + MSETransportTime, + MSETransportPositionZ, + MSETransportPositionX, + MSETransportGuidByte0, + MSETransportSeat, + MSETransportGuidByte2, + MSETransportGuidByte7, + MSETransportOrientation, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSEPitch, + MSEOrientation, + MSESplineElevation, + MSETimestamp, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementStartPitchUpSequence[] = +{ + MSEPositionZ, + MSEPositionY, + MSEPositionX, + MSEHasGuidByte4, + MSEHasMovementFlags, + MSEHasMovementFlags2, + MSEHasSpline, + MSEHasGuidByte2, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEZeroBit, + MSEHasSplineElevation, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasTransportData, + MSEHasGuidByte1, + MSEHasGuidByte5, + MSEHasPitch, + MSEHasTimestamp, + MSEHasOrientation, + MSEHasGuidByte7, + MSEMovementFlags2, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportTime2, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte2, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportGuidByte3, + MSETransportGuidByte2, + MSETransportGuidByte0, + MSETransportTime, + MSETransportPositionZ, + MSETransportOrientation, + MSETransportGuidByte7, + MSETransportTime2, + MSETransportSeat, + MSETransportGuidByte6, + MSETransportGuidByte5, + MSETransportTime3, + MSETransportPositionY, + MSETransportGuidByte4, + MSEFallTime, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEOrientation, + MSESplineElevation, + MSEPitch, + MSETimestamp, + MSEEnd, +}; + +MovementStatusElements MoveChngTransport[]= +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte2, + MSEHasTransportData, + MSEHasSpline, + MSEHasOrientation, + MSEHasGuidByte6, + MSEHasTimestamp, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasPitch, + MSEZeroBit, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasGuidByte1, + MSEHasFallData, + MSEHasMovementFlags, + MSEHasMovementFlags2, + + MSEHasTransportGuidByte3, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportTime2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte3, + + MSETransportPositionY, + MSETransportSeat, + MSETransportGuidByte1, + MSETransportGuidByte0, + MSETransportGuidByte2, + MSETransportGuidByte3, + MSETransportGuidByte6, + MSETransportPositionZ, + MSETransportPositionX, + MSETransportTime3, + MSETransportTime, + MSETransportGuidByte7, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportTime2, + + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallVerticalSpeed, + + MSEOrientation, + MSEPitch, + MSESplineElevation, + MSETimestamp, + MSEEnd, +}; + +// 4.3.4 +MovementStatusElements MoveSplineDone[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasGuidByte6, + MSEHasOrientation, + MSEHasFallData, + MSEHasTimestamp, + MSEHasGuidByte2, + MSEHasSplineElevation, + MSEHasGuidByte4, + MSEHasTransportData, + MSEHasGuidByte3, + MSEHasMovementFlags, + MSEHasGuidByte0, + MSEZeroBit, + MSEHasGuidByte1, + MSEHasGuidByte5, + MSEHasPitch, + MSEHasSpline, + MSEHasMovementFlags2, + MSEHasGuidByte7, + + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportTime2, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte0, + + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte3, + + MSEFallVerticalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + + MSEPitch, + MSEOrientation, + + MSETransportGuidByte1, + MSETransportTime3, + MSETransportGuidByte7, + MSETransportTime, + MSETransportPositionY, + MSETransportPositionX, + MSETransportPositionZ, + MSETransportSeat, + MSETransportOrientation, + MSETransportGuidByte0, + MSETransportTime2, + MSETransportGuidByte2, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSETransportGuidByte6, + MSETransportGuidByte4, + + MSETimestamp, + MSESplineElevation, + MSEEnd, +}; + +// 4.3.4 +MovementStatusElements MoveNotActiveMover[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEHasMovementFlags2, + MSEHasTransportData, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasGuidByte3, + MSEZeroBit, + MSEHasTimestamp, + MSEHasGuidByte0, + MSEHasOrientation, + MSEHasGuidByte5, + MSEHasPitch, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasSpline, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasMovementFlags, + + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportTime2, + MSEHasTransportGuidByte3, + + MSEHasFallDirection, + MSEMovementFlags, + MSEMovementFlags2, + + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte3, + + MSEFallVerticalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + + MSETransportTime3, + MSETransportGuidByte1, + MSETransportTime2, + MSETransportOrientation, + MSETransportGuidByte0, + MSETransportSeat, + MSETransportGuidByte4, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSETransportPositionY, + MSETransportPositionX, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportTime, + + MSETimestamp, + MSESplineElevation, + MSEPitch, + MSEOrientation, + + MSEEnd, +}; + +// 4.3.4 +MovementStatusElements DismissControlledVehicle[] = +{ + MSEPositionY, + MSEPositionZ, + MSEPositionX, + MSEHasSplineElevation, + MSEHasFallData, + MSEHasTransportData, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasMovementFlags2, + MSEHasGuidByte2, + MSEHasOrientation, + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEHasPitch, + MSEHasTimestamp, + MSEHasGuidByte1, + MSEZeroBit, + MSEHasSpline, + MSEHasGuidByte3, + MSEHasMovementFlags, + MSEHasGuidByte5, + + MSEHasTransportGuidByte5, + MSEHasTransportTime3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportTime2, + + MSEMovementFlags2, + MSEHasFallDirection, + MSEMovementFlags, + + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte0, + + MSETimestamp, + + MSETransportTime3, + MSETransportGuidByte4, + MSETransportGuidByte7, + MSETransportTime2, + MSETransportGuidByte6, + MSETransportTime, + MSETransportPositionZ, + MSETransportGuidByte0, + MSETransportPositionX, + MSETransportGuidByte3, + MSETransportSeat, + MSETransportPositionY, + MSETransportOrientation, + MSETransportGuidByte1, + MSETransportGuidByte5, + MSETransportGuidByte2, + + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + + MSEOrientation, + MSESplineElevation, + MSEPitch, + MSEEnd, +}; + +// 4.3.4 +MovementStatusElements MoveUpdateTeleport[] = +{ + MSEPositionZ, + MSEPositionY, + MSEPositionX, + MSEHasOrientation, + + MSEHasSpline, + MSEHasMovementFlags, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasTransportData, + MSEHasGuidByte5, + + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte0, + MSEHasTransportTime2, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte6, + MSEHasTransportTime3, + MSEHasTransportGuidByte2, + + MSEZeroBit, + + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasPitch, + MSEHasMovementFlags2, + MSEHasTimestamp, + + MSEHasFallDirection, + MSEMovementFlags2, + MSEHasSplineElevation, + MSEMovementFlags, + MSEHasGuidByte1, + + MSEGuidByte7, + MSETransportGuidByte3, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportTime3, + MSETransportGuidByte1, + MSETransportTime2, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte0, + MSETransportGuidByte6, + MSETransportGuidByte5, + MSETransportGuidByte2, + MSETransportSeat, + MSETransportTime, + MSETransportPositionY, + MSETransportPositionX, + + MSEGuidByte6, + MSEPitch, + MSESplineElevation, + MSEOrientation, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte1, + + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + + MSEGuidByte5, + MSEGuidByte4, + MSETimestamp, + MSEGuidByte0, + + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetRunMode[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasTimestamp, + MSEHasMovementFlags2, + MSEHasGuidByte1, + MSEHasSpline, + MSEHasMovementFlags, + MSEHasGuidByte7, + MSEHasTransportData, + MSEZeroBit, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasGuidByte5, + MSEHasPitch, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEHasFallData, + MSEHasOrientation, + MSEHasGuidByte2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportTime2, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte2, + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte2, + MSEPitch, + MSETransportTime2, + MSETransportGuidByte3, + MSETransportPositionX, + MSETransportSeat, + MSETransportGuidByte5, + MSETransportGuidByte1, + MSETransportPositionZ, + MSETransportGuidByte2, + MSETransportGuidByte7, + MSETransportOrientation, + MSETransportGuidByte4, + MSETransportTime, + MSETransportTime3, + MSETransportGuidByte0, + MSETransportPositionY, + MSETransportGuidByte6, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSESplineElevation, + MSETimestamp, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetWalkMode[] = +{ + MSEPositionY, + MSEPositionX, + MSEPositionZ, + MSEHasGuidByte6, + MSEHasSpline, + MSEHasTimestamp, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasMovementFlags, + MSEHasPitch, + MSEHasGuidByte7, + MSEHasSplineElevation, + MSEHasGuidByte4, + MSEHasOrientation, + MSEHasTransportData, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEZeroBit, + MSEHasMovementFlags2, + MSEHasFallData, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte7, + MSEHasFallDirection, + MSEMovementFlags, + MSEMovementFlags2, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte1, + MSETransportGuidByte2, + MSETransportGuidByte5, + MSETransportSeat, + MSETransportPositionZ, + MSETransportGuidByte3, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportTime, + MSETransportGuidByte4, + MSETransportTime2, + MSETransportOrientation, + MSETransportPositionX, + MSETransportTime3, + MSETransportGuidByte7, + MSETransportPositionY, + MSETransportGuidByte1, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSESplineElevation, + MSEPitch, + MSETimestamp, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetCanFly[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEHasTransportData, + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasMovementFlags, + MSEHasGuidByte3, + MSEHasMovementFlags2, + MSEHasGuidByte5, + MSEHasTimestamp, + MSEHasSplineElevation, + MSEHasSpline, + MSEHasOrientation, + MSEHasGuidByte7, + MSEZeroBit, + MSEHasPitch, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEMovementFlags2, + MSEHasFallDirection, + MSEMovementFlags, + MSEGuidByte2, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte6, + MSETransportPositionZ, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportSeat, + MSETransportPositionX, + MSETransportGuidByte2, + MSETransportTime2, + MSETransportPositionY, + MSETransportGuidByte1, + MSETransportTime, + MSETransportGuidByte7, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportGuidByte6, + MSETransportTime3, + MSESplineElevation, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEFallTime, + MSEPitch, + MSETimestamp, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetCanTransitionBetweenSwimAndFlyAck[] = +{ + MSEPositionZ, + MSEPositionY, + MSECounter, + MSEPositionX, + MSEHasGuidByte3, + MSEHasOrientation, + MSEHasTransportData, + MSEHasMovementFlags, + MSEHasMovementFlags2, + MSEHasSplineElevation, + MSEHasTimestamp, + MSEHasSpline, + MSEZeroBit, + MSEHasFallData, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasPitch, + MSEHasGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte2, + MSEHasTransportTime2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte5, + MSEHasTransportTime3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte1, + MSEMovementFlags2, + MSEHasFallDirection, + MSEMovementFlags, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte6, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSETransportPositionY, + MSETransportPositionZ, + MSETransportGuidByte5, + MSETransportGuidByte1, + MSETransportGuidByte4, + MSETransportTime, + MSETransportSeat, + MSETransportGuidByte3, + MSETransportGuidByte0, + MSETransportGuidByte2, + MSETransportGuidByte7, + MSETransportPositionX, + MSETransportTime2, + MSETransportGuidByte6, + MSETransportOrientation, + MSETransportTime3, + MSEPitch, + MSEOrientation, + MSETimestamp, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateSwimSpeed[] = +{ + MSEHasMovementFlags, + MSEHasGuidByte2, + MSEMovementFlags, + MSEHasGuidByte3, + MSEZeroBit, + MSEHasGuidByte7, + MSEHasFallDirection, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasOrientation, + MSEHasGuidByte1, + MSETransportGuidByte2, + MSETransportPositionX, + MSETransportGuidByte6, + MSETransportOrientation, + MSETransportGuidByte0, + MSETransportGuidByte4, + MSETransportPositionY, + MSETransportTime, + MSETransportGuidByte1, + MSETransportGuidByte7, + MSETransportPositionZ, + MSETransportSeat, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSEPositionX, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSEGuidByte7, + MSETimestamp, + MSEPositionY, + MSEPositionZ, + MSEExtraElement, + MSEGuidByte4, + MSEOrientation, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte0, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte5, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateRunSpeed[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEExtraElement, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasMovementFlags, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEMovementFlags, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEHasOrientation, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasFallDirection, + MSEHasGuidByte4, + MSEZeroBit, + MSETransportGuidByte4, + MSETransportGuidByte5, + MSETransportPositionX, + MSETransportOrientation, + MSETransportGuidByte1, + MSETransportGuidByte0, + MSETransportGuidByte6, + MSETransportTime, + MSETransportGuidByte7, + MSETransportSeat, + MSETransportPositionY, + MSETransportGuidByte3, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETimestamp, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSEPitch, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte4, + MSEOrientation, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte1, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateFlightSpeed[] = +{ + MSEPositionY, + MSEExtraElement, + MSEPositionX, + MSEPositionZ, + MSEHasMovementFlags, + MSEHasGuidByte4, + MSEZeroBit, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEMovementFlags, + MSEHasGuidByte2, + MSEHasOrientation, + MSEHasGuidByte7, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasFallDirection, + MSEHasGuidByte0, + MSEPitch, + MSEGuidByte0, + MSEGuidByte5, + MSETransportOrientation, + MSETransportTime, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportGuidByte6, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte0, + MSETransportGuidByte2, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportGuidByte1, + MSETransportSeat, + MSETransportPositionX, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSEGuidByte1, + MSEGuidByte6, + MSETimestamp, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte4, + MSEOrientation, + MSEGuidByte3, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateCollisionHeight[] = +{ + MSEPositionZ, + MSEExtraElement, + MSEPositionX, + MSEPositionY, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte2, + MSEHasGuidByte3, + MSEHasOrientation, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEZeroBit, + MSEHasGuidByte2, + MSEHasMovementFlags, + MSEHasFallDirection, + MSEHasGuidByte1, + MSEMovementFlags, + MSEGuidByte3, + MSETransportGuidByte7, + MSETransportTime, + MSETransportGuidByte4, + MSETransportGuidByte5, + MSETransportOrientation, + MSETransportPositionX, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportPositionY, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportSeat, + MSEPitch, + MSEGuidByte6, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEFallTime, + MSEGuidByte7, + MSEOrientation, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte4, + MSETimestamp, + MSEGuidByte2, + MSEGuidByte1, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementForceRunSpeedChangeAck[] = +{ + MSECounter, + MSEPositionX, + MSEExtraElement, + MSEPositionZ, + MSEPositionY, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasGuidByte1, + MSEHasGuidByte7, + MSEHasOrientation, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasSpline, + MSEHasTransportData, + MSEHasTimestamp, + MSEHasMovementFlags2, + MSEHasGuidByte6, + MSEZeroBit, + MSEHasSplineElevation, + MSEHasPitch, + MSEHasGuidByte5, + MSEHasMovementFlags, + MSEHasGuidByte3, + MSEHasTransportTime3, + MSEHasTransportGuidByte5, + MSEHasTransportTime2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte4, + MSEMovementFlags, + MSEHasFallDirection, + MSEMovementFlags2, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte0, + MSETransportPositionZ, + MSETransportGuidByte6, + MSETransportGuidByte1, + MSETransportPositionY, + MSETransportGuidByte0, + MSETransportGuidByte5, + MSETransportTime2, + MSETransportPositionX, + MSETransportTime, + MSETransportGuidByte7, + MSETransportOrientation, + MSETransportGuidByte3, + MSETransportTime3, + MSETransportGuidByte2, + MSETransportSeat, + MSETransportGuidByte4, + MSEFallVerticalSpeed, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallTime, + MSESplineElevation, + MSEPitch, + MSETimestamp, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetCollisionHeightAck[] = +{ + MSEExtraElement, + MSEPositionX, + MSEPositionZ, + MSECounter, + MSEPositionY, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEZeroBit, + MSEZeroBit, + MSEHasPitch, + MSEHasGuidByte5, + MSEZeroBit, + MSEHasGuidByte2, + MSEHasGuidByte1, + MSEHasFallData, + MSEHasGuidByte3, + MSEHasSpline, + MSEHasGuidByte7, + MSEHasMovementFlags, + MSEHasTransportData, + MSEHasTimestamp, + MSEHasSplineElevation, + MSEHasMovementFlags2, + MSEHasOrientation, + MSEHasGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasTransportTime3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte2, + MSEGuidByte4, + MSETransportPositionX, + MSETransportGuidByte4, + MSETransportTime2, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportPositionY, + MSETransportGuidByte7, + MSETransportSeat, + MSETransportGuidByte5, + MSETransportGuidByte2, + MSETransportTime, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportTime3, + MSETransportPositionZ, + MSEFallVerticalSpeed, + MSEFallTime, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSETimestamp, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementForceFlightSpeedChangeAck[] = +{ + MSECounter, + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEExtraElement, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEZeroBit, + MSEHasMovementFlags, + MSEHasSplineElevation, + MSEHasGuidByte3, + MSEHasMovementFlags2, + MSEHasGuidByte7, + MSEHasTransportData, + MSEHasGuidByte0, + MSEHasFallData, + MSEHasTimestamp, + MSEHasPitch, + MSEHasSpline, + MSEHasOrientation, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEHasTransportTime2, + MSEHasTransportGuidByte0, + MSEHasTransportTime3, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte4, + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte4, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportSeat, + MSETransportTime2, + MSETransportOrientation, + MSETransportGuidByte1, + MSETransportGuidByte5, + MSETransportTime3, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte3, + MSETransportGuidByte4, + MSETransportPositionX, + MSETransportTime, + MSETransportPositionY, + MSETimestamp, + MSESplineElevation, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + MSEFallVerticalSpeed, + MSEPitch, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementSetCanFlyAck[] = +{ + MSEPositionY, + MSECounter, + MSEPositionX, + MSEPositionZ, + MSEHasGuidByte3, + MSEHasTimestamp, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasOrientation, + MSEHasFallData, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasSplineElevation, + MSEHasMovementFlags2, + MSEZeroBit, + MSEHasGuidByte7, + MSEHasSpline, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasMovementFlags, + MSEHasTransportData, + MSEHasPitch, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportTime2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte5, + MSETransportTime2, + MSETransportGuidByte6, + MSETransportTime, + MSETransportTime3, + MSETransportGuidByte7, + MSETransportPositionZ, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportGuidByte5, + MSETransportPositionX, + MSETransportGuidByte2, + MSETransportOrientation, + MSETransportSeat, + MSETransportGuidByte1, + MSETransportGuidByte0, + MSETransportGuidByte4, + MSEFallTime, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEPitch, + MSEOrientation, + MSETimestamp, + MSESplineElevation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementForceSwimSpeedChangeAck[] = +{ + MSEPositionX, + MSECounter, + MSEExtraElement, + MSEPositionY, + MSEPositionZ, + MSEHasGuidByte4, + MSEHasOrientation, + MSEHasPitch, + MSEHasTransportData, + MSEHasMovementFlags, + MSEHasMovementFlags2, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasFallData, + MSEHasGuidByte2, + MSEHasGuidByte7, + MSEHasTimestamp, + MSEZeroBit, + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasSpline, + MSEHasGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEMovementFlags2, + MSEHasFallDirection, + MSEMovementFlags, + MSEGuidByte2, + MSEGuidByte0, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte7, + MSETransportGuidByte0, + MSETransportTime3, + MSETransportTime2, + MSETransportPositionX, + MSETransportGuidByte7, + MSETransportSeat, + MSETransportPositionY, + MSETransportGuidByte5, + MSETransportPositionZ, + MSETransportOrientation, + MSETransportTime, + MSETransportGuidByte2, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportGuidByte4, + MSEFallTime, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEOrientation, + MSEPitch, + MSESplineElevation, + MSETimestamp, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementForceWalkSpeedChangeAck[] = +{ + MSEPositionZ, + MSEPositionY, + MSEExtraElement, + MSEPositionX, + MSECounter, + MSEHasGuidByte0, + MSEHasMovementFlags2, + MSEHasTimestamp, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEHasMovementFlags, + MSEHasFallData, + MSEHasOrientation, + MSEHasSpline, + MSEZeroBit, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasSplineElevation, + MSEHasTransportData, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasPitch, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportTime3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte0, + MSEFallVerticalSpeed, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallTime, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte5, + MSETransportPositionX, + MSETransportGuidByte0, + MSETransportTime, + MSETransportTime3, + MSETransportPositionY, + MSETransportGuidByte2, + MSETransportGuidByte4, + MSETransportGuidByte1, + MSETransportGuidByte3, + MSETransportOrientation, + MSETransportSeat, + MSETransportGuidByte6, + MSETransportTime2, + MSESplineElevation, + MSETimestamp, + MSEOrientation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementForceRunBackSpeedChangeAck[] = +{ + MSEExtraElement, + MSECounter, + MSEPositionX, + MSEPositionZ, + MSEPositionY, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasTimestamp, + MSEHasTransportData, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasGuidByte3, + MSEHasOrientation, + MSEHasFallData, + MSEHasMovementFlags2, + MSEHasMovementFlags, + MSEHasGuidByte7, + MSEHasSpline, + MSEHasPitch, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEZeroBit, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte1, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte5, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte1, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSETransportGuidByte5, + MSETransportSeat, + MSETransportGuidByte6, + MSETransportGuidByte1, + MSETransportGuidByte0, + MSETransportGuidByte2, + MSETransportPositionY, + MSETransportTime3, + MSETransportPositionX, + MSETransportOrientation, + MSETransportGuidByte3, + MSETransportTime, + MSETransportTime2, + MSETransportGuidByte4, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETimestamp, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateRunBackSpeed[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasGuidByte0, + MSEZeroBit, + MSEHasMovementFlags, + MSEHasGuidByte5, + MSEHasOrientation, + MSEMovementFlags, + MSEHasFallDirection, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEHasGuidByte7, + MSETransportPositionX, + MSETransportGuidByte2, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportGuidByte7, + MSETransportPositionZ, + MSETransportTime, + MSETransportSeat, + MSETransportGuidByte1, + MSETransportOrientation, + MSEGuidByte4, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSETimestamp, + MSEGuidByte1, + MSEOrientation, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte3, + MSEPositionX, + MSEPositionY, + MSEPitch, + MSEGuidByte7, + MSEExtraElement, + MSEGuidByte2, + MSEGuidByte6, + MSEPositionZ, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateWalkSpeed[] = +{ + MSEHasOrientation, + MSEZeroBit, + MSEHasGuidByte3, + MSEHasGuidByte2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasMovementFlags, + MSEHasGuidByte6, + MSEHasFallDirection, + MSEMovementFlags, + MSEHasGuidByte4, + MSEPitch, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportGuidByte4, + MSETransportGuidByte2, + MSETransportPositionX, + MSETransportGuidByte7, + MSETransportTime, + MSETransportPositionZ, + MSETransportSeat, + MSETransportGuidByte5, + MSETransportOrientation, + MSETransportGuidByte1, + MSETransportPositionY, + MSETransportGuidByte3, + MSEFallVerticalSpeed, + MSEFallHorizontalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallTime, + MSEGuidByte1, + MSEGuidByte4, + MSEGuidByte2, + MSEGuidByte6, + MSEGuidByte7, + MSETimestamp, + MSEOrientation, + MSEPositionY, + MSEGuidByte0, + MSEPositionZ, + MSEPositionX, + MSEGuidByte3, + MSEGuidByte5, + MSEExtraElement, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements ForceMoveRootAck[] = +{ + MSEPositionY, + MSEPositionZ, + MSECounter, + MSEPositionX, + MSEHasGuidByte3, + MSEHasTimestamp, + MSEHasTransportData, + MSEHasPitch, + MSEHasGuidByte2, + MSEHasOrientation, + MSEHasSplineElevation, + MSEHasFallData, + MSEHasSpline, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasGuidByte7, + MSEHasMovementFlags2, + MSEHasMovementFlags, + MSEZeroBit, + MSEHasGuidByte5, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte2, + MSEHasTransportTime2, + MSEHasTransportGuidByte4, + MSEHasTransportTime3, + MSEHasTransportGuidByte5, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte6, + MSEGuidByte2, + MSETransportGuidByte5, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportPositionZ, + MSETransportTime3, + MSETransportTime2, + MSETransportGuidByte7, + MSETransportGuidByte2, + MSETransportGuidByte0, + MSETransportTime, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportPositionY, + MSETransportSeat, + MSETimestamp, + MSEFallVerticalSpeed, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallTime, + MSEOrientation, + MSESplineElevation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements ForceMoveUnrootAck[] = +{ + MSECounter, + MSEPositionZ, + MSEPositionY, + MSEPositionX, + MSEHasGuidByte7, + MSEHasSplineElevation, + MSEHasSpline, + MSEHasGuidByte5, + MSEHasGuidByte4, + MSEZeroBit, + MSEHasTimestamp, + MSEHasMovementFlags, + MSEHasOrientation, + MSEHasPitch, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasTransportData, + MSEHasMovementFlags2, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEHasFallData, + MSEHasGuidByte6, + MSEHasFallDirection, + MSEHasTransportGuidByte0, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportTime2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte6, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte3, + MSETransportGuidByte6, + MSETransportPositionZ, + MSETransportGuidByte2, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportTime3, + MSETransportGuidByte5, + MSETransportSeat, + MSETransportGuidByte0, + MSETransportTime, + MSETransportTime2, + MSETransportGuidByte4, + MSETransportOrientation, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportGuidByte7, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSETimestamp, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementFallReset[] = +{ + MSEPositionZ, + MSEPositionX, + MSEPositionY, + MSEHasGuidByte1, + MSEHasTimestamp, + MSEHasMovementFlags, + MSEZeroBit, + MSEHasGuidByte6, + MSEHasSplineElevation, + MSEHasPitch, + MSEHasGuidByte3, + MSEHasTransportData, + MSEHasGuidByte2, + MSEHasMovementFlags2, + MSEHasOrientation, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasSpline, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEHasFallData, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte4, + MSEHasTransportTime2, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte6, + MSETransportPositionX, + MSETransportGuidByte7, + MSETransportGuidByte2, + MSETransportGuidByte3, + MSETransportGuidByte5, + MSETransportPositionY, + MSETransportPositionZ, + MSETransportSeat, + MSETransportTime2, + MSETransportGuidByte6, + MSETransportTime3, + MSETransportTime, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportGuidByte4, + MSETransportGuidByte1, + MSEFallVerticalSpeed, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + MSEOrientation, + MSETimestamp, + MSESplineElevation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementFeatherFallAck[] = +{ + MSEPositionZ, + MSECounter, + MSEPositionY, + MSEPositionX, + MSEZeroBit, + MSEHasGuidByte3, + MSEHasSplineElevation, + MSEHasGuidByte1, + MSEHasPitch, + MSEHasGuidByte2, + MSEHasSpline, + MSEHasTimestamp, + MSEHasGuidByte5, + MSEHasFallData, + MSEHasOrientation, + MSEHasTransportData, + MSEHasGuidByte7, + MSEHasMovementFlags2, + MSEHasGuidByte6, + MSEHasMovementFlags, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportTime3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEHasTransportTime2, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasFallDirection, + MSEMovementFlags2, + MSEMovementFlags, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte2, + MSETransportTime3, + MSETransportOrientation, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte5, + MSETransportGuidByte2, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportGuidByte6, + MSETransportTime2, + MSETransportTime, + MSETransportPositionY, + MSETransportGuidByte4, + MSETransportGuidByte0, + MSETransportSeat, + MSETransportGuidByte3, + MSETimestamp, + MSESplineElevation, + MSEOrientation, + MSEFallVerticalSpeed, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallTime, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementGravityDisableAck[] = +{ + MSEPositionZ, + MSEPositionY, + MSECounter, + MSEPositionX, + MSEHasGuidByte3, + MSEHasTransportData, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasMovementFlags, + MSEHasOrientation, + MSEHasSpline, + MSEHasGuidByte6, + MSEHasGuidByte0, + MSEHasGuidByte7, + MSEHasSplineElevation, + MSEHasTimestamp, + MSEHasPitch, + MSEHasMovementFlags2, + MSEZeroBit, + MSEHasGuidByte2, + MSEHasFallData, + MSEHasGuidByte1, + MSEHasTransportGuidByte2, + MSEHasTransportTime3, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte4, + MSEHasTransportTime2, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte6, + MSETransportPositionZ, + MSETransportGuidByte2, + MSETransportGuidByte5, + MSETransportGuidByte3, + MSETransportGuidByte4, + MSETransportPositionY, + MSETransportTime, + MSETransportSeat, + MSETransportGuidByte6, + MSETransportGuidByte1, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportTime2, + MSETransportPositionX, + MSETransportGuidByte7, + MSETransportTime3, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + MSEFallVerticalSpeed, + MSEOrientation, + MSESplineElevation, + MSETimestamp, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementGravityEnableAck[] = +{ + MSEPositionZ, + MSEPositionX, + MSECounter, + MSEPositionY, + MSEHasSplineElevation, + MSEHasMovementFlags2, + MSEHasGuidByte6, + MSEHasOrientation, + MSEZeroBit, + MSEHasGuidByte5, + MSEHasSpline, + MSEHasGuidByte3, + MSEHasTransportData, + MSEHasPitch, + MSEHasGuidByte1, + MSEHasTimestamp, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasMovementFlags, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasTransportTime3, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEHasTransportTime2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasFallDirection, + MSEMovementFlags, + MSEMovementFlags2, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte6, + MSEFallTime, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSETransportGuidByte1, + MSETransportPositionX, + MSETransportTime3, + MSETransportOrientation, + MSETransportGuidByte2, + MSETransportGuidByte0, + MSETransportGuidByte7, + MSETransportGuidByte6, + MSETransportSeat, + MSETransportGuidByte3, + MSETransportGuidByte4, + MSETransportPositionZ, + MSETransportTime2, + MSETransportGuidByte5, + MSETransportTime, + MSETransportPositionY, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSETimestamp, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementHoverAck[] = +{ + MSECounter, + MSEPositionZ, + MSEPositionY, + MSEPositionX, + MSEHasGuidByte4, + MSEHasTransportData, + MSEHasGuidByte2, + MSEHasTimestamp, + MSEHasSpline, + MSEHasMovementFlags, + MSEHasGuidByte1, + MSEHasPitch, + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEHasGuidByte5, + MSEZeroBit, + MSEHasFallData, + MSEHasMovementFlags2, + MSEHasSplineElevation, + MSEHasOrientation, + MSEHasGuidByte3, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte6, + MSEHasTransportTime3, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEHasTransportTime2, + MSEMovementFlags, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte1, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte0, + MSETimestamp, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallTime, + MSEFallVerticalSpeed, + MSEOrientation, + MSETransportGuidByte1, + MSETransportTime3, + MSETransportGuidByte2, + MSETransportGuidByte7, + MSETransportGuidByte3, + MSETransportGuidByte4, + MSETransportSeat, + MSETransportPositionX, + MSETransportPositionZ, + MSETransportOrientation, + MSETransportTime, + MSETransportGuidByte0, + MSETransportPositionY, + MSETransportGuidByte5, + MSETransportTime2, + MSETransportGuidByte6, + MSESplineElevation, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementKnockBackAck[] = +{ + MSEPositionY, + MSEPositionZ, + MSECounter, + MSEPositionX, + MSEHasGuidByte6, + MSEHasOrientation, + MSEHasPitch, + MSEHasSplineElevation, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasSpline, + MSEHasGuidByte7, + MSEZeroBit, + MSEHasMovementFlags2, + MSEHasTimestamp, + MSEHasGuidByte0, + MSEHasMovementFlags, + MSEHasTransportData, + MSEHasGuidByte5, + MSEHasFallData, + MSEMovementFlags, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte1, + MSEHasTransportTime2, + MSEHasTransportGuidByte0, + MSEHasTransportTime3, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte7, + MSEMovementFlags2, + MSEHasFallDirection, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte1, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte7, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSETimestamp, + MSETransportPositionY, + MSETransportGuidByte4, + MSETransportTime2, + MSETransportGuidByte7, + MSETransportOrientation, + MSETransportGuidByte6, + MSETransportTime, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportTime3, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETransportGuidByte0, + MSETransportGuidByte5, + MSETransportPositionX, + MSETransportSeat, + MSEPitch, + MSESplineElevation, + MSEOrientation, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementWaterWalkAck[] = +{ + MSEPositionY, + MSEPositionZ, + MSECounter, + MSEPositionX, + MSEHasTimestamp, + MSEHasPitch, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEHasGuidByte7, + MSEHasOrientation, + MSEHasGuidByte1, + MSEHasMovementFlags2, + MSEHasGuidByte2, + MSEHasMovementFlags, + MSEHasGuidByte3, + MSEHasTransportData, + MSEHasGuidByte6, + MSEHasFallData, + MSEHasGuidByte4, + MSEZeroBit, + MSEHasSplineElevation, + MSEHasSpline, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportTime2, + MSEHasTransportGuidByte3, + MSEHasTransportTime3, + MSEHasTransportGuidByte4, + MSEMovementFlags, + MSEHasFallDirection, + MSEMovementFlags2, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte1, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportTime3, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportGuidByte7, + MSETransportPositionY, + MSETransportTime2, + MSETransportTime, + MSETransportGuidByte5, + MSETransportSeat, + MSETransportPositionZ, + MSETransportGuidByte3, + MSETransportGuidByte2, + MSETransportGuidByte6, + MSETransportGuidByte4, + MSESplineElevation, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSEOrientation, + MSETimestamp, + MSEPitch, + MSEEnd, +}; + +//4.3.4 +MovementStatusElements MovementUpdateKnockBack[] = +{ + MSEZeroBit, + MSEHasGuidByte4, + MSEHasMovementFlags, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte2, + MSEHasGuidByte7, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte3, + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEMovementFlags, + MSEHasFallDirection, + MSEHasOrientation, + MSEOrientation, + MSEFallCosAngle, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallTime, + MSEFallVerticalSpeed, + MSEGuidByte3, + MSETransportGuidByte5, + MSETransportGuidByte7, + MSETransportSeat, + MSETransportGuidByte3, + MSETransportGuidByte6, + MSETransportPositionZ, + MSETransportGuidByte1, + MSETransportPositionY, + MSETransportPositionX, + MSETransportGuidByte2, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportTime, + MSETransportGuidByte4, + MSEPitch, + MSEPositionZ, + MSETimestamp, + MSEPositionX, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte1, + MSEPositionY, + MSEGuidByte0, + MSEGuidByte5, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetWalkSpeed[] = +{ + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte3, + MSEExtraElement, + MSEGuidByte6, + MSEGuidByte2, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetRunSpeed[] = +{ + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte4, + MSEExtraElement, + MSEGuidByte2, + MSEGuidByte1, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetRunBackSpeed[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasGuidByte6, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte7, + MSEHasGuidByte5, + MSEHasGuidByte4, + MSEGuidByte1, + MSEExtraElement, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte7, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetSwimSpeed[] = +{ + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEGuidByte5, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte4, + MSEExtraElement, + MSEGuidByte7, + MSEGuidByte3, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetSwimBackSpeed[] = +{ + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte2, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte6, + MSEExtraElement, + MSEGuidByte4, + MSEGuidByte2, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetTurnRate[] = +{ + MSEHasGuidByte2, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEExtraElement, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte0, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetFlightSpeed[] = +{ + MSEHasGuidByte7, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte6, + MSEExtraElement, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetFlightBackSpeed[] = +{ + MSEHasGuidByte2, + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEGuidByte5, + MSEExtraElement, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte7, + MSEGuidByte4, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetPitchRate[] = +{ + MSEHasGuidByte3, + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte2, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte2, + MSEExtraElement, + MSEGuidByte4, + MSEEnd, +}; + +MovementStatusElements MoveSetWalkSpeed[] = +{ + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte5, + MSEExtraElement, + MSEGuidByte2, + MSECounter, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte3, + MSEEnd, +}; + +MovementStatusElements MoveSetRunSpeed[] = +{ + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte4, + MSECounter, + MSEExtraElement, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte2, + MSEEnd, +}; + +MovementStatusElements MoveSetRunBackSpeed[] = +{ + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEGuidByte5, + MSECounter, + MSEExtraElement, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte6, + MSEEnd, +}; + +MovementStatusElements MoveSetSwimSpeed[] = +{ + MSEHasGuidByte5, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEGuidByte0, + MSECounter, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte2, + MSEExtraElement, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte4, + MSEEnd, +}; + +MovementStatusElements MoveSetSwimBackSpeed[] = +{ + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte7, + MSECounter, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte1, + MSEExtraElement, + MSEGuidByte7, + MSEGuidByte2, + MSEEnd, +}; + +MovementStatusElements MoveSetTurnRate[] = +{ + MSEHasGuidByte7, + MSEHasGuidByte2, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte2, + MSEExtraElement, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte0, + MSECounter, + MSEGuidByte6, + MSEGuidByte4, + MSEEnd, +}; + +MovementStatusElements MoveSetFlightSpeed[] = +{ + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasGuidByte2, + MSEHasGuidByte7, + MSEHasGuidByte4, + MSEGuidByte0, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte5, + MSEExtraElement, + MSECounter, + MSEGuidByte2, + MSEGuidByte6, + MSEGuidByte3, + MSEGuidByte4, + MSEEnd, +}; + +MovementStatusElements MoveSetFlightBackSpeed[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEGuidByte3, + MSECounter, + MSEGuidByte6, + MSEExtraElement, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte7, + MSEEnd, +}; + +MovementStatusElements MoveSetPitchRate[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte5, + MSEHasGuidByte4, + MSEExtraElement, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte0, + MSECounter, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte5, + MSEEnd, +}; + +MovementStatusElements MoveSetCollisionHeight[] = +{ + MSEZeroBit, + MSEZeroBit, + MSEHasGuidByte6, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte5, + MSECounter, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte7, + MSEExtraElement, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetWalkMode[] = +{ + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEGuidByte4, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte0, + MSEGuidByte7, + MSEGuidByte3, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetRunMode[] = +{ + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasGuidByte7, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte1, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte5, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte3, + MSEEnd, +}; + +MovementStatusElements SplineMoveGravityDisable[] = +{ + MSEHasGuidByte7, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte0, + MSEHasGuidByte6, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte6, + MSEGuidByte2, + MSEGuidByte5, + MSEGuidByte0, + MSEEnd, +}; + +MovementStatusElements SplineMoveGravityEnable[] = +{ + MSEHasGuidByte5, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte5, + MSEEnd, +}; + +MovementStatusElements SplineMoveSetHover[] = +{ + MSEHasGuidByte3, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEGuidByte2, + MSEGuidByte4, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte6, + MSEEnd, +}; + +MovementStatusElements SplineMoveUnsetHover[] = +{ + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte1, + MSEEnd, +}; + +MovementStatusElements MoveSetCanFly[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEHasGuidByte7, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte3, + MSEGuidByte6, + MSEGuidByte3, + MSECounter, + MSEGuidByte2, + MSEGuidByte1, + MSEGuidByte4, + MSEGuidByte7, + MSEGuidByte0, + MSEGuidByte5, + MSEEnd, +}; + +MovementStatusElements MoveUnsetCanFly[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEGuidByte4, + MSEGuidByte6, + MSECounter, + MSEGuidByte1, + MSEGuidByte0, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte5, + MSEGuidByte7, + MSEEnd, +}; + +MovementStatusElements MoveSetHover[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte3, + MSEHasGuidByte0, + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte0, + MSEGuidByte7, + MSECounter, + MSEEnd, +}; + +MovementStatusElements MoveUnsetHover[] = +{ + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasGuidByte2, + MSEHasGuidByte7, + MSEHasGuidByte5, + MSEHasGuidByte0, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte3, + MSEGuidByte6, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte2, + MSEGuidByte0, + MSECounter, + MSEEnd, +}; + +MovementStatusElements MoveWaterWalk[] = +{ + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte3, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte2, + MSECounter, + MSEGuidByte7, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte6, + MSEEnd, +}; + +MovementStatusElements MoveLandWalk[] = +{ + MSEHasGuidByte5, + MSEHasGuidByte1, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEHasGuidByte3, + MSEHasGuidByte4, + MSEHasGuidByte0, + MSEHasGuidByte7, + MSEGuidByte6, + MSEGuidByte1, + MSEGuidByte7, + MSEGuidByte5, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte2, + MSECounter, + MSEEnd, +}; + +MovementStatusElements MoveFeatherFall[] = +{ + MSEHasGuidByte3, + MSEHasGuidByte1, + MSEHasGuidByte7, + MSEHasGuidByte0, + MSEHasGuidByte4, + MSEHasGuidByte2, + MSEHasGuidByte5, + MSEHasGuidByte6, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte2, + MSECounter, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte1, + MSEGuidByte6, + MSEEnd, +}; + +MovementStatusElements MoveNormalFall[] = +{ + MSECounter, + MSEHasGuidByte3, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte4, + MSEHasGuidByte6, + MSEHasGuidByte2, + MSEGuidByte2, + MSEGuidByte7, + MSEGuidByte1, + MSEGuidByte4, + MSEGuidByte5, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte6, + MSEEnd, +}; + +void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet) +{ + MovementStatusElements element = _elements[_index++]; + + if (element >= MSEHasGuidByte0 && element <= MSEHasGuidByte7) + { + Data.guid[element - MSEHasGuidByte0] = packet.ReadBit(); + return; + } + + if (element >= MSEGuidByte0 && element <= MSEGuidByte7) + { + packet.ReadByteSeq(Data.guid[element - MSEGuidByte0]); + return; + } + + if (element == MSEExtraFloat) + { + packet >> Data.floatData; + return; + } +} + + +void Movement::ExtraMovementStatusElement::WriteNextElement(ByteBuffer& packet) +{ + MovementStatusElements element = _elements[_index++]; + + if (element >= MSEHasGuidByte0 && element <= MSEHasGuidByte7) + { + packet.WriteBit(Data.guid[element - MSEHasGuidByte0]); + return; + } + + if (element >= MSEGuidByte0 && element <= MSEGuidByte7) + { + packet.WriteByteSeq(Data.guid[element - MSEGuidByte0]); + return; + } + + if (element == MSEExtraFloat) + { + packet << Data.floatData; + return; + } +} + +Movement::PacketSender::PacketSender(Unit* unit, Opcodes serverControl, Opcodes playerControl, Opcodes broadcast /*= SMSG_PLAYER_MOVE*/, ExtraMovementStatusElement* extras /*= NULL*/) + : _unit(unit), _extraElements(extras) +{ + if (unit->GetTypeId() == TYPEID_PLAYER && unit->ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER) + { + _selfOpcode = playerControl; + _broadcast = broadcast; + } + else + { + _selfOpcode = NULL_OPCODE; + _broadcast = serverControl; + } +} + +void Movement::PacketSender::Send() const +{ + bool isPlayerMovement = _unit->GetTypeId() == TYPEID_PLAYER && _unit->ToPlayer()->m_mover->GetTypeId() == TYPEID_PLAYER; + if (isPlayerMovement && _selfOpcode != NULL_OPCODE) + { + WorldPacket data(_selfOpcode); + _unit->WriteMovementInfo(data, _extraElements); + _unit->ToPlayer()->SendDirectMessage(&data); + } + + if (_broadcast != NULL_OPCODE) + { + WorldPacket data(_broadcast); + _unit->WriteMovementInfo(data, _extraElements); + _unit->SendMessageToSet(&data, !isPlayerMovement); + } +} + +MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode) +{ + switch (opcode) + { + case MSG_MOVE_FALL_LAND: + return MovementFallLandSequence; + case MSG_MOVE_HEARTBEAT: + return MovementHeartBeatSequence; + case MSG_MOVE_JUMP: + return MovementJumpSequence; + case MSG_MOVE_SET_FACING: + return MovementSetFacingSequence; + case MSG_MOVE_SET_PITCH: + return MovementSetPitchSequence; + case MSG_MOVE_START_ASCEND: + return MovementStartAscendSequence; + case MSG_MOVE_START_BACKWARD: + return MovementStartBackwardSequence; + case MSG_MOVE_START_DESCEND: + return MovementStartDescendSequence; + case MSG_MOVE_START_FORWARD: + return MovementStartForwardSequence; + case MSG_MOVE_START_PITCH_DOWN: + return MovementStartPitchDownSequence; + case MSG_MOVE_START_PITCH_UP: + return MovementStartPitchUpSequence; + case MSG_MOVE_START_STRAFE_LEFT: + return MovementStartStrafeLeftSequence; + case MSG_MOVE_START_STRAFE_RIGHT: + return MovementStartStrafeRightSequence; + case MSG_MOVE_START_SWIM: + return MovementStartSwimSequence; + case MSG_MOVE_START_TURN_LEFT: + return MovementStartTurnLeftSequence; + case MSG_MOVE_START_TURN_RIGHT: + return MovementStartTurnRightSequence; + case MSG_MOVE_STOP: + return MovementStopSequence; + case MSG_MOVE_STOP_ASCEND: + return MovementStopAscendSequence; + case MSG_MOVE_STOP_PITCH: + return MovementStopPitchSequence; + case MSG_MOVE_STOP_STRAFE: + return MovementStopStrafeSequence; + case MSG_MOVE_STOP_SWIM: + return MovementStopSwimSequence; + case MSG_MOVE_STOP_TURN: + return MovementStopTurnSequence; + case SMSG_PLAYER_MOVE: + return PlayerMoveSequence; + case CMSG_MOVE_CHNG_TRANSPORT: + return MoveChngTransport; + case CMSG_MOVE_SPLINE_DONE: + return MoveSplineDone; + case CMSG_MOVE_NOT_ACTIVE_MOVER: + return MoveNotActiveMover; + case CMSG_DISMISS_CONTROLLED_VEHICLE: + return DismissControlledVehicle; + case SMSG_MOVE_UPDATE_TELEPORT: + return MoveUpdateTeleport; + case CMSG_FORCE_MOVE_ROOT_ACK: + return ForceMoveRootAck; + case CMSG_FORCE_MOVE_UNROOT_ACK: + return ForceMoveUnrootAck; + case CMSG_MOVE_FALL_RESET: + return MovementFallReset; + case CMSG_MOVE_FEATHER_FALL_ACK: + return MovementFeatherFallAck; + case CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK: + return MovementForceFlightSpeedChangeAck; + case CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK: + return MovementForceRunBackSpeedChangeAck; + case CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK: + return MovementForceRunSpeedChangeAck; + case CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK: + return MovementForceSwimSpeedChangeAck; + case CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK: + return MovementForceWalkSpeedChangeAck; + case CMSG_MOVE_GRAVITY_DISABLE_ACK: + return MovementGravityDisableAck; + case CMSG_MOVE_GRAVITY_ENABLE_ACK: + return MovementGravityEnableAck; + case CMSG_MOVE_HOVER_ACK: + return MovementHoverAck; + case CMSG_MOVE_KNOCK_BACK_ACK: + return MovementKnockBackAck; + case CMSG_MOVE_SET_CAN_FLY: + return MovementSetCanFly; + case CMSG_MOVE_SET_CAN_FLY_ACK: + return MovementSetCanFlyAck; + case CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK: + return MovementSetCanTransitionBetweenSwimAndFlyAck; + case SMSG_MOVE_SET_COLLISION_HEIGHT: + return MoveSetCollisionHeight; + case CMSG_MOVE_SET_COLLISION_HEIGHT_ACK: + return MovementSetCollisionHeightAck; + case SMSG_MOVE_UPDATE_COLLISION_HEIGHT: + return MovementUpdateCollisionHeight; + case CMSG_MOVE_WATER_WALK_ACK: + return MovementWaterWalkAck; + case MSG_MOVE_SET_RUN_MODE: + return MovementSetRunMode; + case MSG_MOVE_SET_WALK_MODE: + return MovementSetWalkMode; + case SMSG_MOVE_UPDATE_FLIGHT_SPEED: + return MovementUpdateFlightSpeed; + case SMSG_MOVE_UPDATE_RUN_SPEED: + return MovementUpdateRunSpeed; + case SMSG_MOVE_UPDATE_KNOCK_BACK: + return MovementUpdateKnockBack; + case SMSG_MOVE_UPDATE_RUN_BACK_SPEED: + return MovementUpdateRunBackSpeed; + case SMSG_MOVE_UPDATE_SWIM_SPEED: + return MovementUpdateSwimSpeed; + case SMSG_MOVE_UPDATE_WALK_SPEED: + return MovementUpdateWalkSpeed; + case SMSG_SPLINE_MOVE_SET_WALK_SPEED: + return SplineMoveSetWalkSpeed; + case SMSG_SPLINE_MOVE_SET_RUN_SPEED: + return SplineMoveSetRunSpeed; + case SMSG_SPLINE_MOVE_SET_RUN_BACK_SPEED: + return SplineMoveSetRunBackSpeed; + case SMSG_SPLINE_MOVE_SET_SWIM_SPEED: + return SplineMoveSetSwimSpeed; + case SMSG_SPLINE_MOVE_SET_SWIM_BACK_SPEED: + return SplineMoveSetSwimBackSpeed; + case SMSG_SPLINE_MOVE_SET_TURN_RATE: + return SplineMoveSetTurnRate; + case SMSG_SPLINE_MOVE_SET_FLIGHT_SPEED: + return SplineMoveSetFlightSpeed; + case SMSG_SPLINE_MOVE_SET_FLIGHT_BACK_SPEED: + return SplineMoveSetFlightBackSpeed; + case SMSG_SPLINE_MOVE_SET_PITCH_RATE: + return SplineMoveSetPitchRate; + case SMSG_MOVE_SET_WALK_SPEED: + return MoveSetWalkSpeed; + case SMSG_MOVE_SET_RUN_SPEED: + return MoveSetRunSpeed; + case SMSG_MOVE_SET_RUN_BACK_SPEED: + return MoveSetRunBackSpeed; + case SMSG_MOVE_SET_SWIM_SPEED: + return MoveSetSwimSpeed; + case SMSG_MOVE_SET_SWIM_BACK_SPEED: + return MoveSetSwimBackSpeed; + case SMSG_MOVE_SET_TURN_RATE: + return MoveSetTurnRate; + case SMSG_MOVE_SET_FLIGHT_SPEED: + return MoveSetFlightSpeed; + case SMSG_MOVE_SET_FLIGHT_BACK_SPEED: + return MoveSetFlightBackSpeed; + case SMSG_MOVE_SET_PITCH_RATE: + return MoveSetPitchRate; + case SMSG_SPLINE_MOVE_SET_WALK_MODE: + return SplineMoveSetWalkMode; + case SMSG_SPLINE_MOVE_SET_RUN_MODE: + return SplineMoveSetRunMode; + case SMSG_SPLINE_MOVE_GRAVITY_DISABLE: + return SplineMoveGravityDisable; + case SMSG_SPLINE_MOVE_GRAVITY_ENABLE: + return SplineMoveGravityEnable; + case SMSG_SPLINE_MOVE_SET_HOVER: + return SplineMoveSetHover; + case SMSG_SPLINE_MOVE_UNSET_HOVER: + return SplineMoveUnsetHover; + case SMSG_MOVE_SET_CAN_FLY: + return MoveSetCanFly; + case SMSG_MOVE_UNSET_CAN_FLY: + return MoveUnsetCanFly; + case SMSG_MOVE_SET_HOVER: + return MoveSetHover; + case SMSG_MOVE_UNSET_HOVER: + return MoveUnsetHover; + case SMSG_MOVE_WATER_WALK: + return MoveWaterWalk; + case SMSG_MOVE_LAND_WALK: + return MoveLandWalk; + case SMSG_MOVE_FEATHER_FALL: + return MoveFeatherFall; + case SMSG_MOVE_NORMAL_FALL: + return MoveNormalFall; + default: + break; + } + + return NULL; +} diff --git a/src/server/game/Movement/MovementStructures.h b/src/server/game/Movement/MovementStructures.h index 3c537376ba0..7269b36c3f2 100644 --- a/src/server/game/Movement/MovementStructures.h +++ b/src/server/game/Movement/MovementStructures.h @@ -91,2170 +91,52 @@ enum MovementStatusElements MSECounter, - // Speed - MSESpeedWalk, - MSESpeedRun, - MSESpeedRunBack, - MSESpeedSwim, - MSESpeedSwimBack, - MSESpeedTurnRate, - MSESpeedFlight, - MSESpeedFlightBack, - MSESpeedPitchRate, - // Special - MSEZeroBit, // writes bit value 1 or skips read bit - MSEOneBit, // writes bit value 0 or skips read bit - MSEEnd, // marks end of parsing + MSEZeroBit, // writes bit value 1 or skips read bit + MSEOneBit, // writes bit value 0 or skips read bit + MSEEnd, // marks end of parsing + MSEExtraElement, // Used to sinalize reading into ExtraMovementStatusElement, element sequence inside it is declared as separate array + // Allowed internal elements are: GUID markers (not transport) and MSEExtraFloat + MSEExtraFloat, MSE_COUNT }; -//4.3.4 -MovementStatusElements PlayerMoveSequence[] = -{ - MSEHasFallData, - MSEHasGuidByte3, - MSEHasGuidByte6, - MSEHasMovementFlags2, - MSEHasSpline, - MSEHasTimestamp, - MSEHasGuidByte0, - MSEHasGuidByte1, - MSEMovementFlags2, - MSEHasGuidByte7, - MSEHasMovementFlags, - MSEHasOrientation, - MSEHasGuidByte2, - MSEHasSplineElevation, - MSEZeroBit, - MSEHasGuidByte4, - MSEHasFallDirection, - MSEHasGuidByte5, - MSEHasTransportData, - MSEMovementFlags, - MSEHasTransportGuidByte3, - MSEHasTransportTime3, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte4, - MSEHasTransportTime2, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte2, - MSEHasPitch, - MSEGuidByte5, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallVerticalSpeed, - MSEFallTime, - MSESplineElevation, - MSEGuidByte7, - MSEPositionY, - MSEGuidByte3, - MSETransportTime3, - MSETransportGuidByte6, - MSETransportSeat, - MSETransportGuidByte5, - MSETransportPositionX, - MSETransportGuidByte1, - MSETransportOrientation, - MSETransportGuidByte2, - MSETransportTime2, - MSETransportGuidByte0, - MSETransportPositionZ, - MSETransportGuidByte7, - MSETransportGuidByte4, - MSETransportGuidByte3, - MSETransportPositionY, - MSETransportTime, - MSEGuidByte4, - MSEPositionX, - MSEGuidByte6, - MSEPositionZ, - MSETimestamp, - MSEGuidByte2, - MSEPitch, - MSEGuidByte0, - MSEOrientation, - MSEGuidByte1, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementFallLandSequence[] = -{ - MSEPositionX, - MSEPositionY, - MSEPositionZ, - MSEHasTransportData, - MSEHasGuidByte7, - MSEHasGuidByte1, - MSEHasMovementFlags2, - MSEHasGuidByte3, - MSEHasSplineElevation, - MSEHasOrientation, - MSEHasGuidByte6, - MSEHasTimestamp, - MSEZeroBit, - MSEHasPitch, - MSEHasGuidByte4, - MSEHasSpline, - MSEHasGuidByte5, - MSEHasMovementFlags, - MSEHasFallData, - MSEHasGuidByte0, - MSEHasGuidByte2, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportTime2, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte7, - MSEMovementFlags2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte1, - MSEGuidByte7, - MSEGuidByte4, - MSEGuidByte3, - MSEGuidByte6, - MSEGuidByte0, - MSEGuidByte2, - MSEGuidByte5, - MSETransportTime, - MSETransportPositionZ, - MSETransportPositionY, - MSETransportPositionX, - MSETransportGuidByte5, - MSETransportTime3, - MSETransportGuidByte1, - MSETransportSeat, - MSETransportTime2, - MSETransportGuidByte4, - MSETransportOrientation, - MSETransportGuidByte0, - MSETransportGuidByte7, - MSETransportGuidByte3, - MSETransportGuidByte6, - MSETransportGuidByte2, - MSEFallVerticalSpeed, - MSEFallTime, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSESplineElevation, - MSETimestamp, - MSEPitch, - MSEOrientation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementHeartBeatSequence[] = -{ - MSEPositionZ, - MSEPositionX, - MSEPositionY, - MSEHasPitch, - MSEHasTimestamp, - MSEHasFallData, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasGuidByte7, - MSEHasGuidByte1, - MSEHasGuidByte0, - MSEHasGuidByte4, - MSEHasGuidByte2, - MSEHasOrientation, - MSEHasGuidByte5, - MSEHasGuidByte3, - MSEHasSplineElevation, - MSEHasSpline, - MSEZeroBit, - MSEHasGuidByte6, - MSEHasMovementFlags, - MSEHasTransportTime3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte2, - MSEHasTransportTime2, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte1, - MSEHasFallDirection, - MSEMovementFlags, - MSEMovementFlags2, - MSEGuidByte3, - MSEGuidByte6, - MSEGuidByte1, - MSEGuidByte7, - MSEGuidByte2, - MSEGuidByte5, - MSEGuidByte0, - MSEGuidByte4, - MSETransportPositionZ, - MSETransportSeat, - MSETransportOrientation, - MSETransportGuidByte4, - MSETransportPositionY, - MSETransportTime, - MSETransportPositionX, - MSETransportGuidByte5, - MSETransportGuidByte1, - MSETransportGuidByte3, - MSETransportGuidByte7, - MSETransportTime3, - MSETransportTime2, - MSETransportGuidByte2, - MSETransportGuidByte0, - MSETransportGuidByte6, - MSEOrientation, - MSEFallVerticalSpeed, - MSEFallTime, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEPitch, - MSESplineElevation, - MSETimestamp, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementJumpSequence[] = -{ - MSEPositionY, - MSEPositionX, - MSEPositionZ, - MSEHasTimestamp, - MSEHasGuidByte5, - MSEHasMovementFlags, - MSEHasGuidByte4, - MSEHasGuidByte6, - MSEHasMovementFlags2, - MSEHasGuidByte0, - MSEHasTransportData, - MSEHasGuidByte3, - MSEHasPitch, - MSEHasGuidByte7, - MSEHasFallData, - MSEHasSpline, - MSEHasOrientation, - MSEHasGuidByte1, - MSEHasSplineElevation, - MSEZeroBit, - MSEHasGuidByte2, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte4, - MSEHasTransportTime3, - MSEHasTransportTime2, - MSEHasTransportGuidByte2, - MSEHasFallDirection, - MSEMovementFlags, - MSEMovementFlags2, - MSEGuidByte6, - MSEGuidByte5, - MSEGuidByte4, - MSEGuidByte0, - MSEGuidByte2, - MSEGuidByte3, - MSEGuidByte7, - MSEGuidByte1, - MSETransportGuidByte1, - MSETransportGuidByte7, - MSETransportPositionX, - MSETransportGuidByte4, - MSETransportTime3, - MSETransportGuidByte0, - MSETransportOrientation, - MSETransportTime2, - MSETransportTime, - MSETransportGuidByte6, - MSETransportPositionZ, - MSETransportSeat, - MSETransportPositionY, - MSETransportGuidByte3, - MSETransportGuidByte2, - MSETransportGuidByte5, - MSEPitch, - MSETimestamp, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallVerticalSpeed, - MSEFallTime, - MSESplineElevation, - MSEOrientation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementSetFacingSequence[] = -{ - MSEPositionX, - MSEPositionY, - MSEPositionZ, - MSEHasGuidByte6, - MSEHasTransportData, - MSEHasGuidByte4, - MSEHasSpline, - MSEHasGuidByte0, - MSEHasOrientation, - MSEHasTimestamp, - MSEHasPitch, - MSEHasMovementFlags2, - MSEHasGuidByte5, - MSEHasGuidByte7, - MSEHasGuidByte2, - MSEHasFallData, - MSEHasSplineElevation, - MSEHasMovementFlags, - MSEHasGuidByte3, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasTransportTime3, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte0, - MSEHasTransportTime2, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte1, - MSEHasFallDirection, - MSEMovementFlags2, - MSEMovementFlags, - MSEGuidByte6, - MSEGuidByte7, - MSEGuidByte2, - MSEGuidByte0, - MSEGuidByte4, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte3, - MSETransportGuidByte0, - MSETransportPositionX, - MSETransportGuidByte1, - MSETransportTime2, - MSETransportGuidByte4, - MSETransportPositionZ, - MSETransportOrientation, - MSETransportGuidByte2, - MSETransportTime3, - MSETransportGuidByte3, - MSETransportSeat, - MSETransportPositionY, - MSETransportGuidByte5, - MSETransportGuidByte6, - MSETransportTime, - MSETransportGuidByte7, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallTime, - MSEFallVerticalSpeed, - MSESplineElevation, - MSEOrientation, - MSETimestamp, - MSEPitch, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementSetPitchSequence[] = -{ - MSEPositionX, - MSEPositionZ, - MSEPositionY, - MSEHasFallData, - MSEHasMovementFlags, - MSEHasGuidByte1, - MSEHasOrientation, - MSEHasGuidByte7, - MSEHasGuidByte3, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasSplineElevation, - MSEHasGuidByte6, - MSEHasPitch, - MSEHasGuidByte4, - MSEHasSpline, - MSEHasGuidByte2, - MSEZeroBit, - MSEHasTimestamp, - MSEHasGuidByte0, - MSEHasGuidByte5, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte5, - MSEHasTransportTime3, - MSEHasTransportGuidByte7, - MSEHasTransportTime2, - MSEMovementFlags2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte3, - MSEGuidByte7, - MSEGuidByte1, - MSEGuidByte6, - MSEGuidByte0, - MSEGuidByte5, - MSEGuidByte2, - MSEGuidByte4, - MSETransportGuidByte4, - MSETransportGuidByte3, - MSETransportGuidByte6, - MSETransportOrientation, - MSETransportGuidByte1, - MSETransportTime3, - MSETransportTime, - MSETransportGuidByte2, - MSETransportPositionZ, - MSETransportGuidByte0, - MSETransportTime2, - MSETransportPositionY, - MSETransportGuidByte5, - MSETransportSeat, - MSETransportGuidByte7, - MSETransportPositionX, - MSEFallVerticalSpeed, - MSEFallTime, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEPitch, - MSESplineElevation, - MSETimestamp, - MSEOrientation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartBackwardSequence[] = -{ - MSEPositionX, - MSEPositionZ, - MSEPositionY, - MSEHasTransportData, - MSEHasGuidByte3, - MSEHasGuidByte0, - MSEHasGuidByte2, - MSEHasTimestamp, - MSEHasGuidByte7, - MSEHasPitch, - MSEZeroBit, - MSEHasMovementFlags, - MSEHasOrientation, - MSEHasSpline, - MSEHasMovementFlags2, - MSEHasFallData, - MSEHasGuidByte5, - MSEHasGuidByte1, - MSEHasGuidByte4, - MSEHasGuidByte6, - MSEHasSplineElevation, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte1, - MSEHasTransportTime2, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte4, - MSEHasTransportTime3, - MSEMovementFlags, - MSEMovementFlags2, - MSEHasFallDirection, - MSEGuidByte6, - MSEGuidByte7, - MSEGuidByte4, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte0, - MSEGuidByte2, - MSEGuidByte3, - MSETransportPositionZ, - MSETransportGuidByte2, - MSETransportTime3, - MSETransportGuidByte0, - MSETransportGuidByte5, - MSETransportPositionY, - MSETransportGuidByte1, - MSETransportPositionX, - MSETransportTime2, - MSETransportGuidByte4, - MSETransportOrientation, - MSETransportSeat, - MSETransportGuidByte7, - MSETransportTime, - MSETransportGuidByte6, - MSETransportGuidByte3, - MSEPitch, - MSETimestamp, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallVerticalSpeed, - MSEFallTime, - MSEOrientation, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartForwardSequence[] = -{ - MSEPositionY, - MSEPositionZ, - MSEPositionX, - MSEHasGuidByte5, - MSEHasGuidByte2, - MSEHasGuidByte0, - MSEZeroBit, - MSEHasMovementFlags, - MSEHasGuidByte7, - MSEHasGuidByte3, - MSEHasGuidByte1, - MSEHasOrientation, - MSEHasGuidByte6, - MSEHasSpline, - MSEHasSplineElevation, - MSEHasGuidByte4, - MSEHasTransportData, - MSEHasTimestamp, - MSEHasPitch, - MSEHasMovementFlags2, - MSEHasFallData, - MSEMovementFlags, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte1, - MSEHasTransportTime3, - MSEHasTransportTime2, - MSEHasFallDirection, - MSEMovementFlags2, - MSEGuidByte2, - MSEGuidByte4, - MSEGuidByte6, - MSEGuidByte1, - MSEGuidByte7, - MSEGuidByte3, - MSEGuidByte5, - MSEGuidByte0, - MSEFallVerticalSpeed, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallTime, - MSETransportGuidByte3, - MSETransportPositionY, - MSETransportPositionZ, - MSETransportGuidByte1, - MSETransportGuidByte4, - MSETransportGuidByte7, - MSETransportOrientation, - MSETransportGuidByte2, - MSETransportPositionX, - MSETransportGuidByte5, - MSETransportTime3, - MSETransportTime, - MSETransportGuidByte6, - MSETransportGuidByte0, - MSETransportSeat, - MSETransportTime2, - MSESplineElevation, - MSEPitch, - MSEOrientation, - MSETimestamp, - - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartStrafeLeftSequence[] = -{ - MSEPositionZ, - MSEPositionX, - MSEPositionY, - MSEHasSplineElevation, - MSEHasGuidByte5, - MSEHasPitch, - MSEHasGuidByte6, - MSEHasTimestamp, - MSEHasGuidByte1, - MSEZeroBit, - MSEHasGuidByte4, - MSEHasGuidByte0, - MSEHasGuidByte2, - MSEHasFallData, - MSEHasOrientation, - MSEHasGuidByte3, - MSEHasMovementFlags2, - MSEHasGuidByte7, - MSEHasSpline, - MSEHasMovementFlags, - MSEHasTransportData, - MSEHasFallDirection, - MSEHasTransportTime2, - MSEHasTransportGuidByte7, - MSEHasTransportTime3, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte0, - MSEMovementFlags, - MSEMovementFlags2, - MSEGuidByte2, - MSEGuidByte6, - MSEGuidByte3, - MSEGuidByte1, - MSEGuidByte0, - MSEGuidByte7, - MSEGuidByte4, - MSEGuidByte5, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallTime, - MSEFallVerticalSpeed, - MSETransportSeat, - MSETransportGuidByte2, - MSETransportTime2, - MSETransportGuidByte3, - MSETransportPositionZ, - MSETransportTime3, - MSETransportGuidByte0, - MSETransportGuidByte7, - MSETransportPositionY, - MSETransportGuidByte5, - MSETransportGuidByte1, - MSETransportOrientation, - MSETransportTime, - MSETransportGuidByte6, - MSETransportGuidByte4, - MSETransportPositionX, - MSETimestamp, - MSEOrientation, - MSEPitch, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartStrafeRightSequence[] = -{ - MSEPositionY, - MSEPositionX, - MSEPositionZ, - MSEHasPitch, - MSEHasGuidByte1, - MSEHasOrientation, - MSEHasGuidByte4, - MSEHasSpline, - MSEZeroBit, - MSEHasGuidByte5, - MSEHasFallData, - MSEHasSplineElevation, - MSEHasTimestamp, - MSEHasMovementFlags, - MSEHasGuidByte2, - MSEHasGuidByte7, - MSEHasGuidByte6, - MSEHasGuidByte3, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasGuidByte0, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte0, - MSEHasTransportTime2, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte4, - MSEHasTransportTime3, - MSEMovementFlags2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte7, - MSEGuidByte5, - MSEGuidByte3, - MSEGuidByte1, - MSEGuidByte2, - MSEGuidByte4, - MSEGuidByte6, - MSEGuidByte0, - MSETransportGuidByte5, - MSETransportGuidByte1, - MSETransportGuidByte6, - MSETransportPositionY, - MSETransportOrientation, - MSETransportGuidByte0, - MSETransportGuidByte2, - MSETransportSeat, - MSETransportPositionX, - MSETransportTime3, - MSETransportTime, - MSETransportGuidByte4, - MSETransportGuidByte7, - MSETransportTime2, - MSETransportPositionZ, - MSETransportGuidByte3, - MSEPitch, - MSEOrientation, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallTime, - MSEFallVerticalSpeed, - MSETimestamp, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartTurnLeftSequence[] = -{ - MSEPositionY, - MSEPositionX, - MSEPositionZ, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasOrientation, - MSEHasSpline, - MSEHasMovementFlags, - MSEHasGuidByte4, - MSEHasGuidByte2, - MSEHasMovementFlags2, - MSEHasGuidByte5, - MSEHasGuidByte7, - MSEHasTransportData, - MSEHasGuidByte6, - MSEHasSplineElevation, - MSEHasGuidByte0, - MSEHasGuidByte3, - MSEHasPitch, - MSEHasTimestamp, - MSEHasFallData, - MSEMovementFlags2, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte0, - MSEHasTransportTime2, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte6, - MSEHasFallDirection, - MSEMovementFlags, - MSEGuidByte0, - MSEGuidByte4, - MSEGuidByte7, - MSEGuidByte5, - MSEGuidByte6, - MSEGuidByte3, - MSEGuidByte2, - MSEGuidByte1, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallVerticalSpeed, - MSEFallTime, - MSETransportGuidByte0, - MSETransportPositionX, - MSETransportTime, - MSETransportSeat, - MSETransportPositionZ, - MSETransportGuidByte4, - MSETransportOrientation, - MSETransportGuidByte2, - MSETransportGuidByte6, - MSETransportGuidByte1, - MSETransportGuidByte3, - MSETransportPositionY, - MSETransportTime3, - MSETransportTime2, - MSETransportGuidByte5, - MSETransportGuidByte7, - MSETimestamp, - MSEPitch, - MSEOrientation, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartTurnRightSequence[] = -{ - MSEPositionX, - MSEPositionZ, - MSEPositionY, - MSEHasGuidByte3, - MSEHasGuidByte5, - MSEHasMovementFlags, - MSEHasSpline, - MSEHasGuidByte0, - MSEHasOrientation, - MSEHasTransportData, - MSEHasGuidByte7, - MSEZeroBit, - MSEHasMovementFlags2, - MSEHasGuidByte1, - MSEHasTimestamp, - MSEHasGuidByte6, - MSEHasGuidByte2, - MSEHasGuidByte4, - MSEHasSplineElevation, - MSEHasPitch, - MSEHasFallData, - MSEHasTransportGuidByte1, - MSEHasTransportTime2, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte7, - MSEHasTransportTime3, - MSEMovementFlags2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte5, - MSEGuidByte0, - MSEGuidByte7, - MSEGuidByte3, - MSEGuidByte2, - MSEGuidByte1, - MSEGuidByte4, - MSEGuidByte6, - MSETransportPositionY, - MSETransportGuidByte0, - MSETransportGuidByte4, - MSETransportGuidByte1, - MSETransportGuidByte6, - MSETransportGuidByte2, - MSETransportSeat, - MSETransportOrientation, - MSETransportGuidByte5, - MSETransportTime3, - MSETransportPositionZ, - MSETransportPositionX, - MSETransportTime, - MSETransportGuidByte7, - MSETransportGuidByte3, - MSETransportTime2, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallTime, - MSEFallVerticalSpeed, - MSEPitch, - MSEOrientation, - MSESplineElevation, - MSETimestamp, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStopSequence[] = -{ - MSEPositionX, - MSEPositionY, - MSEPositionZ, - MSEHasGuidByte3, - MSEHasGuidByte6, - MSEHasSplineElevation, - MSEHasSpline, - MSEHasOrientation, - MSEHasGuidByte7, - MSEHasMovementFlags, - MSEHasGuidByte5, - MSEHasFallData, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasTimestamp, - MSEHasGuidByte4, - MSEHasGuidByte1, - MSEZeroBit, - MSEHasGuidByte2, - MSEHasGuidByte0, - MSEHasPitch, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte5, - MSEHasTransportTime2, - MSEHasTransportTime3, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte2, - MSEMovementFlags, - MSEMovementFlags2, - MSEHasFallDirection, - MSEGuidByte6, - MSEGuidByte3, - MSEGuidByte0, - MSEGuidByte4, - MSEGuidByte2, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte7, - MSETransportGuidByte4, - MSETransportGuidByte7, - MSETransportTime, - MSETransportSeat, - MSETransportPositionZ, - MSETransportTime3, - MSETransportGuidByte2, - MSETransportGuidByte0, - MSETransportPositionY, - MSETransportGuidByte1, - MSETransportGuidByte3, - MSETransportTime2, - MSETransportPositionX, - MSETransportOrientation, - MSETransportGuidByte5, - MSETransportGuidByte6, - MSETimestamp, - MSEOrientation, - MSEPitch, - MSESplineElevation, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallVerticalSpeed, - MSEFallTime, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStopStrafeSequence[] = -{ - MSEPositionY, - MSEPositionZ, - MSEPositionX, - MSEHasPitch, - MSEHasTimestamp, - MSEHasGuidByte2, - MSEHasFallData, - MSEHasGuidByte7, - MSEHasSplineElevation, - MSEHasGuidByte3, - MSEHasOrientation, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasMovementFlags, - MSEHasSpline, - MSEHasGuidByte0, - MSEZeroBit, - MSEHasGuidByte6, - MSEHasGuidByte5, - MSEHasGuidByte1, - MSEHasGuidByte4, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte5, - MSEHasTransportTime2, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte3, - MSEHasTransportTime3, - MSEMovementFlags, - MSEHasFallDirection, - MSEMovementFlags2, - MSEGuidByte2, - MSEGuidByte7, - MSEGuidByte3, - MSEGuidByte4, - MSEGuidByte5, - MSEGuidByte6, - MSEGuidByte1, - MSEGuidByte0, - MSETransportSeat, - MSETransportGuidByte6, - MSETransportPositionZ, - MSETransportTime3, - MSETransportGuidByte1, - MSETransportGuidByte3, - MSETransportGuidByte2, - MSETransportGuidByte4, - MSETransportGuidByte5, - MSETransportTime, - MSETransportOrientation, - MSETransportPositionX, - MSETransportGuidByte0, - MSETransportPositionY, - MSETransportTime2, - MSETransportGuidByte7, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallTime, - MSEFallVerticalSpeed, - MSESplineElevation, - MSEOrientation, - MSEPitch, - MSETimestamp, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStopTurnSequence[] = -{ - MSEPositionX, - MSEPositionZ, - MSEPositionY, - MSEHasGuidByte5, - MSEHasGuidByte4, - MSEHasFallData, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasGuidByte0, - MSEHasSpline, - MSEHasMovementFlags, - MSEHasGuidByte2, - MSEHasGuidByte6, - MSEHasPitch, - MSEHasTransportData, - MSEHasGuidByte3, - MSEHasSplineElevation, - MSEHasTimestamp, - MSEHasMovementFlags2, - MSEHasOrientation, - MSEHasGuidByte7, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte7, - MSEHasTransportTime3, - MSEHasTransportGuidByte4, - MSEHasTransportTime2, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte1, - MSEHasFallDirection, - MSEMovementFlags, - MSEMovementFlags2, - MSEGuidByte3, - MSEGuidByte2, - MSEGuidByte6, - MSEGuidByte4, - MSEGuidByte0, - MSEGuidByte7, - MSEGuidByte1, - MSEGuidByte5, - MSESplineElevation, - MSETransportPositionX, - MSETransportGuidByte5, - MSETransportSeat, - MSETransportGuidByte2, - MSETransportGuidByte3, - MSETransportOrientation, - MSETransportTime2, - MSETransportTime3, - MSETransportGuidByte7, - MSETransportGuidByte1, - MSETransportGuidByte0, - MSETransportGuidByte4, - MSETransportPositionY, - MSETransportPositionZ, - MSETransportTime, - MSETransportGuidByte6, - MSEFallTime, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallVerticalSpeed, - MSETimestamp, - MSEPitch, - MSEOrientation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartAscendSequence[] = -{ - MSEPositionX, - MSEPositionY, - MSEPositionZ, - MSEHasGuidByte0, - MSEHasGuidByte1, - MSEHasGuidByte7, - MSEZeroBit, - MSEHasGuidByte5, - MSEHasTransportData, - MSEHasGuidByte2, - MSEHasSplineElevation, - MSEHasFallData, - MSEHasSpline, - MSEHasGuidByte3, - MSEHasMovementFlags2, - MSEHasGuidByte6, - MSEHasMovementFlags, - MSEHasPitch, - MSEHasTimestamp, - MSEHasOrientation, - MSEHasGuidByte4, - MSEMovementFlags, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte4, - MSEHasTransportTime2, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte7, - MSEMovementFlags2, - MSEHasFallDirection, - MSEGuidByte6, - MSEGuidByte3, - MSEGuidByte1, - MSEGuidByte4, - MSEGuidByte2, - MSEGuidByte0, - MSEGuidByte5, - MSEGuidByte7, - MSETransportGuidByte3, - MSETransportGuidByte5, - MSETransportGuidByte4, - MSETransportSeat, - MSETransportGuidByte2, - MSETransportOrientation, - MSETransportPositionY, - MSETransportGuidByte7, - MSETransportTime2, - MSETransportPositionZ, - MSETransportTime3, - MSETransportGuidByte6, - MSETransportTime, - MSETransportGuidByte0, - MSETransportGuidByte1, - MSETransportPositionX, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallTime, - MSEFallVerticalSpeed, - MSEOrientation, - MSEPitch, - MSETimestamp, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartDescendSequence[] = +namespace Movement { - MSEPositionY, - MSEPositionZ, - MSEPositionX, - MSEHasGuidByte0, - MSEHasPitch, - MSEHasFallData, - MSEHasGuidByte4, - MSEHasOrientation, - MSEHasTimestamp, - MSEHasMovementFlags2, - MSEHasMovementFlags, - MSEHasGuidByte6, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasTransportData, - MSEHasSpline, - MSEHasSplineElevation, - MSEHasGuidByte5, - MSEHasGuidByte3, - MSEHasGuidByte7, - MSEHasGuidByte2, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte6, - MSEHasTransportTime2, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte5, - MSEMovementFlags2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte2, - MSEGuidByte7, - MSEGuidByte6, - MSEGuidByte0, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte4, - MSEGuidByte3, - MSEPitch, - MSETransportPositionZ, - MSETransportSeat, - MSETransportTime3, - MSETransportGuidByte6, - MSETransportTime2, - MSETransportGuidByte1, - MSETransportTime, - MSETransportGuidByte4, - MSETransportPositionY, - MSETransportPositionX, - MSETransportGuidByte7, - MSETransportGuidByte3, - MSETransportGuidByte5, - MSETransportGuidByte2, - MSETransportOrientation, - MSETransportGuidByte0, - MSEFallTime, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallVerticalSpeed, - MSETimestamp, - MSEOrientation, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartSwimSequence[] = -{ - MSEPositionZ, - MSEPositionX, - MSEPositionY, - MSEHasGuidByte3, - MSEHasSplineElevation, - MSEHasGuidByte4, - MSEHasGuidByte7, - MSEZeroBit, - MSEHasPitch, - MSEHasGuidByte0, - MSEHasOrientation, - MSEHasMovementFlags, - MSEHasFallData, - MSEHasGuidByte5, - MSEHasTransportData, - MSEHasMovementFlags2, - MSEHasTimestamp, - MSEHasGuidByte6, - MSEHasGuidByte1, - MSEHasSpline, - MSEHasGuidByte2, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte0, - MSEHasTransportTime2, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte1, - MSEHasTransportTime3, - MSEMovementFlags, - MSEHasFallDirection, - MSEMovementFlags2, - MSEGuidByte0, - MSEGuidByte2, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte4, - MSEGuidByte6, - MSEGuidByte3, - MSEGuidByte7, - MSEPitch, - MSETransportTime2, - MSETransportGuidByte2, - MSETransportPositionY, - MSETransportGuidByte3, - MSETransportTime, - MSETransportPositionX, - MSETransportOrientation, - MSETransportTime3, - MSETransportGuidByte6, - MSETransportGuidByte5, - MSETransportGuidByte4, - MSETransportPositionZ, - MSETransportGuidByte1, - MSETransportGuidByte7, - MSETransportGuidByte0, - MSETransportSeat, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallVerticalSpeed, - MSEFallTime, - MSEOrientation, - MSETimestamp, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStopSwimSequence[] = -{ - MSEPositionX, - MSEPositionY, - MSEPositionZ, - MSEHasSpline, - MSEHasPitch, - MSEHasGuidByte5, - MSEHasGuidByte3, - MSEHasGuidByte7, - MSEHasSplineElevation, - MSEHasMovementFlags, - MSEHasGuidByte4, - MSEHasMovementFlags2, - MSEHasGuidByte2, - MSEHasGuidByte6, - MSEHasTransportData, - MSEHasOrientation, - MSEZeroBit, - MSEHasTimestamp, - MSEHasGuidByte1, - MSEHasGuidByte0, - MSEHasFallData, - MSEHasTransportTime3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte0, - MSEHasTransportTime2, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte5, - MSEMovementFlags, - MSEMovementFlags2, - MSEHasFallDirection, - MSEGuidByte0, - MSEGuidByte4, - MSEGuidByte3, - MSEGuidByte6, - MSEGuidByte7, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte2, - MSETransportTime3, - MSETransportGuidByte4, - MSETransportTime, - MSETransportPositionZ, - MSETransportSeat, - MSETransportGuidByte3, - MSETransportGuidByte2, - MSETransportPositionY, - MSETransportGuidByte7, - MSETransportGuidByte1, - MSETransportGuidByte6, - MSETransportGuidByte5, - MSETransportTime2, - MSETransportPositionX, - MSETransportGuidByte0, - MSETransportOrientation, - MSEFallVerticalSpeed, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallTime, - MSETimestamp, - MSEPitch, - MSEOrientation, - MSESplineElevation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStopAscendSequence[] = -{ - MSEPositionZ, - MSEPositionY, - MSEPositionX, - MSEHasGuidByte3, - MSEHasGuidByte2, - MSEHasFallData, - MSEHasGuidByte7, - MSEHasOrientation, - MSEHasPitch, - MSEHasSpline, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasGuidByte4, - MSEHasMovementFlags, - MSEHasGuidByte0, - MSEHasGuidByte6, - MSEHasSplineElevation, - MSEHasTransportData, - MSEHasMovementFlags2, - MSEHasTimestamp, - MSEHasGuidByte5, - MSEHasTransportTime2, - MSEHasTransportTime3, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte0, - MSEMovementFlags2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte7, - MSEGuidByte5, - MSEGuidByte4, - MSEGuidByte3, - MSEGuidByte2, - MSEGuidByte1, - MSEGuidByte0, - MSEGuidByte6, - MSETransportGuidByte5, - MSETransportPositionY, - MSETransportGuidByte7, - MSETransportGuidByte2, - MSETransportGuidByte6, - MSETransportTime2, - MSETransportTime3, - MSETransportOrientation, - MSETransportGuidByte3, - MSETransportGuidByte4, - MSETransportSeat, - MSETransportGuidByte1, - MSETransportTime, - MSETransportGuidByte0, - MSETransportPositionX, - MSETransportPositionZ, - MSEFallTime, - MSEFallVerticalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEPitch, - MSESplineElevation, - MSETimestamp, - MSEOrientation, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStopPitchSequence[] = -{ - MSEPositionY, - MSEPositionX, - MSEPositionZ, - MSEHasGuidByte0, - MSEHasGuidByte5, - MSEHasGuidByte3, - MSEHasFallData, - MSEHasGuidByte2, - MSEHasGuidByte4, - MSEHasGuidByte7, - MSEHasPitch, - MSEHasSpline, - MSEHasOrientation, - MSEZeroBit, - MSEHasMovementFlags2, - MSEHasSplineElevation, - MSEHasGuidByte6, - MSEHasGuidByte1, - MSEHasTimestamp, - MSEHasTransportData, - MSEHasMovementFlags, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte3, - MSEHasTransportTime2, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte1, - MSEHasFallDirection, - MSEMovementFlags2, - MSEMovementFlags, - MSEGuidByte1, - MSEGuidByte7, - MSEGuidByte0, - MSEGuidByte6, - MSEGuidByte4, - MSEGuidByte3, - MSEGuidByte5, - MSEGuidByte2, - MSETimestamp, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallVerticalSpeed, - MSEFallTime, - MSETransportGuidByte5, - MSETransportGuidByte2, - MSETransportTime2, - MSETransportPositionX, - MSETransportOrientation, - MSETransportGuidByte6, - MSETransportGuidByte3, - MSETransportGuidByte1, - MSETransportPositionZ, - MSETransportTime3, - MSETransportGuidByte0, - MSETransportGuidByte4, - MSETransportTime, - MSETransportPositionY, - MSETransportSeat, - MSETransportGuidByte7, - MSESplineElevation, - MSEOrientation, - MSEPitch, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartPitchDownSequence[] = -{ - MSEPositionX, - MSEPositionZ, - MSEPositionY, - MSEHasMovementFlags, - MSEHasGuidByte7, - MSEHasGuidByte6, - MSEHasPitch, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasGuidByte4, - MSEHasTimestamp, - MSEHasSplineElevation, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasGuidByte0, - MSEHasGuidByte5, - MSEHasGuidByte3, - MSEHasSpline, - MSEHasOrientation, - MSEHasFallData, - MSEHasGuidByte2, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte5, - MSEHasTransportTime3, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte6, - MSEHasTransportTime2, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte2, - MSEMovementFlags2, - MSEHasFallDirection, - MSEMovementFlags, - MSEGuidByte3, - MSEGuidByte7, - MSEGuidByte0, - MSEGuidByte5, - MSEGuidByte2, - MSEGuidByte6, - MSEGuidByte4, - MSEGuidByte1, - MSETransportTime3, - MSETransportGuidByte3, - MSETransportTime2, - MSETransportGuidByte5, - MSETransportGuidByte1, - MSETransportPositionY, - MSETransportGuidByte6, - MSETransportGuidByte4, - MSETransportTime, - MSETransportPositionZ, - MSETransportPositionX, - MSETransportGuidByte0, - MSETransportSeat, - MSETransportGuidByte2, - MSETransportGuidByte7, - MSETransportOrientation, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallVerticalSpeed, - MSEFallTime, - MSEPitch, - MSEOrientation, - MSESplineElevation, - MSETimestamp, - MSEEnd, -}; - -//4.3.4 -MovementStatusElements MovementStartPitchUpSequence[] = -{ - MSEPositionZ, - MSEPositionY, - MSEPositionX, - MSEHasGuidByte4, - MSEHasMovementFlags, - MSEHasMovementFlags2, - MSEHasSpline, - MSEHasGuidByte2, - MSEHasGuidByte6, - MSEHasGuidByte3, - MSEZeroBit, - MSEHasSplineElevation, - MSEHasFallData, - MSEHasGuidByte0, - MSEHasTransportData, - MSEHasGuidByte1, - MSEHasGuidByte5, - MSEHasPitch, - MSEHasTimestamp, - MSEHasOrientation, - MSEHasGuidByte7, - MSEMovementFlags2, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte1, - MSEHasTransportTime2, - MSEHasTransportGuidByte4, - MSEHasTransportTime3, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte2, - MSEMovementFlags, - MSEHasFallDirection, - MSEGuidByte0, - MSEGuidByte3, - MSEGuidByte4, - MSEGuidByte6, - MSEGuidByte7, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte2, - MSETransportPositionX, - MSETransportGuidByte1, - MSETransportGuidByte3, - MSETransportGuidByte2, - MSETransportGuidByte0, - MSETransportTime, - MSETransportPositionZ, - MSETransportOrientation, - MSETransportGuidByte7, - MSETransportTime2, - MSETransportSeat, - MSETransportGuidByte6, - MSETransportGuidByte5, - MSETransportTime3, - MSETransportPositionY, - MSETransportGuidByte4, - MSEFallTime, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallVerticalSpeed, - MSEOrientation, - MSESplineElevation, - MSEPitch, - MSETimestamp, - MSEEnd, -}; - -MovementStatusElements MoveChngTransport[]= -{ - MSEPositionY, - MSEPositionX, - MSEPositionZ, - MSEHasGuidByte4, - MSEHasGuidByte0, - MSEHasGuidByte2, - MSEHasTransportData, - MSEHasSpline, - MSEHasOrientation, - MSEHasGuidByte6, - MSEHasTimestamp, - MSEHasGuidByte5, - MSEHasGuidByte7, - MSEHasPitch, - MSEZeroBit, - MSEHasGuidByte3, - MSEHasSplineElevation, - MSEHasGuidByte1, - MSEHasFallData, - MSEHasMovementFlags, - MSEHasMovementFlags2, - - MSEHasTransportGuidByte3, - MSEHasTransportTime3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte2, - MSEHasTransportTime2, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte5, - - MSEMovementFlags, - MSEMovementFlags2, - MSEHasFallDirection, - - MSEGuidByte7, - MSEGuidByte5, - MSEGuidByte1, - MSEGuidByte2, - MSEGuidByte6, - MSEGuidByte4, - MSEGuidByte0, - MSEGuidByte3, - - MSETransportPositionY, - MSETransportSeat, - MSETransportGuidByte1, - MSETransportGuidByte0, - MSETransportGuidByte2, - MSETransportGuidByte3, - MSETransportGuidByte6, - MSETransportPositionZ, - MSETransportPositionX, - MSETransportTime3, - MSETransportTime, - MSETransportGuidByte7, - MSETransportGuidByte5, - MSETransportGuidByte4, - MSETransportOrientation, - MSETransportTime2, - - MSEFallTime, - MSEFallHorizontalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallVerticalSpeed, - - MSEOrientation, - MSEPitch, - MSESplineElevation, - MSETimestamp, - MSEEnd, -}; - -// 4.3.4 -MovementStatusElements MoveSplineDone[] = -{ - MSEPositionY, - MSEPositionX, - MSEPositionZ, - MSEHasGuidByte6, - MSEHasOrientation, - MSEHasFallData, - MSEHasTimestamp, - MSEHasGuidByte2, - MSEHasSplineElevation, - MSEHasGuidByte4, - MSEHasTransportData, - MSEHasGuidByte3, - MSEHasMovementFlags, - MSEHasGuidByte0, - MSEZeroBit, - MSEHasGuidByte1, - MSEHasGuidByte5, - MSEHasPitch, - MSEHasSpline, - MSEHasMovementFlags2, - MSEHasGuidByte7, - - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte6, - MSEHasTransportTime2, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportGuidByte0, - - MSEHasFallDirection, - MSEMovementFlags2, - MSEMovementFlags, - - MSEGuidByte7, - MSEGuidByte4, - MSEGuidByte5, - MSEGuidByte6, - MSEGuidByte0, - MSEGuidByte1, - MSEGuidByte2, - MSEGuidByte3, - - MSEFallVerticalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallHorizontalSpeed, - MSEFallTime, - - MSEPitch, - MSEOrientation, - - MSETransportGuidByte1, - MSETransportTime3, - MSETransportGuidByte7, - MSETransportTime, - MSETransportPositionY, - MSETransportPositionX, - MSETransportPositionZ, - MSETransportSeat, - MSETransportOrientation, - MSETransportGuidByte0, - MSETransportTime2, - MSETransportGuidByte2, - MSETransportGuidByte3, - MSETransportGuidByte5, - MSETransportGuidByte6, - MSETransportGuidByte4, - - MSETimestamp, - MSESplineElevation, - MSEEnd, -}; - -// 4.3.4 -MovementStatusElements MoveNotActiveMover[] = -{ - MSEPositionZ, - MSEPositionX, - MSEPositionY, - MSEHasMovementFlags2, - MSEHasTransportData, - MSEHasGuidByte6, - MSEHasSplineElevation, - MSEHasGuidByte3, - MSEZeroBit, - MSEHasTimestamp, - MSEHasGuidByte0, - MSEHasOrientation, - MSEHasGuidByte5, - MSEHasPitch, - MSEHasGuidByte1, - MSEHasGuidByte4, - MSEHasGuidByte7, - MSEHasSpline, - MSEHasGuidByte2, - MSEHasFallData, - MSEHasMovementFlags, - - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte6, - MSEHasTransportGuidByte2, - MSEHasTransportTime3, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte7, - MSEHasTransportTime2, - MSEHasTransportGuidByte3, - - MSEHasFallDirection, - MSEMovementFlags, - MSEMovementFlags2, - - MSEGuidByte1, - MSEGuidByte0, - MSEGuidByte4, - MSEGuidByte2, - MSEGuidByte7, - MSEGuidByte5, - MSEGuidByte6, - MSEGuidByte3, - - MSEFallVerticalSpeed, - MSEFallCosAngle, - MSEFallSinAngle, - MSEFallHorizontalSpeed, - MSEFallTime, - - MSETransportTime3, - MSETransportGuidByte1, - MSETransportTime2, - MSETransportOrientation, - MSETransportGuidByte0, - MSETransportSeat, - MSETransportGuidByte4, - MSETransportGuidByte6, - MSETransportGuidByte3, - MSETransportGuidByte5, - MSETransportPositionY, - MSETransportPositionX, - MSETransportGuidByte2, - MSETransportPositionZ, - MSETransportGuidByte7, - MSETransportTime, - - MSETimestamp, - MSESplineElevation, - MSEPitch, - MSEOrientation, - - MSEEnd, -}; - -// 4.3.4 -MovementStatusElements DismissControlledVehicle[] = -{ - MSEPositionY, - MSEPositionZ, - MSEPositionX, - MSEHasSplineElevation, - MSEHasFallData, - MSEHasTransportData, - MSEHasGuidByte4, - MSEHasGuidByte7, - MSEHasMovementFlags2, - MSEHasGuidByte2, - MSEHasOrientation, - MSEHasGuidByte0, - MSEHasGuidByte6, - MSEHasPitch, - MSEHasTimestamp, - MSEHasGuidByte1, - MSEZeroBit, - MSEHasSpline, - MSEHasGuidByte3, - MSEHasMovementFlags, - MSEHasGuidByte5, - - MSEHasTransportGuidByte5, - MSEHasTransportTime3, - MSEHasTransportGuidByte2, - MSEHasTransportGuidByte0, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte6, - MSEHasTransportTime2, - - MSEMovementFlags2, - MSEHasFallDirection, - MSEMovementFlags, - - MSEGuidByte6, - MSEGuidByte3, - MSEGuidByte1, - MSEGuidByte5, - MSEGuidByte2, - MSEGuidByte4, - MSEGuidByte7, - MSEGuidByte0, - - MSETimestamp, - - MSETransportTime3, - MSETransportGuidByte4, - MSETransportGuidByte7, - MSETransportTime2, - MSETransportGuidByte6, - MSETransportTime, - MSETransportPositionZ, - MSETransportGuidByte0, - MSETransportPositionX, - MSETransportGuidByte3, - MSETransportSeat, - MSETransportPositionY, - MSETransportOrientation, - MSETransportGuidByte1, - MSETransportGuidByte5, - MSETransportGuidByte2, - - MSEFallTime, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallVerticalSpeed, - - MSEOrientation, - MSESplineElevation, - MSEPitch, - MSEEnd, -}; - -// 4.3.4 -MovementStatusElements MoveUpdateTeleport[] = -{ - MSEPositionZ, - MSEPositionY, - MSEPositionX, - MSEHasOrientation, - - MSEHasSpline, - MSEHasMovementFlags, - MSEHasGuidByte2, - MSEHasGuidByte4, - MSEHasGuidByte6, - MSEHasFallData, - MSEHasGuidByte0, - MSEHasTransportData, - MSEHasGuidByte5, - - MSEHasTransportGuidByte1, - MSEHasTransportGuidByte4, - MSEHasTransportGuidByte5, - MSEHasTransportGuidByte3, - MSEHasTransportGuidByte0, - MSEHasTransportTime2, - MSEHasTransportGuidByte7, - MSEHasTransportGuidByte6, - MSEHasTransportTime3, - MSEHasTransportGuidByte2, - - MSEZeroBit, - - MSEHasGuidByte7, - MSEHasGuidByte3, - MSEHasPitch, - MSEHasMovementFlags2, - MSEHasTimestamp, - - MSEHasFallDirection, - MSEMovementFlags2, - MSEHasSplineElevation, - MSEMovementFlags, - MSEHasGuidByte1, - - MSEGuidByte7, - MSETransportGuidByte3, - MSETransportGuidByte4, - MSETransportOrientation, - MSETransportTime3, - MSETransportGuidByte1, - MSETransportTime2, - MSETransportPositionZ, - MSETransportGuidByte7, - MSETransportGuidByte0, - MSETransportGuidByte6, - MSETransportGuidByte5, - MSETransportGuidByte2, - MSETransportSeat, - MSETransportTime, - MSETransportPositionY, - MSETransportPositionX, - - MSEGuidByte6, - MSEPitch, - MSESplineElevation, - MSEOrientation, - MSEGuidByte2, - MSEGuidByte3, - MSEGuidByte1, + class ExtraMovementStatusElement + { + public: + ExtraMovementStatusElement(MovementStatusElements const* elements) : _elements(elements), _index(0) { } - MSEFallTime, - MSEFallHorizontalSpeed, - MSEFallSinAngle, - MSEFallCosAngle, - MSEFallVerticalSpeed, + void ReadNextElement(ByteBuffer& packet); + void WriteNextElement(ByteBuffer& packet); - MSEGuidByte5, - MSEGuidByte4, - MSETimestamp, - MSEGuidByte0, + struct + { + ObjectGuid guid; + float floatData; + } Data; - MSEEnd, -}; + private: + MovementStatusElements const* _elements; + uint32 _index; + }; -MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode) -{ - switch (opcode) + class PacketSender { - case MSG_MOVE_FALL_LAND: - return MovementFallLandSequence; - case MSG_MOVE_HEARTBEAT: - return MovementHeartBeatSequence; - case MSG_MOVE_JUMP: - return MovementJumpSequence; - case MSG_MOVE_SET_FACING: - return MovementSetFacingSequence; - case MSG_MOVE_SET_PITCH: - return MovementSetPitchSequence; - case MSG_MOVE_START_ASCEND: - return MovementStartAscendSequence; - case MSG_MOVE_START_BACKWARD: - return MovementStartBackwardSequence; - case MSG_MOVE_START_DESCEND: - return MovementStartDescendSequence; - case MSG_MOVE_START_FORWARD: - return MovementStartForwardSequence; - case MSG_MOVE_START_PITCH_DOWN: - return MovementStartPitchDownSequence; - case MSG_MOVE_START_PITCH_UP: - return MovementStartPitchUpSequence; - case MSG_MOVE_START_STRAFE_LEFT: - return MovementStartStrafeLeftSequence; - case MSG_MOVE_START_STRAFE_RIGHT: - return MovementStartStrafeRightSequence; - case MSG_MOVE_START_SWIM: - return MovementStartSwimSequence; - case MSG_MOVE_START_TURN_LEFT: - return MovementStartTurnLeftSequence; - case MSG_MOVE_START_TURN_RIGHT: - return MovementStartTurnRightSequence; - case MSG_MOVE_STOP: - return MovementStopSequence; - case MSG_MOVE_STOP_ASCEND: - return MovementStopAscendSequence; - case MSG_MOVE_STOP_PITCH: - return MovementStopPitchSequence; - case MSG_MOVE_STOP_STRAFE: - return MovementStopStrafeSequence; - case MSG_MOVE_STOP_SWIM: - return MovementStopSwimSequence; - case MSG_MOVE_STOP_TURN: - return MovementStopTurnSequence; - case SMSG_PLAYER_MOVE: - return PlayerMoveSequence; - case CMSG_MOVE_CHNG_TRANSPORT: - return MoveChngTransport; - case CMSG_MOVE_SPLINE_DONE: - return MoveSplineDone; - case CMSG_MOVE_NOT_ACTIVE_MOVER: - return MoveNotActiveMover; - case CMSG_DISMISS_CONTROLLED_VEHICLE: - return DismissControlledVehicle; - case MSG_MOVE_UPDATE_TELEPORT: - return MoveUpdateTeleport; - default: - break; - } + public: + PacketSender(Unit* unit, Opcodes serverControl, Opcodes playerControl, Opcodes broadcast = SMSG_PLAYER_MOVE, ExtraMovementStatusElement* extras = NULL); + + void Send() const; - return NULL; + private: + ExtraMovementStatusElement* _extraElements; + Unit* _unit; + Opcodes _selfOpcode; + Opcodes _broadcast; + }; } +MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode); + #endif diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index d36e351ba9d..cb6b1453a46 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -886,12 +886,10 @@ void Map::ScriptsProcess() if (!targetUnit) break; - sourceUnit->SetInFront(targetUnit); + sourceUnit->SetFacingToObject(targetUnit); } else - sourceUnit->SetOrientation(step.script->Orientation.Orientation); - - sourceUnit->SendMovementFlagUpdate(); + sourceUnit->SetFacingTo(step.script->Orientation.Orientation); } break; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 05f72fc3e93..b6e373e92d9 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -358,15 +358,15 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_MOVE_CHNG_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_FALL_RESET, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleFeatherFallAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveHoverAck ); @@ -375,7 +375,7 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_CAN_FLY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetCollisionHeightAck ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_SPLINE_DONE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSplineDoneOpcode ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleMoveTimeSkippedOpcode ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck ); @@ -595,9 +595,6 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(MSG_MOVE_TELEPORT_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(MSG_MOVE_TIME_SKIPPED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(MSG_MOVE_TOGGLE_COLLISION_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER(MSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER(MSG_MOVE_UPDATE_RUN_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER(MSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(MSG_MOVE_WORLDPORT_ACK, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode ); DEFINE_OPCODE_HANDLER(MSG_NOTIFY_PARTY_SQUELCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(MSG_PARTY_ASSIGNMENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyAssignmentOpcode ); @@ -1015,11 +1012,14 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_BACK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_SWIM_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TURN_RATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_MOVE_WATER_WALK, 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 2016614efc2..427e2760bca 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -596,10 +596,7 @@ enum Opcodes MSG_MINIMAP_PING = 0x6635, MSG_MOVE_CHARM_TELEPORT_CHEAT = 0x7A08, MSG_MOVE_FALL_LAND = 0x380A, - MSG_MOVE_FEATHER_FALL = 0x0000, - MSG_MOVE_GRAVITY_CHNG = 0x0000, MSG_MOVE_HEARTBEAT = 0x3914, - MSG_MOVE_HOVER = 0x0000, MSG_MOVE_JUMP = 0x7A06, MSG_MOVE_SET_ALL_SPEED_CHEAT = 0x0000, MSG_MOVE_SET_COLLISION_HEIGHT = 0x0000, @@ -639,12 +636,7 @@ enum Opcodes MSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x7B04, MSG_MOVE_TOGGLE_FALL_LOGGING = 0x0000, MSG_MOVE_TOGGLE_LOGGING = 0x0000, - MSG_MOVE_UPDATE_CAN_FLY = 0x0000, - MSG_MOVE_UPDATE_FLIGHT_SPEED = 0x30B1, MSG_MOVE_UPDATE_MOUSE = 0x0000, - MSG_MOVE_UPDATE_RUN_SPEED = 0x14A6, - MSG_MOVE_UPDATE_TELEPORT = 0x50B2, - MSG_MOVE_WATER_WALK = 0x0000, MSG_MOVE_WORLDPORT_ACK = 0x2411, MSG_NOTIFY_PARTY_SQUELCH = 0x4D06, MSG_PARTY_ASSIGNMENT = 0x0424, @@ -1065,10 +1057,6 @@ enum Opcodes SMSG_MOUNTSPECIAL_ANIM = 0x0217, SMSG_MOVE_COLLISION_DISABLE = 0x31B0, SMSG_MOVE_COLLISION_ENABLE = 0x11A7, - SMSG_MOVE_DISABLE_COLLISION = 0x0000, - SMSG_MOVE_DISABLE_GRAVITY = 0x0000, - SMSG_MOVE_ENABLE_COLLISION = 0x0000, - SMSG_MOVE_ENABLE_GRAVITY = 0x0000, SMSG_MOVE_FEATHER_FALL = 0x79B0, SMSG_MOVE_GRAVITY_DISABLE = 0x75B2, SMSG_MOVE_GRAVITY_ENABLE = 0x30B3, @@ -1100,12 +1088,14 @@ enum Opcodes SMSG_MOVE_UNSET_WALK_IN_AIR = 0x0000, SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x59A3, SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x74A0, + SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x30B1, SMSG_MOVE_UPDATE_KNOCK_BACK = 0x3DB2, SMSG_MOVE_UPDATE_PITCH_RATE = 0x1DB5, SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x3DA6, + SMSG_MOVE_UPDATE_RUN_SPEED = 0x14A6, SMSG_MOVE_UPDATE_SWIM_BACK_SPEED = 0x30B5, SMSG_MOVE_UPDATE_SWIM_SPEED = 0x59B5, - SMSG_MOVE_UPDATE_TELEPORT = 0x0000, + SMSG_MOVE_UPDATE_TELEPORT = 0x50B2, SMSG_MOVE_UPDATE_TURN_RATE = 0x5DA1, SMSG_MOVE_UPDATE_WALK_SPEED = 0x54A2, SMSG_MOVE_WATER_WALK = 0x75B1, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index be3362d746f..d4c4e5ef477 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -430,6 +430,7 @@ class WorldSession void HandleMoveTeleportAck(WorldPacket& recvPacket); void HandleForceSpeedChangeAck(WorldPacket& recvData); + void HandleSetCollisionHeightAck(WorldPacket& recvPacket); void HandlePingOpcode(WorldPacket& recvPacket); void HandleAuthSessionOpcode(WorldPacket& recvPacket); diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp index 3ca81e3e6f3..aeac475fdb1 100644 --- a/src/server/scripts/Commands/cs_cheat.cpp +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -185,10 +185,11 @@ public: std::string argstr = (char*)args; + Player* target = handler->GetSession()->GetPlayer(); if (!*args) { - argstr = (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_WATERWALK)) ? "off" : "on"; - if (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_WATERWALK)) + argstr = (target->GetCommandStatus(CHEAT_WATERWALK)) ? "off" : "on"; + if (target->GetCommandStatus(CHEAT_WATERWALK)) argstr = "off"; else argstr = "on"; @@ -196,15 +197,17 @@ public: if (argstr == "off") { - handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_WATERWALK); - handler->GetSession()->GetPlayer()->SendMovementSetWaterWalking(false); // OFF + target->SetCommandStatusOff(CHEAT_WATERWALK); + target->RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + target->SendMovementWaterWalking(); // OFF handler->SendSysMessage("Waterwalking is OFF. You can't walk on water."); return true; } else if (argstr == "on") { - handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_WATERWALK); - handler->GetSession()->GetPlayer()->SendMovementSetWaterWalking(true); // ON + target->SetCommandStatusOn(CHEAT_WATERWALK); + target->AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + target->SendMovementWaterWalking(); // ON handler->SendSysMessage("Waterwalking is ON. You can walk on water."); return true; } diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 56b8d251de6..1c3968cae8e 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -1331,7 +1331,15 @@ public: target->SetExtraUnitMovementFlags(moveFlagsExtra); } - target->SendMovementFlagUpdate(); + if (target->GetTypeId() != TYPEID_PLAYER) + target->DestroyForNearbyPlayers(); // Force new SMSG_UPDATE_OBJECT:CreateObject + else + { + WorldPacket data(SMSG_PLAYER_MOVE); + target->WriteMovementInfo(data); + target->SendMessageToSet(&data, true); + } + handler->PSendSysMessage(LANG_MOVEFLAGS_SET, target->GetUnitMovementFlags(), target->GetExtraUnitMovementFlags()); } diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index a99957a07c0..e0c338a2dbf 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -103,9 +103,15 @@ public: WorldPacket data; if (strncmp(args, "on", 3) == 0) - target->SendMovementSetCanFly(true); + { + target->AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); + target->SendMovementCanFlyChange(); + } else if (strncmp(args, "off", 4) == 0) - target->SendMovementSetCanFly(false); + { + target->RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); + target->SendMovementCanFlyChange(); + } else { handler->SendSysMessage(LANG_USE_BOL); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index abaf900508c..e4929eed313 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -1001,10 +1001,7 @@ public: { case 1: if (Unit* car = Unit::GetCreature(*me, carGUID)) - { - me->SetInFront(car); - me->SendMovementFlagUpdate(); - } + me->SetFacingToObject(car); Talk(SAY_SCARLET_MINER_0); SetRun(true); IntroTimer = 4000; @@ -1013,8 +1010,7 @@ public: case 17: if (Unit* car = Unit::GetCreature(*me, carGUID)) { - me->SetInFront(car); - me->SendMovementFlagUpdate(); + me->SetFacingToObject(car); car->Relocate(car->GetPositionX(), car->GetPositionY(), me->GetPositionZ() + 1); car->StopMoving(); car->RemoveAura(SPELL_CART_DRAG); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index ff6d434fa40..0c2c9597cfe 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -297,8 +297,7 @@ class npc_harrison_jones : public CreatureScript if (me->GetCreatureTemplate()->GossipMenuId == sender && !action) { player->CLOSE_GOSSIP_MENU(); - me->SetInFront(player); - me->SendMovementFlagUpdate(true); + me->SetFacingToObject(player); me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); Talk(SAY_HARRISON_0); _gongEvent = GONG_EVENT_1; diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index 0f52daba991..f4f7dc6a23e 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -242,8 +242,7 @@ public: { case 4: SetEscortPaused(true); - me->SetOrientation(1.775791f); - me->SendMovementFlagUpdate(); + me->SetFacingTo(1.775791f); me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); Talk(SAY_MORRIDUNE_2); break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 553b836da8f..cd5efa56840 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -479,17 +479,15 @@ public: switch (uiWaypoint) { case 0: - me->SetOrientation(5.81f); + me->SetFacingTo(5.81f); break; case 1: - me->SetOrientation(4.60f); + me->SetFacingTo(4.60f); break; case 2: - me->SetOrientation(2.79f); + me->SetFacingTo(2.79f); break; } - - me->SendMovementFlagUpdate(); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index 472048501a5..9d0bb450a73 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -191,10 +191,7 @@ public: return; if (uiPointId == 1) - { - me->SetOrientation(ORIENTATION); - me->SendMovementFlagUpdate(); - } + me->SetFacingTo(ORIENTATION); } void DoSummonGrandChampion(uint32 uiBoss) diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index 61a654ec2bb..c3158acf67d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -300,8 +300,7 @@ class boss_devourer_of_souls : public CreatureScript DoCast(me, SPELL_WAILING_SOULS_STARTING); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) { - me->SetOrientation(me->GetAngle(target)); - me->SendMovementFlagUpdate(); + me->SetFacingTo(me->GetAngle(target)); DoCast(me, SPELL_WAILING_SOULS_BEAM); } @@ -327,8 +326,7 @@ class boss_devourer_of_souls : public CreatureScript case EVENT_WAILING_SOULS_TICK: beamAngle += beamAngleDiff; - me->SetOrientation(beamAngle); - me->SendMovementFlagUpdate(); + me->SetFacingTo(beamAngle); me->StopMoving(); DoCast(me, SPELL_WAILING_SOULS); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index f4df90c49e8..8e8fb9ba9ac 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -205,7 +205,6 @@ class boss_blood_queen_lana_thel : public CreatureScript minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); minchar->SetCanFly(false); - minchar->SendMovementFlagUpdate(); minchar->RemoveAllAuras(); minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE/3.0f); } @@ -238,7 +237,6 @@ class boss_blood_queen_lana_thel : public CreatureScript me->SetDisableGravity(true); me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); me->SetCanFly(true); - me->SendMovementFlagUpdate(); me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos); } } @@ -318,7 +316,6 @@ class boss_blood_queen_lana_thel : public CreatureScript me->SetDisableGravity(false); me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); me->SetCanFly(false); - me->SendMovementFlagUpdate(); me->SetReactState(REACT_AGGRESSIVE); if (Unit* victim = me->SelectVictim()) AttackStart(victim); @@ -445,7 +442,6 @@ class boss_blood_queen_lana_thel : public CreatureScript me->SetDisableGravity(true); me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND); me->SetCanFly(true); - me->SendMovementFlagUpdate(); me->GetMotionMaster()->MovePoint(POINT_AIR, airPos); break; case EVENT_AIR_FLY_DOWN: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 0e5941138a6..ebd1aa85078 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -294,7 +294,6 @@ class boss_sapphiron : public CreatureScript case EVENT_LIFTOFF: Talk(EMOTE_AIR_PHASE); me->SetDisableGravity(true); - me->SendMovementFlagUpdate(); events.ScheduleEvent(EVENT_ICEBOLT, 1500); _iceboltCount = RAID_MODE(2, 3); return; @@ -339,7 +338,6 @@ class boss_sapphiron : public CreatureScript me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); Talk(EMOTE_GROUND_PHASE); me->SetDisableGravity(false); - me->SendMovementFlagUpdate(); events.ScheduleEvent(EVENT_GROUND, 1500); return; case EVENT_GROUND: diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index f2090f6a2e6..8ff0c798f00 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -325,8 +325,7 @@ public: break; case 7: Talk(SAY_SVALA_INTRO_2); - me->SetOrientation(1.58f); - me->SendMovementFlagUpdate(); + me->SetFacingTo(1.58f); arthas->SetVisible(false); ++introPhase; introTimer = 13800; diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 6fb1079d94c..147d5eb1370 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -2358,10 +2358,7 @@ public: me->StopMoving(); me->SetUInt32Value(UNIT_NPC_FLAGS, 0); if (Player* player = me->GetPlayer(*me, uiPlayerGUID)) - { - me->SetInFront(player); - me->SendMovementFlagUpdate(); - } + me->SetFacingToObject(player); uiEventTimer = 3000; uiEventPhase = 1; } @@ -2411,10 +2408,7 @@ public: case NPC_SALTY_JOHN_THORPE: Talk(SAY_HIDDEN_CULTIST_4); if (Player* player = me->GetPlayer(*me, uiPlayerGUID)) - { - me->SetInFront(player); - me->SendMovementFlagUpdate(); - } + me->SetFacingToObject(player); uiEventTimer = 3000; uiEventPhase = 3; break; diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 33a573b9b35..1d04a9b163c 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -1372,8 +1372,7 @@ public: player->CLOSE_GOSSIP_MENU(); creature->CastSpell(player, SPELL_QUEST_CREDIT, true); CAST_AI(npc_crusade_recruit::npc_crusade_recruitAI, (creature->AI()))->m_uiPhase = 1; - creature->SetInFront(player); - creature->SendMovementFlagUpdate(); + creature->SetFacingToObject(player); } return true; diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 0c9817ba167..a8407525a1b 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -2293,8 +2293,7 @@ class spell_item_unusual_compass : public SpellScriptLoader void HandleDummy(SpellEffIndex /* effIndex */) { Unit* caster = GetCaster(); - caster->SetOrientation(frand(0.0f, 62832.0f) / 10000.0f); - caster->SendMovementFlagUpdate(true); + caster->SetFacingTo(frand(0.0f, 62832.0f) / 10000.0f); } void Register() |