Объявления
Поздравляем
Roman2211


Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

База данных IDA от void17

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
void_17  
имя: имя
Ветеран
Ветеран
 
Сообщения: 548
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 132 раз.

Re: База данных IDA от void17

Сообщение void_17 » 25 ноя 2021, 08:35

Загрузите все это дело вместе с дримкаст базой и чистой базой SoD-а на сервер as239, пожалуйста. Как мне сделают новую учетку, смогу работать над восстановлением сигнатур.(самая скучная работа -- моя, но она как показывает практика, необходима как кислород нам всем :smile4: ).
А я пока схожу по делам в мою шарагу.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 25 ноя 2021, 08:38

Цитата:
Кстати. Лучше убрать shifted pointers. Это бывает удобно, но потом сложно переносить код в реальный C++ исполняемый файл.

А без них нечитаемо вообще. Это машине всё равно, а для человека будет куча непонятных оффсетов.

Код до того, как я убрал shifted pointer:

Код: Выделить всё
// Заполняем массив C
iArmy_C = 0;
if ( pCombatManager->ArmyNum[this->Side[AI_CASTER]] > 0 )
{
   // Shifted pointer for C
   pArmyInfo_C = &this->AI_ArmyInfo_C[1];
   do
   {
     AI_ArmyInfo_C = ADJ(pArmyInfo_C)->AI_ArmyInfo_C;
     ADJ(pArmyInfo_C)->AI_ArmyInfo_C[0] = ADJ(pArmyInfo_C)->AI_ArmyInfo_A[0];
     ADJ(pArmyInfo_C)->AI_ArmyInfo_C[1] = ADJ(pArmyInfo_C)->AI_ArmyInfo_A[1];
     ADJ(pArmyInfo_C)->AI_ArmyInfo_C[2] = ADJ(pArmyInfo_C)->AI_ArmyInfo_A[2];
     ADJ(pArmyInfo_C)->AI_ArmyInfo_C[3] = ADJ(pArmyInfo_C)->AI_ArmyInfo_A[3];
     if ( ADJ(pArmyInfo_C)->AI_ArmyInfo_B[1] > ADJ(pArmyInfo_C)->AI_ArmyInfo_C[1] )
     {
      *AI_ArmyInfo_C = ADJ(pArmyInfo_C)->AI_ArmyInfo_B[0];
      ADJ(pArmyInfo_C)->AI_ArmyInfo_C[1] = ADJ(pArmyInfo_C)->AI_ArmyInfo_B[1];
      AI_ArmyInfo_C[2] = ADJ(pArmyInfo_C)->AI_ArmyInfo_B[2];
      AI_ArmyInfo_C[3] = ADJ(pArmyInfo_C)->AI_ArmyInfo_B[3];
     }
     pArmyInfo_C += 4;
     ++iArmy_C;
   }
   while ( iArmy_C < gpCombatManager->ArmyNum[this->Side[AI_CASTER]] );
}

и после:

Код: Выделить всё
// Заполняем массив C
iArmy_C = 0;
if ( pCombatManager->ArmyNum[this->Side[AI_CASTER]] > 0 )
{
   // Shifted pointer for C
   pArmyInfo_C = &this->AI_ArmyInfo_C[1];
   do
   {
     AI_ArmyInfo_C = (pArmyInfo_C - 4);
     *(pArmyInfo_C - 4) = *(pArmyInfo_C - 644);
     *pArmyInfo_C = *(pArmyInfo_C - 644 + 4);
     *(pArmyInfo_C - 4 + 8) = *(pArmyInfo_C - 644 + 8);
     *(pArmyInfo_C - 4 + 12) = *(pArmyInfo_C - 644 + 12);
     if ( *(pArmyInfo_C - 320) > *pArmyInfo_C )
     {
      *AI_ArmyInfo_C = *(pArmyInfo_C - 324);
      *pArmyInfo_C = *(pArmyInfo_C - 324 + 4);
      AI_ArmyInfo_C[2] = *(pArmyInfo_C - 324 + 8);
      AI_ArmyInfo_C[3] = *(pArmyInfo_C - 324 + 12);
     }
     pArmyInfo_C += 16;
     ++iArmy_C;
   }
   while ( iArmy_C < gpCombatManager->ArmyNum[this->Side[AI_CASTER]] );
}
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 25 ноя 2021, 09:05

Ну, вот. Круче будет, только если кто меня (или IDA) научит делать структуры внутри структур.

Код: Выделить всё
void __thiscall type_AI_spellcaster::set_melee_enemies(type_AI_spellcaster *this)
{
  type_AI_spellcaster *AI_spellcaster; // edx
  army *Army; // esi
  int *__shifted(type_AI_spellcaster,0x54) pArmyInfo_A; // ebx
  ECreatureType Type; // eax
  army *AITargetArmy; // edi
  int Speed; // eax
  int average_damage; // eax
  int iArmy; // [esp+8h] [ebp-8h]

  AI_spellcaster = this;
  Army = gpCombatManager->Army[this->Side[AI_CASTER]];
  memset(this->AI_ArmyInfo_A, 0, sizeof(this->AI_ArmyInfo_A));
  iArmy = 0;
  if ( gpCombatManager->ArmyNum[this->Side[AI_CASTER]] > 0 )
  {
    pArmyInfo_A = &this->AI_ArmyInfo_A[1];
    do
    {
      if ( !Army->SpellDuration[SPL_BLIND]
        && !Army->SpellDuration[SPL_STONE_GAZE]
        && !Army->SpellDuration[SPL_PARALYZE]
        && (Army->Flags & CANNOTMOVE) == 0 )
      {
        Type = Army->Type;
        if ( Type != CID_FIRST_AID_TENT && Type != CID_AMMO_CART && !Army->SpellDuration[SPL_HYPNOTIZE] )
        {
          AITargetArmy = Army->AITargetArmy;
          if ( AITargetArmy )
          {
            if ( !army::can_shoot(Army, 0) )
            {
              Speed = army::GetSpeed(Army);
              if ( army::get_AI_target_time(Army, Speed) <= 1 )
              {
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A[0] = AITargetArmy;
                average_damage = army::get_average_damage(AITargetArmy, Army, 0, AITargetArmy->AmountAlive, 0, 0);
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A[1] = average_damage;
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A[3] = average_damage;
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A[2] = 1;
              }
            }
            AI_spellcaster = this;
          }
        }
      }
      pArmyInfo_A += 4;
      ++iArmy;
    }
    while ( iArmy < gpCombatManager->ArmyNum[AI_spellcaster->Side[AI_CASTER]] );
  }
}

Вот как из массива AI_ArmyInfo_A[] сделать структуру с понятными полями, если массив уже является частью структуры? Создать ещё одну и поменять тип в декомпиляте?

* * *
Вах, получилось :smile18:

Код: Выделить всё
void __thiscall type_AI_spellcaster::set_melee_enemies(type_AI_spellcaster *this)
{
  type_AI_spellcaster *AI_spellcaster; // edx
  army *Army; // esi
  int *__shifted(type_AI_spellcaster,0x54) pArmyInfo_A; // ebx
  ECreatureType Type; // eax
  army *AITargetArmy; // edi
  int Speed; // eax
  int average_damage; // eax
  int iArmy; // [esp+8h] [ebp-8h]

  AI_spellcaster = this;
  Army = gpCombatManager->Army[this->Side[AI_CASTER]];
  memset(&this->AI_ArmyInfo_A, 0, 320u);
  iArmy = 0;
  if ( gpCombatManager->ArmyNum[this->Side[AI_CASTER]] > 0 )
  {
    pArmyInfo_A = &this->AI_ArmyInfo_A.average_damage;
    do
    {
      if ( !Army->SpellDuration[SPL_BLIND]
        && !Army->SpellDuration[SPL_STONE_GAZE]
        && !Army->SpellDuration[SPL_PARALYZE]
        && (Army->Flags & CANNOTMOVE) == 0 )
      {
        Type = Army->Type;
        if ( Type != CID_FIRST_AID_TENT && Type != CID_AMMO_CART && !Army->SpellDuration[SPL_HYPNOTIZE] )
        {
          AITargetArmy = Army->AITargetArmy;
          if ( AITargetArmy )
          {
            if ( !army::can_shoot(Army, 0) )
            {
              Speed = army::GetSpeed(Army);
              if ( army::get_AI_target_time(Army, Speed) <= 1 )
              {
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A.Army = AITargetArmy;
                average_damage = army::get_average_damage(AITargetArmy, Army, 0, AITargetArmy->AmountAlive, 0, 0);
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A.average_damage = average_damage;
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A.average_damage_0 = average_damage;
                ADJ(pArmyInfo_A)->AI_ArmyInfo_A.field_C = 1;
              }
            }
            AI_spellcaster = this;
          }
        }
      }
      pArmyInfo_A += 4;
      ++iArmy;
    }
    while ( iArmy < gpCombatManager->ArmyNum[AI_spellcaster->Side[AI_CASTER]] );
  }
}

Если верить названию функции, то AI_ArmyInfo_A - это информация о рукопашниках. Кроме того, условие if ( !army::can_shoot(Army, 0) ) {} на это намекает :smile1:
Вернуться к началу

offlineАватара пользователя
void_17  
имя: имя
Ветеран
Ветеран
 
Сообщения: 548
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 132 раз.

Re: База данных IDA от void17

Сообщение void_17 » 25 ноя 2021, 09:23

ArmyInfo какой тип имеет?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 25 ноя 2021, 09:25

Код: Выделить всё
00000000 AI_ArmyInfo struc ; (sizeof=0x10, mappedto_533)             ; XREF: type_AI_spellcaster/r
00000000 Army      dd ?
00000004 average_damage dd ?
00000008 field_C   dd ?
0000000C average_damage_0 dd ?
00000010 AI_ArmyInfo ends

Я превратил массив из 4-х элементов в понятную структуру. Только поля нужно переименовать :smile14:
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 25 ноя 2021, 09:28

Вот пример уже почти разобранной функции type_AI_spellcaster::find_enemy_attacks(type_AI_spellcaster *this):

Код: Выделить всё
void __thiscall type_AI_spellcaster::find_enemy_attacks(type_AI_spellcaster *this)
{
  int side; // eax
  combatManager *pCombatManager; // esi
  army *Army; // edx
  int *__shifted(type_AI_spellcaster,0x19C) pB; // edi
  int sideEnemy; // eax
  army *EnemyArmy; // esi
  ECreatureType Type; // eax
  int average_damage; // eax
  int adjusted_damage; // edx
  int average_damage_B; // ecx
  int average_damage_0; // eax
  int avgDamage; // edx
  int average_damage_A; // ecx
  bool iArmy_B; // cc
  int *__shifted(type_AI_spellcaster,0x2D4) pC; // eax
  AI_ArmyInfo *p_AI_ArmyInfo_C; // ecx
  army *v18; // [esp+Ch] [ebp-10h]
  int iArmy_A; // [esp+10h] [ebp-Ch]
  int iArmy_C; // [esp+10h] [ebp-Ch]
  int iArmy; // [esp+14h] [ebp-8h]
  army *Target; // [esp+18h] [ebp-4h]

  this->bitfield_18 = 0;
  this->bitfield_14 = 0;
  memset(&this->AI_ArmyInfo_C, 0, 0x140u);
  memset(&this->AI_ArmyInfo_B, 0, 0x140u);
  type_AI_spellcaster::set_melee_enemies(this);
  side = this->Side[AI_CASTER];
  pCombatManager = gpCombatManager;
  iArmy_A = 0;
  Army = gpCombatManager->Army[side];
  Target = Army;
  if ( gpCombatManager->ArmyNum[side] <= 0 )
    goto label_FillArmyInfo_C;
  // Shifted pointer for B
  pB = &this->AI_ArmyInfo_B.average_damage_0;
  do
  {
    if ( (Army->Flags & CANNOTMOVE) != 0 || Army->Type == CID_ARROW_TOWER )
      goto LABEL_26;
    sideEnemy = this->Side[AI_ENEMY];
    iArmy = 0;
    EnemyArmy = pCombatManager->Army[sideEnemy];
    v18 = ADJ(pB)->AI_ArmyInfo_A.Army;
    if ( gpCombatManager->ArmyNum[sideEnemy] <= 0 )
      goto LABEL_25;
    do
    {
      if ( !EnemyArmy->SpellDuration[SPL_BLIND]
        && !EnemyArmy->SpellDuration[SPL_STONE_GAZE]
        && !EnemyArmy->SpellDuration[SPL_PARALYZE]
        && (EnemyArmy->Flags & CANNOTMOVE) == 0 )
      {
        Type = EnemyArmy->Type;
        if ( Type != CID_FIRST_AID_TENT
          && Type != CID_AMMO_CART
          && !EnemyArmy->SpellDuration[SPL_HYPNOTIZE]
          && Type != CID_ARROW_TOWER
          && army::get_total_hit_points(EnemyArmy, 1) )
        {
          if ( army::can_shoot(EnemyArmy, 0) )
          {
            average_damage = army::get_average_damage(EnemyArmy, Target, 1, EnemyArmy->AmountAlive, 0, 0);
            adjusted_damage = average_damage + ADJ(pB)->AI_ArmyInfo_B.average_damage_0;
            ++ADJ(pB)->AI_ArmyInfo_B.field_8;
            average_damage_B = ADJ(pB)->AI_ArmyInfo_B.average_damage;
            ADJ(pB)->AI_ArmyInfo_B.average_damage_0 = adjusted_damage;
            if ( average_damage > average_damage_B )
            {
              ADJ(pB)->AI_ArmyInfo_B.average_damage = average_damage;
              ADJ(pB)->AI_ArmyInfo_B.Army = EnemyArmy;
            }
LABEL_22:
            this->bitfield_14 |= 1 << EnemyArmy->Index;
            goto LABEL_23;
          }
          if ( EnemyArmy != v18 && ((1 << iArmy_A) & EnemyArmy->field_544) != 0 )
          {
            this->bitfield_18 |= 1 << iArmy;
            average_damage_0 = army::get_average_damage(EnemyArmy, Target, 0, EnemyArmy->AmountAlive, 0, 0);
            avgDamage = average_damage_0 + ADJ(pB)->AI_ArmyInfo_A.average_damage_0;
            ++ADJ(pB)->AI_ArmyInfo_A.field_8;
            average_damage_A = ADJ(pB)->AI_ArmyInfo_A.average_damage;
            ADJ(pB)->AI_ArmyInfo_A.average_damage_0 = avgDamage;
            if ( average_damage_0 > average_damage_A )
            {
              ADJ(pB)->AI_ArmyInfo_A.average_damage = average_damage_0;
              ADJ(pB)->AI_ArmyInfo_A.Army = EnemyArmy;
            }
            goto LABEL_22;
          }
        }
      }
LABEL_23:
      ++EnemyArmy;
      ++iArmy;
    }
    while ( iArmy < gpCombatManager->ArmyNum[this->Side[AI_ENEMY]] );
    Army = Target;
LABEL_25:
    pCombatManager = gpCombatManager;
LABEL_26:
    pB += 4;
    ++Army;
    iArmy_B = ++iArmy_A < pCombatManager->ArmyNum[this->Side[AI_CASTER]];
    Target = Army;
  }
  while ( iArmy_B );
label_FillArmyInfo_C:
  // Заполняем массив C
  iArmy_C = 0;
  if ( pCombatManager->ArmyNum[this->Side[AI_CASTER]] > 0 )
  {
    // Shifted pointer for C
    pC = &this->AI_ArmyInfo_C.average_damage;
    do
    {
      p_AI_ArmyInfo_C = &ADJ(pC)->AI_ArmyInfo_C;
      ADJ(pC)->AI_ArmyInfo_C.Army = ADJ(pC)->AI_ArmyInfo_A.Army;
      ADJ(pC)->AI_ArmyInfo_C.average_damage = ADJ(pC)->AI_ArmyInfo_A.average_damage;
      ADJ(pC)->AI_ArmyInfo_C.field_8 = ADJ(pC)->AI_ArmyInfo_A.field_8;
      ADJ(pC)->AI_ArmyInfo_C.average_damage_0 = ADJ(pC)->AI_ArmyInfo_A.average_damage_0;
      if ( ADJ(pC)->AI_ArmyInfo_B.average_damage > ADJ(pC)->AI_ArmyInfo_C.average_damage )
      {
        p_AI_ArmyInfo_C->Army = ADJ(pC)->AI_ArmyInfo_B.Army;
        ADJ(pC)->AI_ArmyInfo_C.average_damage = ADJ(pC)->AI_ArmyInfo_B.average_damage;
        p_AI_ArmyInfo_C->field_8 = ADJ(pC)->AI_ArmyInfo_B.field_8;
        p_AI_ArmyInfo_C->average_damage_0 = ADJ(pC)->AI_ArmyInfo_B.average_damage_0;
      }
      pC += 4;
      ++iArmy_C;
    }
    while ( iArmy_C < gpCombatManager->ArmyNum[this->Side[AI_CASTER]] );
  }
}
Последний раз редактировалось AlexSpl 25 ноя 2021, 09:32, всего редактировалось 1 раз.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: имя
Ветеран
Ветеран
 
Сообщения: 548
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 132 раз.

Re: База данных IDA от void17

Сообщение void_17 » 25 ноя 2021, 09:28

Цитата:
А без них нечитаемо вообще. Это машине всё равно, а для человека будет куча непонятных оффсетов.

Я имею ввиду, когда в .cpp файл будем переносить, нужно перенести без shifter pointers. Либо сделать костыль, что позволит компилятору их обрабатывать. Потому что это чисто IDA-вская фишка.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 25 ноя 2021, 09:35

Цитата:
Я имею ввиду, когда в .cpp файл будем переносить, нужно перенести без shifter pointers.

А они и не нужны будут. Будут прямые указатели, а не сдвинутые. Это уже компилятор оптимизирует, ему всё равно, откуда мерить смещения.

Вот этот цикл заполняет AI_ArmyInfo_C;

Код: Выделить всё
do
{
  pArmyInfo_C = &ADJ(pC)->AI_ArmyInfo_C:
  ADJ(pC)->AI_ArmyInfo_C.Army = ADJ(pC)->AI_ArmyInfo_A.Army;
  ADJ(pC)->AI_ArmyInfo_C.average_damage = ADJ(pC)->AI_ArmyInfo_A.average_damage;
  ADJ(pC)->AI_ArmyInfo_C.field_8 = ADJ(pC)->AI_ArmyInfo_A.field_8;
  ADJ(pC)->AI_ArmyInfo_C.average_damage_0 = ADJ(pC)->AI_ArmyInfo_A.average_damage_0;
  if ( ADJ(pC)->AI_ArmyInfo_B.average_damage > ADJ(pC)->AI_ArmyInfo_C.average_damage )
  {
     pArmyInfo_C->Army = ADJ(pC)->AI_ArmyInfo_B.Army;
     ADJ(pC)->AI_ArmyInfo_C.average_damage = ADJ(pC)->AI_ArmyInfo_B.average_damage;
     pArmyInfo_C->field_8 = ADJ(pC)->AI_ArmyInfo_B.field_8;
     pArmyInfo_C->average_damage_0 = ADJ(pC)->AI_ArmyInfo_B.average_damage_0;
  }
  pC += 4;
  ++iArmy_C;
}
while ( iArmy_C < gpCombatManager->ArmyNum[this->Side[AI_CASTER]] );

Тут сразу видно, что С является копией A, когда ADJ(pC)->AI_ArmyInfo_B.average_damage <= ADJ(pC)->AI_ArmyInfo_C.average_damage и копией B в противном случае.

ADJ(pC) в нормальной программе на С++ будет обычным указателем. Это компилятор взял смещённый и начал работать с ним. На низком уровне нет понятия начала чего-либо, т.е. возможны и отрицательные смещения, например.
Вернуться к началу

offlineАватара пользователя
void_17  
имя: имя
Ветеран
Ветеран
 
Сообщения: 548
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 132 раз.

Re: База данных IDA от void17

Сообщение void_17 » 25 ноя 2021, 11:21

AlexSpl, бросил все по пути D:\IDA на удаленном сервере. Когда по московскому времени сможете примерно и по каким дням?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: База данных IDA от void17

Сообщение AlexSpl » 25 ноя 2021, 11:31

Расписание вряд ли получится составить. У меня нет цели декомпилировать вообще всё. Я думаю, пока буду заниматься боевым AI. Как минимум с заклинаниями нужно разобраться, а там посмотрим :smile2: Базу скину, конечно же.
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron