mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 10:37:03 +00:00
Implemented vehicle opcodes that allow seat changing
This commit is contained in:
parent
6b49dfb4aa
commit
a7f0e6a4de
8 changed files with 178 additions and 18 deletions
|
|
@ -103,6 +103,12 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (element >= MSEGuid2Bit0 && element <= MSEGuid2Bit7)
|
||||
{
|
||||
guid2[element - MSEGuid2Bit0] = data.ReadBit();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (element >= MSETransportGuidBit0 && element <= MSETransportGuidBit7)
|
||||
{
|
||||
if (hasTransportData)
|
||||
|
|
@ -117,6 +123,13 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (element >= MSEGuid2Byte0 && element <= MSEGuid2Byte7)
|
||||
{
|
||||
if (guid2[element - MSEGuid2Byte0])
|
||||
guid2[element - MSEGuid2Byte0] ^= data.ReadUInt8();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (element >= MSETransportGuidByte0 && element <= MSETransportGuidByte7)
|
||||
{
|
||||
if (hasTransportData && t_guid[element - MSETransportGuidByte0])
|
||||
|
|
@ -256,6 +269,9 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
|
|||
case MSEMovementCounter:
|
||||
data.read_skip<uint32>();
|
||||
break;
|
||||
case MSEByteParam:
|
||||
data >> byteParam;
|
||||
break;
|
||||
default:
|
||||
MANGOS_ASSERT(false && "Wrong movement status element");
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -738,7 +738,7 @@ class MovementInfo
|
|||
{
|
||||
public:
|
||||
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
|
||||
void Read(ByteBuffer& data, uint16 opcode);
|
||||
|
|
@ -776,12 +776,14 @@ class MovementInfo
|
|||
t_seat = -1;
|
||||
}
|
||||
ObjectGuid const& GetGuid() const { return guid; }
|
||||
ObjectGuid const& GetGuid2() const { return guid2; }
|
||||
ObjectGuid const& GetTransportGuid() const { return t_guid; }
|
||||
Position const* GetTransportPos() const { return &t_pos; }
|
||||
int8 GetTransportSeat() const { return t_seat; }
|
||||
uint32 GetTransportTime() const { return t_time; }
|
||||
uint32 GetTransportTime2() const { return t_time2; }
|
||||
uint32 GetFallTime() const { return fallTime; }
|
||||
int8 GetByteParam() const { return byteParam; }
|
||||
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 UpdateTime(uint32 _time) { time = _time; }
|
||||
|
|
@ -817,6 +819,7 @@ class MovementInfo
|
|||
private:
|
||||
// common
|
||||
ObjectGuid guid;
|
||||
ObjectGuid guid2;
|
||||
uint32 moveFlags; // see enum MovementFlags
|
||||
uint16 moveFlags2; // see enum MovementFlags2
|
||||
uint32 time;
|
||||
|
|
@ -837,6 +840,7 @@ class MovementInfo
|
|||
float splineElevation;
|
||||
// status info
|
||||
StatusInfo si;
|
||||
int8 byteParam;
|
||||
};
|
||||
|
||||
inline WorldPacket& operator<< (WorldPacket& buf, MovementInfo const& mi)
|
||||
|
|
|
|||
|
|
@ -1130,7 +1130,7 @@ void InitializeOpcodes()
|
|||
//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(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_TOTEM_CREATED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
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(SMSG_CHAR_CUSTOMIZE, 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_PREV_SEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
OPCODE(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
OPCODE(CMSG_REQUEST_VEHICLE_SWITCH_SEAT, 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_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehiclePrevSeat );
|
||||
OPCODE(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestVehicleNextSeat );
|
||||
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_UNLEARN_TALENTS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
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_PET_LEARNED_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(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 );
|
||||
|
|
@ -1280,9 +1280,9 @@ void InitializeOpcodes()
|
|||
//OPCODE(CMSG_SET_BREATH, 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_SET_VEHICLE_REC_ID, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
//OPCODE(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleRideVehicleInteract );
|
||||
//OPCODE(CMSG_CONTROLLER_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleEjectPassenger );
|
||||
OPCODE(SMSG_SET_VEHICLE_REC_ID, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide );
|
||||
OPCODE(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRideVehicleInteract );
|
||||
OPCODE(CMSG_CONTROLLER_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEjectPassenger );
|
||||
OPCODE(SMSG_PET_GUIDS, 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 );
|
||||
|
|
|
|||
|
|
@ -1263,9 +1263,9 @@ enum Opcodes
|
|||
CMSG_SET_BREATH = 0x0000,
|
||||
CMSG_QUERY_VEHICLE_STATUS = 0x0000,
|
||||
SMSG_BATTLEGROUND_INFO_THROTTLED = 0x0000,
|
||||
SMSG_SET_VEHICLE_REC_ID = 0x0000,
|
||||
CMSG_RIDE_VEHICLE_INTERACT = 0x0000,
|
||||
CMSG_CONTROLLER_EJECT_PASSENGER = 0x0000,
|
||||
SMSG_SET_VEHICLE_REC_ID = 0x4115, // 4.3.4 15595
|
||||
CMSG_RIDE_VEHICLE_INTERACT = 0x2705, // 4.3.4 15595
|
||||
CMSG_CONTROLLER_EJECT_PASSENGER = 0x6927, // 4.3.4 15595
|
||||
SMSG_PET_GUIDS = 0x2D26, // 4.3.4 15595
|
||||
SMSG_CLIENTCACHE_VERSION = 0x2734, // 4.3.4 15595
|
||||
CMSG_CHANGE_GDF_ARENA_RATING = 0x0000,
|
||||
|
|
|
|||
|
|
@ -531,6 +531,8 @@ class WorldSession
|
|||
void HandleRequestVehicleExit(WorldPacket& recvPacket);
|
||||
void HandleRequestVehicleSwitchSeat(WorldPacket& recvPacket);
|
||||
void HandleChangeSeatsOnControlledVehicle(WorldPacket& recvPacket);
|
||||
void HandleRequestVehiclePrevSeat(WorldPacket& recv_data);
|
||||
void HandleRequestVehicleNextSeat(WorldPacket& recv_data);
|
||||
void HandleRideVehicleInteract(WorldPacket& recvPacket);
|
||||
void HandleEjectPassenger(WorldPacket& recvPacket);
|
||||
|
||||
|
|
|
|||
|
|
@ -441,6 +441,11 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket& recv_data)
|
|||
_player->GetMover()->GetGuidStr().c_str(), guid.GetString().c_str());
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Unit* mover = ObjectAccessor::GetUnit(*GetPlayer(), guid))
|
||||
_player->SetMover(mover);
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveNotActiveMoverOpcode(WorldPacket& recv_data)
|
||||
|
|
|
|||
|
|
@ -96,15 +96,13 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket& recvPacket)
|
|||
DEBUG_LOG("WORLD: Received opcode CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE");
|
||||
recvPacket.hexlike();
|
||||
|
||||
ObjectGuid srcVehicleGuid;
|
||||
MovementInfo movementInfo;
|
||||
ObjectGuid destVehicleGuid;
|
||||
uint8 seat;
|
||||
|
||||
recvPacket >> srcVehicleGuid.ReadAsPacked();
|
||||
recvPacket >> movementInfo; // Not used at the moment
|
||||
recvPacket >> destVehicleGuid.ReadAsPacked();
|
||||
recvPacket >> seat;
|
||||
ObjectGuid srcVehicleGuid = movementInfo.GetGuid();
|
||||
ObjectGuid destVehicleGuid = movementInfo.GetGuid2();
|
||||
uint8 seat = movementInfo.GetByteParam();
|
||||
|
||||
TransportInfo* transportInfo = _player->GetTransportInfo();
|
||||
if (!transportInfo || !transportInfo->IsOnVehicle())
|
||||
|
|
@ -175,3 +173,17 @@ void WorldSession::HandleEjectPassenger(WorldPacket& recvPacket)
|
|||
|
||||
_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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,14 @@ enum MovementStatusElements
|
|||
MSEGuidBit5,
|
||||
MSEGuidBit6,
|
||||
MSEGuidBit7,
|
||||
MSEGuid2Bit0,
|
||||
MSEGuid2Bit1,
|
||||
MSEGuid2Bit2,
|
||||
MSEGuid2Bit3,
|
||||
MSEGuid2Bit4,
|
||||
MSEGuid2Bit5,
|
||||
MSEGuid2Bit6,
|
||||
MSEGuid2Bit7,
|
||||
MSEHasUnknownBit,
|
||||
MSEHasMovementFlags,
|
||||
MSEHasMovementFlags2,
|
||||
|
|
@ -68,6 +76,14 @@ enum MovementStatusElements
|
|||
MSEGuidByte5,
|
||||
MSEGuidByte6,
|
||||
MSEGuidByte7,
|
||||
MSEGuid2Byte0,
|
||||
MSEGuid2Byte1,
|
||||
MSEGuid2Byte2,
|
||||
MSEGuid2Byte3,
|
||||
MSEGuid2Byte4,
|
||||
MSEGuid2Byte5,
|
||||
MSEGuid2Byte6,
|
||||
MSEGuid2Byte7,
|
||||
MSEPitch,
|
||||
MSEFallTime,
|
||||
MSETransportGuidByte0,
|
||||
|
|
@ -92,10 +108,113 @@ enum MovementStatusElements
|
|||
MSETransportTime2,
|
||||
MSETransportTime3,
|
||||
MSEMovementCounter,
|
||||
MSEByteParam,
|
||||
MSEEnd,
|
||||
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[] =
|
||||
{
|
||||
MSEHasFallData,
|
||||
|
|
@ -2632,6 +2751,8 @@ MovementStatusElements* GetMovementStatusElementsSequence(uint16 opcode)
|
|||
return MoveNotActiveMoverSequence;
|
||||
case CMSG_DISMISS_CONTROLLED_VEHICLE:
|
||||
return DismissControlledVehicleSequence;
|
||||
case CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE:
|
||||
return ChangeSeatsOnControlledVehicleSequence;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue