Implemented basis movement packet thx Sovak

This commit is contained in:
zamalaev 2020-02-19 19:59:30 +00:00 committed by Antz
parent dc1543b609
commit 6c8037d531
2 changed files with 61 additions and 15 deletions

View file

@ -86,7 +86,9 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
{ {
bool hasTransportData = false, bool hasTransportData = false,
hasMovementFlags = false, hasMovementFlags = false,
hasMovementFlags2 = false; hasMovementFlags2 = false,
hasUnkTime = false;
uint32 counterCount = 0;
MovementStatusElements* sequence = GetMovementStatusElementsSequence(opcode); MovementStatusElements* sequence = GetMovementStatusElementsSequence(opcode);
if(!sequence) if(!sequence)
@ -127,13 +129,6 @@ 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])
@ -154,6 +149,12 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
case MSEHasUnknownBit: case MSEHasUnknownBit:
data.ReadBit(); data.ReadBit();
break; break;
//case MSEHasUnknownBit2:
// si.unkBit2 = data.ReadBit();
// break;
//case MSEHasUnkInt32:
// si.hasUnkInt32 = !data.ReadBit();
// break;
case MSETimestamp: case MSETimestamp:
if (si.hasTimeStamp) if (si.hasTimeStamp)
data >> time; data >> time;
@ -270,12 +271,31 @@ void MovementInfo::Read(ByteBuffer& data, uint16 opcode)
if (hasTransportData && si.hasTransportTime3) if (hasTransportData && si.hasTransportTime3)
data >> fallTime; data >> fallTime;
break; break;
case MSECounterCount:
counterCount = data.ReadBits(22);
break;
case MSEMovementCounter: case MSEMovementCounter:
for (int i = 0; i < counterCount; i++)
data.read_skip<uint32>(); data.read_skip<uint32>();
break; break;
//case MSEByteParam: //case MSEUnknownCount:
// data >> byteParam; // unkArray.resize(data.ReadBits(24));
// break; // break;
//case MSEUnknownArray:
// for (std::list<uint32>::iterator itr = unkArray.begin(); itr != unkArray.end(); ++itr)
// data >> *itr;
// break;
//case MSEUnkInt32:
// if (si.hasUnkInt32)
// data >> unkInt32;
// break;
case MSEHasUnkTime:
hasUnkTime = !data.ReadBit();
break;
case MSEUnkTime:
if (hasUnkTime)
data.read_skip<uint32>();
break;
default: default:
MANGOS_ASSERT(false && "Wrong movement status element"); MANGOS_ASSERT(false && "Wrong movement status element");
break; break;
@ -357,6 +377,12 @@ void MovementInfo::Write(ByteBuffer& data, uint16 opcode) const
case MSEHasUnknownBit: case MSEHasUnknownBit:
data.WriteBit(false); data.WriteBit(false);
break; break;
//case MSEHasUnknownBit2:
// data.WriteBit(si.unkBit2);
// break;
//case MSEHasUnkInt32:
// data.WriteBit(!si.hasUnkInt32);
// break;
case MSEHasFallData: case MSEHasFallData:
data.WriteBit(si.hasFallData); data.WriteBit(si.hasFallData);
break; break;
@ -457,9 +483,26 @@ void MovementInfo::Write(ByteBuffer& data, uint16 opcode) const
if (hasTransportData && si.hasTransportTime3) if (hasTransportData && si.hasTransportTime3)
data << uint32(fallTime); data << uint32(fallTime);
break; break;
case MSECounterCount:
data.WriteBits(0, 22);
break;
case MSEMovementCounter: case MSEMovementCounter:
data << uint32(0); data << uint32(0);
break; break;
//case MSEUnknownCount:
// data.WriteBits(unkArray.size(), 24);
// break;
//case MSEUnknownArray:
// for (std::list<uint32>::const_iterator itr = unkArray.begin(); itr != unkArray.end(); ++itr)
// data << uint32(*itr);
// break;
//case MSEUnkInt32:
// if (si.hasUnkInt32)
// data << int32(unkInt32);
// break;
case MSEUintCount:
data << uint32(0);
break;
default: default:
MANGOS_ASSERT(false && "Wrong movement status element"); MANGOS_ASSERT(false && "Wrong movement status element");
break; break;

View file

@ -97,11 +97,14 @@ enum MovementStatusElements
MSEMovementCounter, MSEMovementCounter,
MSEUnknownArray, MSEUnknownArray,
MSEUnkInt32, MSEUnkInt32,
MSECounterCount,
MSEUintCount,
MSEHasUnkTime,
MSEUnkTime,
MSEEnd, MSEEnd,
MSE_COUNT MSE_COUNT
}; };
MovementStatusElements PlayerMoveSequence[] = MovementStatusElements PlayerMoveSequence[] =
{ {
MSEHasPitch, MSEHasPitch,
@ -136,7 +139,7 @@ MovementStatusElements PlayerMoveSequence[] =
MSEHasTimestamp, MSEHasTimestamp,
MSEFlags2, MSEFlags2,
MSEGuidBit5, MSEGuidBit5,
MSEHasUnknownBit, MSECounterCount,
MSEGuidBit6, MSEGuidBit6,
MSEPositionY, MSEPositionY,
MSETransportGuidByte7, MSETransportGuidByte7,