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;
}
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;

View file

@ -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)