Объявления

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

Улучшение ИИ

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 03 май 2020, 12:38

as239 писал(а):

Цитата:
Орлоглаз считаю одной из самых интересных механик в Героях. К сожалению, ему не дает раскрыться контекст геройских игр, их характер. На небольших картах, в присутствии сильных ИИ соперников потенциал механики, считаю, хорошо бы раскрылся.

Он весьма неплох для оффлайна т.к. там много боев с сильными магическими героями.
Не раз видел описания прохождения авторских карт, где его берут первым делом т.к. только так можно получить нужные заклинания.


Вот в том и дело, что офлайн Герои по сути держатся на всевозможных авторских ухищрениях. А мне бы хотелось иметь возможность поиграть на случайной карте в стандартном стратегическом ключе, или на обычном фиксе без авторских ухищрений.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 03 май 2020, 12:51

Ничего серьезного по ИИ у меня сейчас просто нет. Скажем, AI_ManaSaving и BattleAI ты можешь найти на этом форуме. И это едва ли не самое эффективное, что на данный момент есть. Серьезные вещи пока только в разработке :smile1:

Вот пример из многочисленных мелких улучшений. Предназначено, чтобы ИИ при осаде адекватно оценивал стоит ли ему выходить из замка. В оригинале он смотрит, чьи стрелки сильнее. Однако много чего не учитывает, к сожалению. В коде это поправлено.

Код: Выделить всё
int __stdcall AI_correctCitadelShootValue(LoHook* h, HookContext* c)
{
   c->edx = c->edx * 2;

   return EXEC_DEFAULT;
}

int __stdcall AI_correctCastleShootValue(LoHook* h, HookContext* c)
{
   c->eax = c->eax * 2;

   return EXEC_DEFAULT;
}

int __stdcall AI_accountForWallDefense(LoHook* h, HookContext* c)
{
   _BattleStack_* stack = (_BattleStack_*)c->esi;
   _Hero_* hero = o_BattleMgr->hero[stack->side];
   bool heroHasSuperBow = false;
   if(hero)
   if(hero->DoesWearArtifact(AID_GOLDEN_BOW) || hero->DoesWearArtifact(AID_BOW_OF_THE_SHARPSHOOTER))
      heroHasSuperBow = true;

   int cmAddr = *(int*)0x699420;
   int wallsHP_0 = 0;
   int wallsHP = 0;
   if(stack->side == 0 && o_BattleMgr->siege_kind2 > 0)
   if(stack->creature_id != CID_ARCH_MAGE && stack->creature_id != CID_SHARPSHOOTER
      && heroHasSuperBow == false)
   {
      for(int i=0; i < 14; i++)
      {
         wallsHP_0 += *(int*)(cmAddr + 0x13F60 + i*4);
         wallsHP += *(int*)(cmAddr + 0x13FA8 + i*4);
      }

      if(wallsHP_0 == 0)
         wallsHP_0 = 1;

      c->edi = c->edi * (1.0 - (double)wallsHP / (2.0 * (double)wallsHP_0));
   }


   double archeryCoef[4] = {1.0, 1.1, 1.25, 1.5};
   if(hero && hero->second_skill[HSS_ARCHERY] > 0)
      c->edi = c->edi * archeryCoef[hero->second_skill[HSS_ARCHERY]];

   if(heroHasSuperBow == true || stack->creature_id == CID_SHARPSHOOTER)
      c->edi *= 2;

   return EXEC_DEFAULT;
}

_PI->WriteLoHook(0x420DDF, AI_correctCitadelShootValue);
_PI->WriteLoHook(0x420E03, AI_correctCastleShootValue);
_PI->WriteLoHook(0x420CB1, AI_accountForWallDefense);


Другой пример, исправляющий неадекватную оценку ИИ результата штурма замка. В оригинале он смотрит силу либо гарнизона, либо героя-гостя отдельно. А в реальности, как мы знаем, если нет героя-хозяина, их силы будут соединены. На чем компа вполне можно ловить. Написано было давно через использование динамической памяти (которую в принципе можно и не освобождать по причине слишком малой величины занимаемого объема). Сейчас обычно так не делаю.

Код: Выделить всё
_Hero_* vHero = new _Hero_();
_Army_* townArmy = new _Army_();
...
int __stdcall addVHeroArmy(LoHook* h, HookContext* c)
{
   _Town_* town = *(_Town_**)(c->ebp - 0x20);

   if(town->down_hero_id != -1 && town->up_hero_id == -1)
   {
      *vHero = *(_Hero_*)o_GameMgr->GetHero(town->down_hero_id);
      c->esi = (int)vHero;
      *townArmy = town->guards;
      CALL_2(signed int, __thiscall, 0x44B4F0, &vHero->army, townArmy);
      c->eax = (int)(&vHero->army);
   }

    return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x52A1DC, addVHeroArmy);


В общем, есть много всяких моментов, но все это - капля в море... На данный момент все это существенно не поможет.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Улучшение ИИ

Сообщение as239 » 03 май 2020, 13:48

Цитата:
Сообщение - это как бы и хорошо, и плохо. Плохо - то, что соперник узнает, что заклинание было выучено.

Да, для онлайна, лучше без этого.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Улучшение ИИ

Сообщение as239 » 03 май 2020, 13:51

Цитата:
Однако сейчас я бы и тебе не советовал (хотя, возможно, я не прав) делать какой-то релиз в этом направлении. Слишком слабы сейчас наработки по ИИ. Боюсь, они вызовут только отторжение.

Почему, я хотел бы использовать это очень точечно и аккуратно, только для одного шаблона, который создан специально для более активной игры с ИИ.
Это что-то новенькое, такого еще не было.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 03 май 2020, 13:59

Я понял, но сейчас пока нет таких возможностей...
Заниматься ИИ очень интересно, но после того, как я делаю очередную маленькую фишку, понимаю, что для наполнения чашки нужно еще с тысячу таких капель...

В общем, какие я вижу перспективы по ИИ на будущее - пара-тройка крупных улучшений + большое число мелких, которые все вместе (и только вместе !) дадут осязаемый эффект. Может, это и бредовое занятие, что я делаю, но, повторю, просто интересно очень.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Улучшение ИИ

Сообщение as239 » 03 май 2020, 14:03

Цитата:
Советовал бы тебе пока не распылять силы по разным направлениям. Ты же, например, занимался ГСК, понятно, что это требует много времени.

Конечно, главнейшее мое направление это ГСК, но за последние 2 месяца, я не сдвинулся там не на шаг.
Хотел исправить сдвинутые охраны, застрял в RMG_MonsterGenerationZoneBlocks_00541630, вроде не очень большая функция, но никак не могу понять что там происходит.
Я уж не говорю про более сложные вещи, вроде размер зон, затопления и чрезмерной гористости.
Поэтому, потихоньку щупаю другие стороны, чтобы проект не стоял полностью на месте.
И именно поэтому просил готовый код, т.к. еще реверс ИИ это точно не вариант.

Реверс - это самое сложное и жуткое для меня.
А вот с готовыми адресами и понятной логикой, написать несколько функций и увидеть результат это же кайф и занимает совсем немного времени.

В принципе, я получил много полезной информации, с которой можно двигаться дальше. Спасибо огромное!
Я планирую дать оранжевому/зеленому ИИ со старта 300 тыс. золота и по 300 ресурсов, всегда 3 стека и отстроенный 2-й уровень.
Плюс улучшения, озвученные в этой теме.
Я надеюсь этого будет достаточно чтобы создать проблемы даже профи игроку.
Последний раз редактировалось as239 03 май 2020, 14:21, всего редактировалось 1 раз.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

Re: Улучшение ИИ

Сообщение as239 » 03 май 2020, 14:16

Цитата:
Заниматься ИИ очень интересно, но после того, как я делаю очередную маленькую фишку, понимаю, что для наполнения чашки нужно еще с тысячу таких капель...

В общем, какие я вижу перспективы по ИИ на будущее - пара-тройка крупных улучшений + большое число мелких, которые все вместе (и только вместе !) дадут осязаемый эффект. Может, это и бредовое занятие, что я делаю, но, повторю, просто интересно очень.

Надеюсь не обижу, но на мой взгляд, для массовой сетевой игры это абсолютно бесперспективное направление.

И я даже не видел вообще никаких других возможных вариантов применения.
Но... вот появилось желание сделать для онлайна интересный, новый, динамичный, играбельный шаблон т.к. старые уже заезжены до дыр.
Я начал перебирать возможные варианты, и везде получалось что, в том или ином виде это уже было.
И только вариант с активным ИИ выглядит свежо, при этом расширять его на все шаблоны точно не стоит.
Это именно отдельно блюдо, которое будет очень приятно отведать, когда другое уже все надоело.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 03 май 2020, 15:17

Перспективное или нет, я не знаю. Если посмотреть непредвзято, что плохого в том, что наряду с 2 настоящими игроками по карте будут бегать (а также развивать свое хозяйство и строить коварные планы) довольно опасные субъекты ? Я вижу только повышение разнообразия и интересности.
Единственное, почему это может быть бесперспективным - потому что сложилась определенная "школа" онлайн-профи, которые не мыслят себе онлайн иначе. А когда (и если) сильный ИИ станет восприниматься как норма (это со временем может произойти в том числе и через проект VCMI, если его допилят), то, возможно, любителей Героев 3 к тому времени останется совсем мало...
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

Re: Улучшение ИИ

Сообщение Ben80 » 03 май 2020, 15:40

Кстати, есть идея по корректировке оригинальной механики Дипломатии, в результате чего она перестает так сильно влиять на быстрое развитие игрока, ну и вообще перестает быть имбой. Я обратил внимание на замечание Dirty о том, что Дипла есть имба даже не столько в лейте, сколько в начале игры.
Если интересно, могу поподробнее написать.
Вернуться к началу

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: Улучшение ИИ

Сообщение AlexSpl » 03 май 2020, 16:30

Цитата:
Правда, при проверке у меня не все срослось - Стрельба

Да, должно быть Value = [(500 + Ranged_Units_Power) * k / 100]. Спасибо.

Цитата:
1. Приоритет прокачки ИИ героя всегда следующий - земля (1,2,3), воздух (1,2,3), атака (1,2,3), защита (1,2,3), оригинальный алгоритм

Это как раз можно реализовать в функции, указанной Ben80 на первой странице, назначая этим навыкам нужные веса. Но лучше прописать жёсткий выбор на левел-апе компа.
Вернуться к началу

Пред.След.

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

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

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