Выложить можно, но понять его будет сложно, ибо там нет структур и названных переменных
Обычно это проверятся в отладчике напрямую, смотрится где и как идут переходы на выход из функции
Код вот :
База
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;
}
}