27.07.2011, 14:23 | #1 |
Ученый
Регистрация: 19.12.2010
Сообщений: 221
Сказал(а) спасибо: 64
Поблагодарили 12 раз(а) в 9 сообщениях
Записей в дневнике: 2
|
CMSG_GET_MIRRORIMAGE_DATA
Пытаюсь понять при каких условиях клиент посылает CMSG_GET_MIRRORIMAGE_DATA. Нашел вот такой кусок:
Код:
signed int __usercall sub_5D2890<eax>(int a1<ecx>, double a2<st6>, double a3<st5>, double a4<st4>, double a5<st3>, double a6<st2>, double a7<st1>) { int v7; // ecx@1 int v8; // ebx@1 int v9; // esi@1 int v10; // eax@2 int v11; // eax@3 signed int result; // eax@9 signed int v13; // edi@25 int v14; // eax@26 int v15; // eax@30 int v16; // [sp-4h] [bp-14h]@11 int v17; // [sp+8h] [bp-8h]@30 int v18; // [sp+Ch] [bp-4h]@30 v9 = a1; v7 = *(_DWORD *)(a1 + 204); v8 = 0; if ( !v7 || (sub_77A9E0(v7), !v10) ) return 0; v11 = *(_DWORD *)(v9 + 3084); *(_DWORD *)(v9 + 2824) &= 0xFFBFFFFFu; if ( v11 ) { sub_66A320(v11); *(_DWORD *)(v9 + 3084) = 0; } if ( (*(_DWORD *)(*(_DWORD *)(v9 + 248) + 280) >> 4) & 1 ) { if ( !(*(_DWORD *)(v9 + 2824) & 0x20000) ) CGUnit_C__RequestMirrorImageData((void *)v9); *(_DWORD *)(v9 + 2824) |= 0x400000u; return 0; } if ( sub_5B8CC0(v9) ) { v16 = 1; LABEL_18: sub_5BD0A0(v9, v9, v16); goto LABEL_19; } if ( *(_DWORD *)(v9 + 2604) ) { result = sub_5BD0A0(v9, 0, 1); if ( !result ) return result; goto LABEL_19; } if ( ((unsigned int)*(_WORD *)(*(_DWORD *)(v9 + 8) + 8) >> 4) & 1 && *(_BYTE *)(*(_DWORD *)(v9 + 2608) + 4) & 4 ) { v16 = 0; goto LABEL_18; } LABEL_19: if ( !(((unsigned int)*(_WORD *)(*(_DWORD *)(v9 + 8) + 8) >> 4) & 1) || !sub_575BA0(v9, a2, a3, a4, a5, a6, a7) ) { if ( !sub_573210() || !CGUnit_C__sub_5BC230(v9) ) { if ( *(_DWORD *)(v9 + 3084) ) { if ( *(_DWORD *)(v9 + 2604) ) { v13 = 32; do { v14 = *(_DWORD *)(v13 + *(_DWORD *)(v9 + 2604)); if ( v14 ) sub_66B510(*(void **)(v9 + 3084), v8, v14, 0); v13 += 4; ++v8; } while ( (unsigned int)v13 < 0x4C ); } } } sub_5D02B0(v9, a2, a3, a4, a5, a6, a7, 0); sub_5D02B0(v9, a2, a3, a4, a5, a6, a7, 1); sub_5D02B0(v9, a2, a3, a4, a5, a6, a7, 2); } sub_5B54F0(v9); v15 = *(_DWORD *)(v9 + 8); v17 = *(_DWORD *)v15; v18 = *(_DWORD *)(v15 + 4); sub_8262B0((int)&v17, 3); sub_5C1F50(v9); return 1; } Код:
if ( !(*(_DWORD *)(v9 + 2824) & 0x20000) ) Код:
if ( (*(_DWORD *)(*(_DWORD *)(v9 + 248) + 280) >> 4) & 1 ) Последний раз редактировалось HuntsMan; 27.07.2011 в 14:30. |
27.07.2011, 14:34 | #3 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Это какие-то внутренние клиентские флаги...
Это Код:
if(unit->data->UNIT_FIELD_FLAGS_2 & UNIT_FLAG2_CLONED) Последний раз редактировалось TOM_RUS; 27.07.2011 в 14:46. |
Пользователь сказал cпасибо: | HuntsMan (27.07.2011) |