25.03.2014, 17:24 | #1 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
QUEST_POI
Сегодня запросил с сервера список всех QUEST_POI.
Отсылал такие пакеты: Код:
Packet:CMSG (0x16B8) CMSG_QUEST_POI_QUERY, Data size: 7 |---------------------------------------------------------------------------| | OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F |0123456789ABCDEF| |----------------------------------------------------------|----------------| |00000000| 00 00 04 BD 0C 00 00 -- -- -- -- -- -- -- -- -- |................| |----------------------------------------------------------|----------------| Если данных нет, то приходит 3 байта: Код:
Packet:SMSG (0x0957) SMSG_QUEST_POI_QUERY_RESPONSE, Data size: 3 |---------------------------------------------------------------------------| | OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F |0123456789ABCDEF| |----------------------------------------------------------|----------------| |00000000| 00 00 00 -- -- -- -- -- -- -- -- -- -- -- -- -- |................| |----------------------------------------------------------|----------------| Код:
Packet:SMSG (0x0957) SMSG_QUEST_POI_QUERY_RESPONSE, Data size: 14 |---------------------------------------------------------------------------| | OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F |0123456789ABCDEF| |----------------------------------------------------------|----------------| |00000000| 00 00 08 00 00 20 3B 0D 00 00 BD 0C 00 00 -- -- |..... ;.........| |----------------------------------------------------------|----------------| Код:
unsigned int __thiscall sub_6B760F(void *this, int a2, int a3) { void *v3; // esi@1 unsigned int v4; // eax@1 unsigned int result; // eax@1 int v6; // eax@3 int v7; // edi@4 int v8; // eax@5 int v9; // eax@6 int v10; // ecx@6 int v11; // eax@7 int v12; // [sp+14h] [bp-Ch]@1 unsigned int v13; // [sp+18h] [bp-8h]@1 int v14; // [sp+1Ch] [bp-4h]@2 LOBYTE(v12) = 0; v3 = this; v4 = CDataStore__Read21Bits(v12); sub_6B718B((char *)v3 + 16, v4); result = 0; v13 = 0; if ( *((_DWORD *)v3 + 4) ) { v14 = 0; do { LOBYTE(v12) = 0; v6 = CDataStore__Read22Bits(v12); CDataStore__StoreAndCheck22Bits_0(v6); ++v13; result = v13; v14 += 20; } while ( v13 < *((_DWORD *)v3 + 4) ); } v7 = 0; v13 = 0; if ( *((_DWORD *)v3 + 4) ) { do { v8 = *((_DWORD *)v3 + 5); v12 = 0; if ( *(_DWORD *)(v7 + v8 + 4) ) { do { v14 = 0; CDataStore__GetInt32(&v14); v9 = v12; *(_DWORD *)(*(_DWORD *)(v7 + *((_DWORD *)v3 + 5) + 8) + 4 * v12) = v14; v10 = *((_DWORD *)v3 + 5); v12 = v9 + 1; } while ( (unsigned int)(v9 + 1) < *(_DWORD *)(v7 + v10 + 4) ); } v12 = 0; CDataStore__GetInt32(&v12); v11 = *((_DWORD *)v3 + 5); ++v13; *(_DWORD *)(v7 + v11) = v12; result = v13; v7 += 20; } while ( v13 < *((_DWORD *)v3 + 4) ); } return result; } Но вот прикол в том, что поменялось содержимое пакета. Если раньше в пакете содержались координаты областей и т.п. то сейчас непонятно что: Код:
QuestCount: 1 Block_0 size: 1 Unk_0_0: 3387 Quest_0 Id: 3261 Но вот что и где, не знаю. ЗЫ. Запрашивал POI так: Код:
#define CMSG_QUEST_POI_QUERY 0x16B8 // opcode #define CLIENT_SERVICES_SEND2 0x8F9A #define CDATA_STORE_V_TABLE 0x9298F0 // proto typedef void(__stdcall *Send2)(CDataStore *pData); void SendQuestPOIQuery(int max_entry) { CDataStore packet = { (void*)(baseAddress + CDATA_STORE_V_TABLE) }; for (int entry = 1; entry < max_entry; ++entry) { packet.Init(4 + 3 + 4); // write opcode *(DWORD*)(packet.buffer + 0) = CMSG_QUEST_POI_QUERY; *(BYTE*)(packet.buffer + 4) = 0; *(BYTE*)(packet.buffer + 5) = 0; *(BYTE*)(packet.buffer + 6) = 1 << 2; // 22 bits *(DWORD*)(packet.buffer + 7) = entry; printf("Send packet CMSG_QUEST_POI_QUERY, entry %i\n", entry); Send2(baseAddress + CLIENT_SERVICES_SEND2)(&packet); free(packet.buffer); Sleep(50); } } |