mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/PacketIO: Updated and enabled CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE and updated structure of movement packet sent in CMSG_CAST_(PET_)SPELL
This commit is contained in:
@@ -51,10 +51,7 @@ void WorldSession::HandleClientCastFlags(WorldPacket& recvPacket, uint8 castFlag
|
||||
uint8 hasMovementData;
|
||||
recvPacket >> hasMovementData;
|
||||
if (hasMovementData)
|
||||
{
|
||||
recvPacket.SetOpcode(Opcodes(recvPacket.read<uint32>()));
|
||||
HandleMovementOpcodes(recvPacket);
|
||||
}
|
||||
}
|
||||
else if (castFlags & 0x8) // Archaeology
|
||||
{
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "Player.h"
|
||||
#include "Log.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "MovementStructures.h"
|
||||
|
||||
void WorldSession::HandleDismissControlledVehicle(WorldPacket &recvData)
|
||||
{
|
||||
@@ -71,22 +72,38 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket& recvData)
|
||||
case CMSG_REQUEST_VEHICLE_NEXT_SEAT:
|
||||
GetPlayer()->ChangeSeat(-1, true);
|
||||
break;
|
||||
/*case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:
|
||||
case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:
|
||||
{
|
||||
uint64 guid; // current vehicle guid
|
||||
recvData.readPackGUID(guid);
|
||||
static MovementStatusElements const accessoryGuid[] =
|
||||
{
|
||||
MSEExtraInt8,
|
||||
MSEHasGuidByte4,
|
||||
MSEHasGuidByte2,
|
||||
MSEHasGuidByte7,
|
||||
MSEHasGuidByte6,
|
||||
MSEHasGuidByte5,
|
||||
MSEHasGuidByte0,
|
||||
MSEHasGuidByte1,
|
||||
MSEHasGuidByte3,
|
||||
MSEGuidByte6,
|
||||
MSEGuidByte1,
|
||||
MSEGuidByte2,
|
||||
MSEGuidByte5,
|
||||
MSEGuidByte3,
|
||||
MSEGuidByte0,
|
||||
MSEGuidByte4,
|
||||
MSEGuidByte7,
|
||||
};
|
||||
|
||||
Movement::ExtraMovementStatusElement extra(accessoryGuid);
|
||||
MovementInfo movementInfo;
|
||||
ReadMovementInfo(recvData, &movementInfo);
|
||||
GetPlayer()->ReadMovementInfo(recvData, &movementInfo, &extra);
|
||||
vehicle_base->m_movementInfo = movementInfo;
|
||||
|
||||
uint64 accessory; // accessory guid
|
||||
recvData.readPackGUID(accessory);
|
||||
uint64 accessory = extra.Data.guid;
|
||||
int8 seatId = extra.Data.byteData;
|
||||
|
||||
int8 seatId;
|
||||
recvData >> seatId;
|
||||
|
||||
if (vehicle_base->GetGUID() != guid)
|
||||
if (vehicle_base->GetGUID() != movementInfo.guid)
|
||||
return;
|
||||
|
||||
if (!accessory)
|
||||
@@ -98,7 +115,7 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket& recvData)
|
||||
vehUnit->HandleSpellClick(GetPlayer(), seatId);
|
||||
}
|
||||
break;
|
||||
}*/
|
||||
}
|
||||
case CMSG_REQUEST_VEHICLE_SWITCH_SEAT:
|
||||
{
|
||||
uint64 guid; // current vehicle guid
|
||||
|
||||
@@ -4742,6 +4742,167 @@ MovementStatusElements MoveNormalFall[] =
|
||||
MSEEnd,
|
||||
};
|
||||
|
||||
MovementStatusElements ChangeSeatsOnControlledVehicle[] =
|
||||
{
|
||||
MSEPositionY,
|
||||
MSEPositionX,
|
||||
MSEPositionZ,
|
||||
MSEExtraElement,
|
||||
MSEHasMovementFlags,
|
||||
MSEHasTransportData,
|
||||
MSEHasGuidByte2,
|
||||
MSEHasGuidByte6,
|
||||
MSEHasGuidByte4,
|
||||
MSEExtraElement,
|
||||
MSEExtraElement,
|
||||
MSEHasOrientation,
|
||||
MSEZeroBit,
|
||||
MSEExtraElement,
|
||||
MSEHasGuidByte7,
|
||||
MSEExtraElement,
|
||||
MSEHasTimestamp,
|
||||
MSEHasSplineElevation,
|
||||
MSEHasGuidByte5,
|
||||
MSEExtraElement,
|
||||
MSEHasMovementFlags2,
|
||||
MSEHasPitch,
|
||||
MSEExtraElement,
|
||||
MSEHasGuidByte0,
|
||||
MSEExtraElement,
|
||||
MSEHasFallData,
|
||||
MSEHasGuidByte1,
|
||||
MSEHasSpline,
|
||||
MSEMovementFlags,
|
||||
MSEExtraElement,
|
||||
MSEHasGuidByte3,
|
||||
MSEHasTransportGuidByte3,
|
||||
MSEHasTransportGuidByte0,
|
||||
MSEHasTransportGuidByte7,
|
||||
MSEHasTransportGuidByte5,
|
||||
MSEHasTransportTime3,
|
||||
MSEHasTransportGuidByte1,
|
||||
MSEHasTransportGuidByte2,
|
||||
MSEHasTransportTime2,
|
||||
MSEHasTransportGuidByte4,
|
||||
MSEHasTransportGuidByte6,
|
||||
MSEMovementFlags2,
|
||||
MSEHasFallDirection,
|
||||
MSEExtraElement,
|
||||
MSEGuidByte7,
|
||||
MSEGuidByte5,
|
||||
MSEExtraElement,
|
||||
MSEExtraElement,
|
||||
MSEGuidByte6,
|
||||
MSEExtraElement,
|
||||
MSEExtraElement,
|
||||
MSEGuidByte3,
|
||||
MSEExtraElement,
|
||||
MSEGuidByte0,
|
||||
MSEExtraElement,
|
||||
MSEGuidByte4,
|
||||
MSEGuidByte1,
|
||||
MSEExtraElement,
|
||||
MSEGuidByte2,
|
||||
MSEPitch,
|
||||
MSEFallSinAngle,
|
||||
MSEFallCosAngle,
|
||||
MSEFallHorizontalSpeed,
|
||||
MSEFallTime,
|
||||
MSEFallVerticalSpeed,
|
||||
MSETransportGuidByte2,
|
||||
MSETransportTime2,
|
||||
MSETransportTime3,
|
||||
MSETransportGuidByte0,
|
||||
MSETransportTime,
|
||||
MSETransportSeat,
|
||||
MSETransportPositionX,
|
||||
MSETransportOrientation,
|
||||
MSETransportGuidByte7,
|
||||
MSETransportGuidByte4,
|
||||
MSETransportGuidByte3,
|
||||
MSETransportGuidByte5,
|
||||
MSETransportPositionZ,
|
||||
MSETransportGuidByte1,
|
||||
MSETransportGuidByte6,
|
||||
MSETransportPositionY,
|
||||
MSESplineElevation,
|
||||
MSEOrientation,
|
||||
MSETimestamp,
|
||||
MSEEnd,
|
||||
};
|
||||
|
||||
MovementStatusElements CastSpellEmbeddedMovement[] =
|
||||
{
|
||||
MSEPositionZ,
|
||||
MSEPositionY,
|
||||
MSEPositionX,
|
||||
MSEHasFallData,
|
||||
MSEHasTimestamp,
|
||||
MSEHasOrientation,
|
||||
MSEZeroBit,
|
||||
MSEHasSpline,
|
||||
MSEHasGuidByte6,
|
||||
MSEHasGuidByte4,
|
||||
MSEHasMovementFlags2,
|
||||
MSEHasGuidByte3,
|
||||
MSEHasGuidByte5,
|
||||
MSEHasSplineElevation,
|
||||
MSEHasPitch,
|
||||
MSEHasGuidByte7,
|
||||
MSEHasTransportData,
|
||||
MSEHasGuidByte2,
|
||||
MSEHasMovementFlags,
|
||||
MSEHasGuidByte1,
|
||||
MSEHasGuidByte0,
|
||||
MSEHasTransportGuidByte6,
|
||||
MSEHasTransportGuidByte2,
|
||||
MSEHasTransportGuidByte5,
|
||||
MSEHasTransportTime2,
|
||||
MSEHasTransportGuidByte7,
|
||||
MSEHasTransportGuidByte4,
|
||||
MSEHasTransportTime3,
|
||||
MSEHasTransportGuidByte0,
|
||||
MSEHasTransportGuidByte1,
|
||||
MSEHasTransportGuidByte3,
|
||||
MSEMovementFlags2,
|
||||
MSEMovementFlags,
|
||||
MSEHasFallDirection,
|
||||
MSEGuidByte1,
|
||||
MSEGuidByte4,
|
||||
MSEGuidByte7,
|
||||
MSEGuidByte3,
|
||||
MSEGuidByte0,
|
||||
MSEGuidByte2,
|
||||
MSEGuidByte5,
|
||||
MSEGuidByte6,
|
||||
MSETransportSeat,
|
||||
MSETransportOrientation,
|
||||
MSETransportTime,
|
||||
MSETransportGuidByte6,
|
||||
MSETransportGuidByte5,
|
||||
MSETransportTime3,
|
||||
MSETransportPositionX,
|
||||
MSETransportGuidByte4,
|
||||
MSETransportPositionZ,
|
||||
MSETransportGuidByte2,
|
||||
MSETransportGuidByte0,
|
||||
MSETransportTime2,
|
||||
MSETransportGuidByte1,
|
||||
MSETransportGuidByte3,
|
||||
MSETransportPositionY,
|
||||
MSETransportGuidByte7,
|
||||
MSEOrientation,
|
||||
MSESplineElevation,
|
||||
MSEFallTime,
|
||||
MSEFallHorizontalSpeed,
|
||||
MSEFallCosAngle,
|
||||
MSEFallSinAngle,
|
||||
MSEFallVerticalSpeed,
|
||||
MSETimestamp,
|
||||
MSEPitch,
|
||||
MSEEnd,
|
||||
};
|
||||
|
||||
void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet)
|
||||
{
|
||||
MovementStatusElements element = _elements[_index++];
|
||||
@@ -4758,10 +4919,16 @@ void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet)
|
||||
return;
|
||||
}
|
||||
|
||||
if (element == MSEExtraFloat)
|
||||
switch (element)
|
||||
{
|
||||
packet >> Data.floatData;
|
||||
return;
|
||||
case MSEExtraFloat:
|
||||
packet >> Data.floatData;
|
||||
break;
|
||||
case MSEExtraInt8:
|
||||
packet >> Data.byteData;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4782,10 +4949,16 @@ void Movement::ExtraMovementStatusElement::WriteNextElement(ByteBuffer& packet)
|
||||
return;
|
||||
}
|
||||
|
||||
if (element == MSEExtraFloat)
|
||||
switch (element)
|
||||
{
|
||||
packet << Data.floatData;
|
||||
return;
|
||||
case MSEExtraFloat:
|
||||
packet << Data.floatData;
|
||||
break;
|
||||
case MSEExtraInt8:
|
||||
packet << Data.byteData;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5002,6 +5175,11 @@ MovementStatusElements* GetMovementStatusElementsSequence(Opcodes opcode)
|
||||
return MoveFeatherFall;
|
||||
case SMSG_MOVE_NORMAL_FALL:
|
||||
return MoveNormalFall;
|
||||
case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:
|
||||
return ChangeSeatsOnControlledVehicle;
|
||||
case CMSG_CAST_SPELL:
|
||||
case CMSG_PET_CAST_SPELL:
|
||||
return CastSpellEmbeddedMovement;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -96,8 +96,9 @@ enum MovementStatusElements
|
||||
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
|
||||
// Allowed internal elements are: GUID markers (not transport), MSEExtraFloat, MSEExtraInt8
|
||||
MSEExtraFloat,
|
||||
MSEExtraInt8,
|
||||
MSE_COUNT
|
||||
};
|
||||
|
||||
@@ -115,6 +116,7 @@ namespace Movement
|
||||
{
|
||||
ObjectGuid guid;
|
||||
float floatData;
|
||||
int8 byteData;
|
||||
} Data;
|
||||
|
||||
private:
|
||||
|
||||
@@ -142,7 +142,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CANCEL_TRADE, STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelTradeOpcode);
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CAST_SPELL, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleCastSpellOpcode );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CHANGEPLAYER_DIFFICULTY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle);
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSeatsOnControlledVehicle);
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CHANNEL_ANNOUNCEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelAnnouncements );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CHANNEL_BAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelBan );
|
||||
DEFINE_OPCODE_HANDLER(CMSG_CHANNEL_DISPLAY_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelDisplayListQuery );
|
||||
|
||||
Reference in New Issue
Block a user