Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Копаем клиент

Важная информация

Копаем клиент Копаем клиент

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.07.2016, 08:58   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию 7.0.3 WDB cache handlers

Разбирая структуру кеша обнаружил что CDataStore::GetFloat заменены на CDataStore::GetInt32, хотя данные в этих полях хранятся в формете float. Я понимаю что в памяти хоть так хоть так будет 4 байта, но это несколько усложнило разбор самих изменений.

вот код хандлера:
Код:
unsigned int __thiscall ClientCache::GetCreatureCacheRow(void *this, int a2, int a3)
{
  void *v3; // esi@1
  int v4; // eax@1
  int v5; // ST08_4@1
  int v6; // eax@1
  int v7; // ST08_4@1
  _DWORD *v8; // ebx@1
  signed int v9; // edi@1
  int v10; // eax@2
  int v11; // ST08_4@2
  int v12; // edi@3
  int v13; // ebx@3
  signed int v14; // esi@3
  int *v15; // ebx@5
  signed int v16; // esi@5
  void *v17; // esi@7
  int v18; // eax@7
  signed int v19; // ebx@7
  int *v20; // esi@7
  int *v21; // ebx@9
  signed int v22; // esi@9
  int v23; // esi@11
  int v24; // xmm0_4@11
  int v25; // xmm0_4@11
  int v26; // ebx@11
  int v27; // eax@11
  int v28; // eax@11
  int v29; // eax@11
  char v30; // ST08_1@11
  int v31; // ST04_4@11
  unsigned int v32; // esi@11
  unsigned int result; // eax@12
  int *v34; // ecx@16
  int v35; // [sp+Ch] [bp-14h]@1
  __int16 v36; // [sp+10h] [bp-10h]@1
  int v37; // [sp+14h] [bp-Ch]@2
  int v38; // [sp+18h] [bp-8h]@1
  void *v39; // [sp+1Ch] [bp-4h]@1

  v3 = this;
  LOBYTE(v38) = 0;
  v39 = this;
  v35 = a2;
  v36 = 2048;
  v4 = CDataStore::GetBits11(v38);              // title len
  LOBYTE(v38) = 0;
  v5 = v38;
  *((_DWORD *)v3 + 1) = v4;
  v6 = CDataStore::GetBits11(v5);               // titleAlt_len
  LOBYTE(v38) = 0;
  v7 = v38;
  *((_DWORD *)v3 + 4) = v6;
  *((_DWORD *)v3 + 7) = CDataStore::GetBits6((int)&v35, v7);// cursorName_len
  v8 = (char *)v3 + 180;
  *((_BYTE *)v3 + 56) = CDataStore::GetBit(&v35) != 0;// racial leader
  v9 = 4;
  do
  {
    LOBYTE(v38) = 0;
    v10 = CDataStore::GetBits11(v38);           // name len
    LOBYTE(v37) = 0;
    v11 = v37;
    *(v8 - 12) = v10;
    *v8 = CDataStore::GetBits11(v11);           // name alt len
    v8 += 3;
    --v9;
  }
  while ( v9 );
  v12 = a2;
  v13 = (int)v3 + 128;
  v14 = 4;
  do
  {
    CDataStore::GetDynamicString(v12, *(_DWORD *)(v13 + 4), a3);// name
    CDataStore::GetDynamicString(v12, *(_DWORD *)(v13 + 52), a3);// name alt
    v13 += 12;
    --v14;
  }
  while ( v14 );
  v15 = (int *)((char *)v39 + 96);
  v16 = 2;
  do
  {
    a2 = 0;
    CDataStore::GetInt32(&a2);                  // flags
    *v15 = a2;
    ++v15;
    --v16;
  }
  while ( v16 );
  a2 = 0;
  CDataStore::GetInt32(&a2);                    // CreatureType
  v17 = v39;
  v18 = a2;
  a2 = 0;
  *((_DWORD *)v39 + 9) = v18;
  CDataStore::GetInt32(&a2);                    // CreatureFamily
  *((_DWORD *)v17 + 10) = a2;
  a2 = 0;
  CDataStore::GetInt32(&a2);                    // Classification
  *((_DWORD *)v17 + 11) = a2;
  v19 = 2;
  v20 = (int *)((char *)v17 + 104);
  do
  {
    a2 = 0;
    CDataStore::GetInt32(&a2);                  // ProxyCreatureID
    *v20 = a2;
    ++v20;
    --v19;
  }
  while ( v19 );
  v21 = (int *)((char *)v39 + 112);
  v22 = 4;
  do
  {
    a2 = 0;
    CDataStore::GetInt32(&a2);                  // CreatureDisplayID
    *v21 = a2;
    ++v21;
    --v22;
  }
  while ( v22 );
  a2 = 0;
  CDataStore::GetInt32(&a2);                    // float HpMulti
  v23 = (int)v39;
  v24 = a2;
  a2 = 0;
  *((_DWORD *)v39 + 12) = v24;
  CDataStore::GetInt32(&a2);                    // float EnergyMulti
  v25 = a2;
  a2 = 0;
  *(_DWORD *)(v23 + 52) = v25;
  CDataStore::GetInt32(&a2);                    // quest item cont
  v26 = v23 + 60;
  sub_60633B(a2);
  a2 = 0;
  CDataStore::GetInt32(&a2);                    // creatureMovementInfoID
  v27 = a2;
  a2 = 0;
  *(_DWORD *)(v23 + 80) = v27;
  CDataStore::GetInt32(&a2);                    // requireExpansion
  v28 = a2;
  a2 = 0;
  *(_DWORD *)(v23 + 84) = v28;
  CDataStore::GetInt32(&a2);                    // questFlag
  v29 = a2;
  a2 = 0;
  *(_DWORD *)(v23 + 88) = v29;
  CDataStore::GetInt32(&a2);                    // unk (legion)
  v30 = a3;
  v31 = *(_DWORD *)(v23 + 4);
  *(_DWORD *)(v23 + 92) = a2;
  CDataStore::GetDynamicString(v12, v31, v30);  // title
  CDataStore::GetDynamicString(v12, *(_DWORD *)(v23 + 16), a3);// title alt
  CDataStore::GetDynamicString(v12, *(_DWORD *)(v23 + 28), a3);// cursor name
  v32 = 0;
  while ( 1 )
  {
    result = *(_DWORD *)(v26 + 16);
    if ( result == -1 )
      result = *(_DWORD *)v26;
    if ( v32 >= result )
      break;
    a3 = 0;
    CDataStore::GetInt32(&a3);                  // QuestItem
    if ( *(_DWORD *)(v26 + 16) == -1 )
      v34 = (int *)(*(_DWORD *)(v26 + 4) + 4 * v32);
    else
      v34 = (int *)(v26 + 4 * v32);
    ++v32;
    *v34 = a3;
  }
  return result;
}
__________________
Konctantin вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Add Outdoor PvP handlers to various files newsbot CMaNGOS Commits 0 18.08.2012 02:00
Cache Nimlot Новичкам 1 23.07.2012 20:20
WDB Cache Konctantin Копаем клиент 12 21.03.2011 11:59


Текущее время: 05:39. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot