Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Опкоды

Важная информация

Опкоды Опкоды

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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 вне форума   Ответить с цитированием
Старый 09.08.2010, 10:01   #2
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Если к примеру взять пакет, под индексом 7:
Код:
Packet S->C, SMSG_SPELL_GO (306), len 47, Flags: None
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| DB AA 03 F2 6F 30 F1 DB AA 03 F2 6F 30 F1 00 22 |....o0.....o0.."|
|00000010| CD 00 00 05 43 00 00 32 8A 8C 21 00 00 22 00 00 |....C..2..!.."..|
|00000020| 00 00 00 4F CC 12 45 3C F2 B3 C5 DB 0E 1A 43 -- |...O..E<......C.|
|----------------------------------------------------------|----------------|
Вот расшифровка:
Код:
Caster: (High: HIGHGUID_UNIT (0xF130), Entry: 28658, Counter: 938)
Target: (High: HIGHGUID_UNIT (0xF130), Entry: 28658, Counter: 938)
Cast Id: 0
Spell Id: 52514
Cast Flags: CAST_FLAG_01, CAST_FLAG_03, CAST_FLAG_09, CAST_FLAG_10, CAST_FLAG_15
Tick: 562858546
Target Flags: TARGET_FLAG_UNIT, TARGET_FLAG_SOURCE_LOCATION
Object Target: (No Guid)
Source Target: 1,289368E-27 -1,127997E-07 2,954244E-23
-- Прочитано 46 байт, надо 47
Если перед Object Target: (No Guid) передвинутся на 1 позицию вперед, тогда все нормально, но вот как высчитать этот момент, я не знаю.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 09.08.2010, 13:40   #3
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

А в сорцы мангоса не судьба глянуть?
Код:
    if( m_targetMask & TARGET_FLAG_SOURCE_LOCATION )
    {
        if(m_unitTarget)
            data << m_unitTarget->GetPackGUID();
        else
            data << uint8(0);

        data << m_srcX << m_srcY << m_srcZ;
    }
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (09.08.2010)
Старый 09.08.2010, 14:54   #4
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Смотрел, но не понял сначала что за m_unitTarget.
А оказывается это HighGuid таргета, надо быть внимательным
__________________
Konctantin вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 21:39. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot