Тема: SMSG_SPELL_GO
Показать сообщение отдельно
Старый 09.08.2010, 09:47   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию SMSG_SPELL_GO

Сабж, помогите разобраться со структурой этого пакета.

Вот есть такая структура:
PHP код:
//WowGuid - 8 bytes
WowGuid Caster
WowGuid Target
uint8 CastId
uint32 SpellId
uint32 CastFlags
uint32 Ticks

uint8 hitCount

for (uint8 i 0hitCount; ++i)
{
    
WowGuid GOHitTarget
}

uint8 missCount

for (uint8 i 0missCount; ++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 06; ++i)
    {
        
uint32 mask = (<< 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
__________________
Konctantin вне форума   Ответить с цитированием