Показать сообщение отдельно
Старый 16.10.2011, 09:30   #19
MaS0n
Модератор
 
Регистрация: 09.03.2010
Адрес: dev/null
Сообщений: 126
Сказал(а) спасибо: 44
Поблагодарили 111 раз(а) в 47 сообщениях
MaS0n Скоро придёт к известностиMaS0n Скоро придёт к известности
Отправить сообщение для MaS0n с помощью ICQ
По умолчанию

Выложить можно, но понять его будет сложно, ибо там нет структур и названных переменных

Обычно это проверятся в отладчике напрямую, смотрится где и как идут переходы на выход из функции

Код вот :
База TOM_RUS, 4.2.2.14545

Код:
char __thiscall CGUnit_C::HasAuraMatchingSpellClass(void *this, signed int auraEffect, int a3)
{
  void *v3; // esi@1
  unsigned int v4; // ebx@2
  int v5; // edi@3
  unsigned int v6; // eax@4
  int v7; // ebx@8
  int v8; // eax@11
  int v9; // edi@13
  int v10; // esi@14
  int v11; // eax@15
  void *v13; // [sp+Ch] [bp-14h]@1
  int v14; // [sp+10h] [bp-10h]@14
  int v15; // [sp+14h] [bp-Ch]@3
  unsigned int v16; // [sp+18h] [bp-8h]@2
  unsigned int v17; // [sp+1Ch] [bp-4h]@14

  v3 = this;
  v13 = this;
  if ( !((unsigned __int8)(1 << auraEffect % 8) & *((_BYTE *)this + auraEffect / 8 + 4064))
    || (v4 = 0, v16 = 0, !CGUnit_C::GetAuraCount(this)) )
    return 0;
  v5 = 0;
  v15 = 0;
  while ( 1 )
  {
    v6 = *((_DWORD *)v3 + 932);
    if ( v6 == -1 )
      v6 = *((_DWORD *)v3 + 773);
    if ( v4 >= v6 )
    {
      v7 = 0;
    }
    else
    {
      if ( *((_DWORD *)v3 + 932) == -1 )
        v7 = v5 + *((_DWORD *)v3 + 774);
      else
        v7 = (int)((char *)v3 + v5 + 3088);
    }
    v8 = *(_DWORD *)(v7 + 8);
    if ( v8 < g_SpellDB.minIndex
      || v8 > g_SpellDB.maxIndex
      || (v9 = *((_DWORD *)g_SpellDB.Rows + v8 - g_SpellDB.minIndex)) == 0 )
      goto LABEL_21;
    v10 = 0;
    v14 = SpellGetEffects(*(_DWORD *)v9, &v17);
    if ( v17 )
      break;
LABEL_20:
    v3 = v13;
LABEL_21:
    v5 = v15 + 40;
    ++v16;
    v4 = v16;
    v15 += 40;
    if ( v16 >= CGUnit_C::GetAuraCount(v3) )
      return 0;
  }
  while ( 1 )
  {
    v11 = *(_DWORD *)(v14 + 8) + 4 * v10;
    if ( *(_DWORD *)v11 )
    {
      if ( *(_DWORD *)(*(_DWORD *)v11 + 12) == auraEffect
        && *(_WORD *)(v7 + 12) & (1 << v10)
        && SpellMatchesAuraSpellClass(a3, v9, v10) )
        return 1;
    }
    ++v10;
    if ( v10 >= v17 )
      goto LABEL_20;
  }
}
MaS0n вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Easy (16.10.2011)