Показать сообщение отдельно
Старый 04.01.2011, 17:20   #8
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
Вопрос

немного разобрался
Но
вот структура пакета со стороны сервака
Код:
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);
понять не могу

Последний раз редактировалось Konctantin; 04.01.2011 в 17:51.
acteros вне форума   Ответить с цитированием