немного разобрался
Но
вот структура пакета со стороны сервака
Код:
data << uint64(guid);
data << uint8(loot_type);
data << LootView(*loot, this, permission);
обработчик в клиенте
Код:
signed int __thiscall CGPlayer_C__OnLootResponse(void *this, int a2, unsigned int a3)
{
int v3; // eax@1
int v4; // ecx@1
unsigned int v5; // edi@1
void *v6; // esi@1
char v7; // zf@4
char v8; // al@4
signed int result; // eax@23
void *v10; // eax@32
void *v11; // edi@32
int v12; // ecx@40
int v13; // eax@40
unsigned int v14; // ST0C_4@40
signed int v15; // [sp-4h] [bp-34h]@18
signed int v16; // [sp-4h] [bp-34h]@34
int v17; // [sp+Ch] [bp-24h]@13
int v18; // [sp+10h] [bp-20h]@13
int v19; // [sp+14h] [bp-1Ch]@13
int v20; // [sp+18h] [bp-18h]@13
int v21; // [sp+1Ch] [bp-14h]@13
int v22; // [sp+20h] [bp-10h]@13
WGUID guid; // [sp+24h] [bp-Ch]@1
unsigned __int8 v24; // [sp+2Fh] [bp-1h]@1
v5 = a3;
v6 = this;
CDataStore__GetInt64(&guid);
CDataStore__GetInt8(&v24);
v3 = *((_DWORD *)v6 + 2216);
v4 = *((_DWORD *)v6 + 2217);
if ( *((_QWORD *)v6 + 1108) && v3 == guid.low && v4 == guid.high )
{
v8 = v24;
}
else
{
v7 = (v4 | v3) == 0;
v8 = v24;
if ( !v7 || v24 != 2 && v24 != 3 && v24 != 4 && v24 != 6 && v24 != 7 && v24 != 8 && v24 != 9 )
{
if ( v24 )
{
v17 = (int)off_AAECB8;
v18 = 0;
v19 = 0;
v20 = 0;
v21 = 0;
CDataStore__PutInt32(38015);
CDataStore__PutInt64(guid.low, guid.high);
v22 = 0;
ClientServices__SendPacket_0(&v17);
v17 = (int)off_AAECB8;
if ( v20 != -1 )
off_AAECBC(&v17, &v18, &v19, &v20);
}
else
{
if ( *(_DWORD *)(v5 + 16) != *(_DWORD *)(v5 + 20) )
{
CDataStore__GetInt8((char *)&a3 + 3);
if ( BYTE3(a3) == 15 )
CGGameUI__DisplayError(615);
}
}
*((_DWORD *)v6 + 2216) = 0;
*((_DWORD *)v6 + 2217) = 0;
CGUnit_C__sub_5E0720(0, -1);
sub_6023C0(0);
CGGameUI__UnlockItem(guid);
*(_DWORD *)(v5 + 20) = *(_DWORD *)(v5 + 16);
return 1;
}
}
if ( v8 )
{
v10 = ClntObjMgrGetObjectPtr(guid, TYPEMASK_OBJECT, ".\\Player_C.cpp", 12016);
v11 = v10;
if ( v10 )
{
if ( ((unsigned int)*(_WORD *)(*((_DWORD *)v10 + 2) + 8) >> 1) & 1 )
sub_821BC0(guid);
v12 = v24;
v13 = guid.high;
*((_DWORD *)v6 + 2216) = guid.low;
v14 = a3;
*((_DWORD *)v6 + 2217) = v13;
sub_8A70F0(v11, v14, v12);
if ( (unsigned int)&unk_C000FF & *(_DWORD *)(*((_DWORD *)v6 + 64) + 68) )
{
CloseLoot(1, 1, 0);
return 1;
}
}
else
{
if ( (guid.high & 0xF0000000) == 1073741824 )
v16 = 150;
else
v16 = 144;
CGGameUI__DisplayError(v16);
v17 = (int)off_AAECB8;
v18 = 0;
v19 = 0;
v20 = 0;
v21 = 0;
CDataStore__PutInt32(38015);
CDataStore__PutInt64(guid.low, guid.high);
v22 = 0;
ClientServices__SendPacket_0(&v17);
v17 = (int)off_AAECB8;
if ( v20 != -1 )
{
off_AAECBC(&v17, &v18, &v19, &v20);
return 1;
}
}
return 1;
}
CDataStore__GetInt8((char *)&a3 + 3);
switch ( BYTE3(a3) )
{
case 6u:
v15 = 142;
goto LABEL_31;
case 4u:
v15 = 143;
goto LABEL_31;
case 5u:
v15 = 145;
goto LABEL_31;
case 8u:
v15 = 146;
goto LABEL_31;
case 9u:
v15 = 147;
goto LABEL_31;
case 0xAu:
CGGameUI__DisplayError(456);
return 1;
case 0xBu:
v15 = 501;
goto LABEL_31;
case 0xCu:
CGGameUI__DisplayError(520);
result = 1;
break;
case 0xDu:
CGGameUI__DisplayError(521);
result = 1;
break;
case 0xEu:
CGGameUI__DisplayError(522);
result = 1;
break;
case 0x10u:
CGGameUI__DisplayError(461);
result = 1;
break;
case 0x11u:
CGGameUI__DisplayError(150);
result = 1;
break;
default:
v15 = 144;
LABEL_31:
CGGameUI__DisplayError(v15);
*((_DWORD *)v6 + 2216) = 0;
*((_DWORD *)v6 + 2217) = 0;
CGUnit_C__sub_5E0720(0, -1);
sub_6023C0(0);
CGGameUI__UnlockItem(guid);
CGUnit_C__sub_5E0720(0, -1);
result = 1;
break;
}
return result;
}
data << uint64(guid);
data << uint8(loot_type);
понятно где обрабатываются это
Код:
CDataStore__GetInt64(&guid);
CDataStore__GetInt8(&v24);
а вот что отвечает за обработку
Код:
data << LootView(*loot, this, permission);
понять не могу