Сабж, помогите разобраться со структурой этого пакета.
Вот есть такая структура:
PHP код:
//WowGuid - 8 bytes
WowGuid Caster
WowGuid Target
uint8 CastId
uint32 SpellId
uint32 CastFlags
uint32 Ticks
uint8 hitCount
for (uint8 i = 0; i < hitCount; ++i)
{
WowGuid GOHitTarget
}
uint8 missCount
for (uint8 i = 0; i < missCount; ++i)
{
WowGuid GOMissTarget
uint8 SpellMissInfo
if (missReason == SPELL_MISS_REFLECT)//11
{
uint8 GOReflectReason
}
}
uint32 TargetFlags
if (TargetFlags & (TARGET_FLAG_UNIT | TARGET_FLAG_PVP_CORPSE | TARGET_FLAG_OBJECT | TARGET_FLAG_CORPSE | TARGET_FLAG_UNK2))
{
WowGuid ObjectTarget
}
if (TargetFlags & (TARGET_FLAG_ITEM | TARGET_FLAG_TRADE_ITEM))
{
WowGuid ItemTarget
}
if (TargetFlags & TARGET_FLAG_SOURCE_LOCATION)
{
Vector3 SourceTarget //12 bytes
}
if (TargetFlags & TARGET_FLAG_DEST_LOCATION)
{
WowGuid DestanationTargetGuid
Vector3 DestanationTarget//12 bytes
}
if (TargetFlags & TARGET_FLAG_STRING)
{
string StringTarget
}
if (CastFlags & CAST_FLAG_12)
{
uint32 PredictedPower;
}
if (CastFlags & CAST_FLAG_22)
{
uint8 cdmask1
uint8 cdmask2
for (var i = 0; i < 6; ++i)
{
uint32 mask = (1 << i);
if (mask & cdmask1)
{
if (!(mask & cdmask2))
{
uint8 colldown
}
}
}
}
if (CastFlags & CAST_FLAG_18)
{
float unk1
uint32 unk2
}
if (CastFlags & CAST_FLAG_AMMO)
{
uint32 DisplayId
uint32 InventoryType
}
if (CastFlags & CAST_FLAG_20)
{
uint32 unk3
uint32 unk4
}
if (CastFlags & TARGET_FLAG_DEST_LOCATION)
{
uint8 targetFlags
}
большинство пакетов читаются правильно, но вот некоторые уже идут с ошибками.
Вот сам дамп, если отфильтровать по опкоду SMSG_SPELL_GO, то ошибки уже будут в пакте под индексом 7 и 2 последующих тоже, еще дальше то же самое:
Чтение после конца потока - пакет с длинной 61, и не прочитан 1 байт в пакете по индексу 7.
http://filebeam.com/760a11936d576db1b12b968ac437700c