Implemented vehicle opcodes that allow seat changing

This commit is contained in:
Yaki Khadafi 2015-02-03 19:54:09 +00:00 committed by Antz
parent 6b49dfb4aa
commit a7f0e6a4de
8 changed files with 178 additions and 18 deletions

View file

@ -103,6 +103,12 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
continue; continue;
} }
if (element >= MSEGuid2Bit0 && element <= MSEGuid2Bit7)
{
guid2[element - MSEGuid2Bit0] = data.ReadBit();
continue;
}
if (element >= MSETransportGuidBit0 && element <= MSETransportGuidBit7) if (element >= MSETransportGuidBit0 && element <= MSETransportGuidBit7)
{ {
if (hasTransportData) if (hasTransportData)
@ -117,6 +123,13 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
continue; continue;
} }
if (element >= MSEGuid2Byte0 && element <= MSEGuid2Byte7)
{
if (guid2[element - MSEGuid2Byte0])
guid2[element - MSEGuid2Byte0] ^= data.ReadUInt8();
continue;
}
if (element >= MSETransportGuidByte0 && element <= MSETransportGuidByte7) if (element >= MSETransportGuidByte0 && element <= MSETransportGuidByte7)
{ {
if (hasTransportData && t_guid[element - MSETransportGuidByte0]) if (hasTransportData && t_guid[element - MSETransportGuidByte0])
@ -256,6 +269,9 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
case MSEMovementCounter: case MSEMovementCounter:
data.read_skip<uint32>(); data.read_skip<uint32>();
break; break;
case MSEByteParam:
data >> byteParam;
break;
default: default:
MANGOS_ASSERT(false && "Wrong movement status element"); MANGOS_ASSERT(false && "Wrong movement status element");
break; break;

View file

@ -738,7 +738,7 @@ class MovementInfo
{ {
public: public:
MovementInfo() : moveFlags(MOVEFLAG_NONE), moveFlags2(MOVEFLAG2_NONE), time(0), MovementInfo() : moveFlags(MOVEFLAG_NONE), moveFlags2(MOVEFLAG2_NONE), time(0),
t_time(0), t_seat(-1), t_time2(0), s_pitch(0.0f), fallTime(0), splineElevation(0.0f) {} t_time(0), t_seat(-1), t_time2(0), s_pitch(0.0f), fallTime(0), splineElevation(0.0f), byteParam(0) {}
// Read/Write methods // Read/Write methods
void Read(ByteBuffer& data, uint16 opcode); void Read(ByteBuffer& data, uint16 opcode);
@ -776,12 +776,14 @@ class MovementInfo
t_seat = -1; t_seat = -1;
} }
ObjectGuid const& GetGuid() const { return guid; } ObjectGuid const& GetGuid() const { return guid; }
ObjectGuid const& GetGuid2() const { return guid2; }
ObjectGuid const& GetTransportGuid() const { return t_guid; } ObjectGuid const& GetTransportGuid() const { return t_guid; }
Position const* GetTransportPos() const { return &t_pos; } Position const* GetTransportPos() const { return &t_pos; }
int8 GetTransportSeat() const { return t_seat; } int8 GetTransportSeat() const { return t_seat; }
uint32 GetTransportTime() const { return t_time; } uint32 GetTransportTime() const { return t_time; }
uint32 GetTransportTime2() const { return t_time2; } uint32 GetTransportTime2() const { return t_time2; }
uint32 GetFallTime() const { return fallTime; } uint32 GetFallTime() const { return fallTime; }
int8 GetByteParam() const { return byteParam; }
void ChangeOrientation(float o) { pos.o = o; } void ChangeOrientation(float o) { pos.o = o; }
void ChangePosition(float x, float y, float z, float o) { pos.x = x; pos.y = y; pos.z = z; pos.o = o; } void ChangePosition(float x, float y, float z, float o) { pos.x = x; pos.y = y; pos.z = z; pos.o = o; }
void UpdateTime(uint32 _time) { time = _time; } void UpdateTime(uint32 _time) { time = _time; }
@ -817,6 +819,7 @@ class MovementInfo
private: private:
// common // common
ObjectGuid guid; ObjectGuid guid;
ObjectGuid guid2;
uint32 moveFlags; // see enum MovementFlags uint32 moveFlags; // see enum MovementFlags
uint16 moveFlags2; // see enum MovementFlags2 uint16 moveFlags2; // see enum MovementFlags2
uint32 time; uint32 time;
@ -837,6 +840,7 @@ class MovementInfo
float splineElevation; float splineElevation;
// status info // status info
StatusInfo si; StatusInfo si;
int8 byteParam;
}; };
inline WorldPacket& operator<< (WorldPacket& buf, MovementInfo const& mi) inline WorldPacket& operator<< (WorldPacket& buf, MovementInfo const& mi)

View file

@ -1130,7 +1130,7 @@ void InitializeOpcodes()
//OPCODE(CMSG_REFER_A_FRIEND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_REFER_A_FRIEND, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(MSG_GM_CHANGE_ARENA_RATING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_GM_CHANGE_ARENA_RATING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_DECLINE_CHANNEL_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_DECLINE_CHANNEL_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_GROUPACTION_THROTTLED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_GROUPACTION_THROTTLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_OVERRIDE_LIGHT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_OVERRIDE_LIGHT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_TOTEM_CREATED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_TOTEM_CREATED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(CMSG_TOTEM_DESTROYED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTotemDestroyed ); OPCODE(CMSG_TOTEM_DESTROYED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTotemDestroyed );
@ -1231,10 +1231,10 @@ void InitializeOpcodes()
OPCODE(CMSG_CHAR_CUSTOMIZE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCustomizeOpcode ); OPCODE(CMSG_CHAR_CUSTOMIZE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCustomizeOpcode );
OPCODE(SMSG_CHAR_CUSTOMIZE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_CHAR_CUSTOMIZE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_PET_RENAMEABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_PET_RENAMEABLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(CMSG_REQUEST_VEHICLE_EXIT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::Handle_NULL ); OPCODE(CMSG_REQUEST_VEHICLE_EXIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleExit );
OPCODE(CMSG_REQUEST_VEHICLE_PREV_SEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(CMSG_REQUEST_VEHICLE_PREV_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehiclePrevSeat );
OPCODE(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleNextSeat );
OPCODE(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::Handle_NULL ); OPCODE(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleSwitchSeat );
OPCODE(CMSG_PET_LEARN_TALENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetLearnTalent ); OPCODE(CMSG_PET_LEARN_TALENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePetLearnTalent );
//OPCODE(CMSG_PET_UNLEARN_TALENTS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_PET_UNLEARN_TALENTS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
OPCODE(SMSG_SET_PHASE_SHIFT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_SET_PHASE_SHIFT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@ -1268,7 +1268,7 @@ void InitializeOpcodes()
OPCODE(SMSG_SERVER_FIRST_ACHIEVEMENT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_SERVER_FIRST_ACHIEVEMENT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_PET_LEARNED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_PET_LEARNED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_PET_REMOVED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_PET_REMOVED_SPELL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::Handle_NULL ); OPCODE(CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle );
OPCODE(CMSG_HEARTH_AND_RESURRECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleHearthandResurrect ); OPCODE(CMSG_HEARTH_AND_RESURRECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleHearthandResurrect );
OPCODE(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_CRITERIA_DELETED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_CRITERIA_DELETED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
@ -1280,9 +1280,9 @@ void InitializeOpcodes()
//OPCODE(CMSG_SET_BREATH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_SET_BREATH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(CMSG_QUERY_VEHICLE_STATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_QUERY_VEHICLE_STATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
//OPCODE(SMSG_BATTLEGROUND_INFO_THROTTLED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_BATTLEGROUND_INFO_THROTTLED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(SMSG_SET_VEHICLE_REC_ID, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_SET_VEHICLE_REC_ID, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleRideVehicleInteract ); OPCODE(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRideVehicleInteract );
//OPCODE(CMSG_CONTROLLER_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleEjectPassenger ); OPCODE(CMSG_CONTROLLER_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEjectPassenger );
OPCODE(SMSG_PET_GUIDS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_PET_GUIDS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
OPCODE(SMSG_CLIENTCACHE_VERSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(SMSG_CLIENTCACHE_VERSION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
//OPCODE(CMSG_CHANGE_GDF_ARENA_RATING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_CHANGE_GDF_ARENA_RATING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );

View file

@ -1263,9 +1263,9 @@ enum Opcodes
CMSG_SET_BREATH = 0x0000, CMSG_SET_BREATH = 0x0000,
CMSG_QUERY_VEHICLE_STATUS = 0x0000, CMSG_QUERY_VEHICLE_STATUS = 0x0000,
SMSG_BATTLEGROUND_INFO_THROTTLED = 0x0000, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x0000,
SMSG_SET_VEHICLE_REC_ID = 0x0000, SMSG_SET_VEHICLE_REC_ID = 0x4115, // 4.3.4 15595
CMSG_RIDE_VEHICLE_INTERACT = 0x0000, CMSG_RIDE_VEHICLE_INTERACT = 0x2705, // 4.3.4 15595
CMSG_CONTROLLER_EJECT_PASSENGER = 0x0000, CMSG_CONTROLLER_EJECT_PASSENGER = 0x6927, // 4.3.4 15595
SMSG_PET_GUIDS = 0x2D26, // 4.3.4 15595 SMSG_PET_GUIDS = 0x2D26, // 4.3.4 15595
SMSG_CLIENTCACHE_VERSION = 0x2734, // 4.3.4 15595 SMSG_CLIENTCACHE_VERSION = 0x2734, // 4.3.4 15595
CMSG_CHANGE_GDF_ARENA_RATING = 0x0000, CMSG_CHANGE_GDF_ARENA_RATING = 0x0000,

View file

@ -531,6 +531,8 @@ class WorldSession
void HandleRequestVehicleExit(WorldPacket& recvPacket); void HandleRequestVehicleExit(WorldPacket& recvPacket);
void HandleRequestVehicleSwitchSeat(WorldPacket& recvPacket); void HandleRequestVehicleSwitchSeat(WorldPacket& recvPacket);
void HandleChangeSeatsOnControlledVehicle(WorldPacket& recvPacket); void HandleChangeSeatsOnControlledVehicle(WorldPacket& recvPacket);
void HandleRequestVehiclePrevSeat(WorldPacket& recv_data);
void HandleRequestVehicleNextSeat(WorldPacket& recv_data);
void HandleRideVehicleInteract(WorldPacket& recvPacket); void HandleRideVehicleInteract(WorldPacket& recvPacket);
void HandleEjectPassenger(WorldPacket& recvPacket); void HandleEjectPassenger(WorldPacket& recvPacket);

View file

@ -441,6 +441,11 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket& recv_data)
_player->GetMover()->GetGuidStr().c_str(), guid.GetString().c_str()); _player->GetMover()->GetGuidStr().c_str(), guid.GetString().c_str());
return; return;
} }
else
{
if (Unit* mover = ObjectAccessor::GetUnit(*GetPlayer(), guid))
_player->SetMover(mover);
}
} }
void WorldSession::HandleMoveNotActiveMoverOpcode(WorldPacket& recv_data) void WorldSession::HandleMoveNotActiveMoverOpcode(WorldPacket& recv_data)

View file

@ -96,15 +96,13 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket& recvPacket)
DEBUG_LOG("WORLD: Received opcode CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE"); DEBUG_LOG("WORLD: Received opcode CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE");
recvPacket.hexlike(); recvPacket.hexlike();
ObjectGuid srcVehicleGuid;
MovementInfo movementInfo; MovementInfo movementInfo;
ObjectGuid destVehicleGuid;
uint8 seat; uint8 seat;
recvPacket >> srcVehicleGuid.ReadAsPacked();
recvPacket >> movementInfo; // Not used at the moment recvPacket >> movementInfo; // Not used at the moment
recvPacket >> destVehicleGuid.ReadAsPacked(); ObjectGuid srcVehicleGuid = movementInfo.GetGuid();
recvPacket >> seat; ObjectGuid destVehicleGuid = movementInfo.GetGuid2();
uint8 seat = movementInfo.GetByteParam();
TransportInfo* transportInfo = _player->GetTransportInfo(); TransportInfo* transportInfo = _player->GetTransportInfo();
if (!transportInfo || !transportInfo->IsOnVehicle()) if (!transportInfo || !transportInfo->IsOnVehicle())
@ -175,3 +173,17 @@ void WorldSession::HandleEjectPassenger(WorldPacket& recvPacket)
_player->RemoveSpellsCausingAura(SPELL_AURA_CONTROL_VEHICLE, passengerGuid); _player->RemoveSpellsCausingAura(SPELL_AURA_CONTROL_VEHICLE, passengerGuid);
} }
void WorldSession::HandleRequestVehiclePrevSeat(WorldPacket& recv_data)
{
DEBUG_LOG("WORLD: Received CMSG_REQUEST_VEHICLE_PREV_SEAT");
// ToDo
}
void WorldSession::HandleRequestVehicleNextSeat(WorldPacket& recv_data)
{
DEBUG_LOG("WORLD: Received CMSG_REQUEST_VEHICLE_NEXT_SEAT");
// ToDo
}

View file

@ -36,6 +36,14 @@ enum MovementStatusElements
MSEGuidBit5, MSEGuidBit5,
MSEGuidBit6, MSEGuidBit6,
MSEGuidBit7, MSEGuidBit7,
MSEGuid2Bit0,
MSEGuid2Bit1,
MSEGuid2Bit2,
MSEGuid2Bit3,
MSEGuid2Bit4,
MSEGuid2Bit5,
MSEGuid2Bit6,
MSEGuid2Bit7,
MSEHasUnknownBit, MSEHasUnknownBit,
MSEHasMovementFlags, MSEHasMovementFlags,
MSEHasMovementFlags2, MSEHasMovementFlags2,
@ -68,6 +76,14 @@ enum MovementStatusElements
MSEGuidByte5, MSEGuidByte5,
MSEGuidByte6, MSEGuidByte6,
MSEGuidByte7, MSEGuidByte7,
MSEGuid2Byte0,
MSEGuid2Byte1,
MSEGuid2Byte2,
MSEGuid2Byte3,
MSEGuid2Byte4,
MSEGuid2Byte5,
MSEGuid2Byte6,
MSEGuid2Byte7,
MSEPitch, MSEPitch,
MSEFallTime, MSEFallTime,
MSETransportGuidByte0, MSETransportGuidByte0,
@ -92,10 +108,113 @@ enum MovementStatusElements
MSETransportTime2, MSETransportTime2,
MSETransportTime3, MSETransportTime3,
MSEMovementCounter, MSEMovementCounter,
MSEByteParam,
MSEEnd, MSEEnd,
MSE_COUNT MSE_COUNT
}; };
MovementStatusElements ChangeSeatsOnControlledVehicleSequence[] =
{
MSEPositionY,
MSEPositionX,
MSEPositionZ,
MSEByteParam,
MSEHasMovementFlags,
MSEHasTransportData,
MSEGuidBit2,
MSEGuidBit6,
MSEGuidBit4,
MSEGuid2Bit2,
MSEGuid2Bit4,
MSEHasOrientation,
MSEHasUnknownBit,
MSEGuid2Bit7,
MSEGuidBit7,
MSEGuid2Bit6,
MSEHasTimestamp,
MSEHasSplineElevation,
MSEGuidBit5,
MSEGuid2Bit5,
MSEHasMovementFlags2,
MSEHasPitch,
MSEGuid2Bit0,
MSEGuidBit0,
MSEGuid2Bit1,
MSEHasFallData,
MSEGuidBit1,
MSEHasSpline,
MSEFlags,
MSEGuid2Bit3,
MSEGuidBit3,
MSETransportGuidBit3,
MSETransportGuidBit0,
MSETransportGuidBit7,
MSETransportGuidBit5,
MSEHasTransportTime3,
MSETransportGuidBit1,
MSETransportGuidBit2,
MSEHasTransportTime2,
MSETransportGuidBit4,
MSETransportGuidBit6,
MSEFlags2,
MSEHasFallDirection,
MSEGuid2Byte6,
MSEGuidByte7,
MSEGuidByte5,
MSEGuid2Byte1,
MSEGuid2Byte2,
MSEGuidByte6,
MSEGuid2Byte5,
MSEGuid2Byte3,
MSEGuidByte3,
MSEGuid2Byte0,
MSEGuidByte0,
MSEGuid2Byte4,
MSEGuidByte4,
MSEGuidByte1,
MSEGuid2Byte7,
MSEGuidByte2,
MSEPitch,
MSEFallSinAngle,
MSEFallCosAngle,
MSEFallHorizontalSpeed,
MSEFallTime,
MSEFallVerticalSpeed,
MSETransportGuidByte2,
MSETransportTime2,
MSETransportTime3,
MSETransportGuidByte0,
MSETransportTime,
MSETransportSeat,
MSETransportPositionX,
MSETransportPositionO,
MSETransportGuidByte7,
MSETransportGuidByte4,
MSETransportGuidByte3,
MSETransportGuidByte5,
MSETransportPositionZ,
MSETransportGuidByte1,
MSETransportGuidByte6,
MSETransportPositionY,
MSESplineElevation,
MSEPositionO,
MSETimestamp,
MSEEnd,
};
MovementStatusElements PlayerMoveSequence[] = MovementStatusElements PlayerMoveSequence[] =
{ {
MSEHasFallData, MSEHasFallData,
@ -2632,6 +2751,8 @@ MovementStatusElements* GetMovementStatusElementsSequence(uint16 opcode)
return MoveNotActiveMoverSequence; return MoveNotActiveMoverSequence;
case CMSG_DISMISS_CONTROLLED_VEHICLE: case CMSG_DISMISS_CONTROLLED_VEHICLE:
return DismissControlledVehicleSequence; return DismissControlledVehicleSequence;
case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:
return ChangeSeatsOnControlledVehicleSequence;
} }
return NULL; return NULL;
} }