Объявления

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

Улучшение ИИ

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

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

Сообщение Ben80 » 04 май 2020, 06:21

as239 писал(а):

Возможно существует какой-то промежуточный вариант.


Да, наверно речь идет о каком-то промежуточном варианте. Откровенно говоря, я сильно не задумывался, как должны выглядеть игры против сильного ИИ. Единственное, по опыту, если например, дать компам очень много ресурсов, и поставить их зоны рядом с человеком, то игра действительно не всегда получается интересная. То есть тут либо ИИ - это танк, с котором ничего не сделаешь, либо кукла для битья. Интересная игра против ИИ - это, наверно, когда у человека есть возможность для маневра через разные зоны. Отсюда - возможность всяческих альтернатив и хитрых решений.

as239 писал(а):

Собственно если сделать грамотную прокачку ИИ


Вот. Есть такой момент. В начале игры ИИ берет сундуки всегда на золото, а не на опыт. Это полезно исправить. По крайней мере для игры на 200% или когда у компа просто много денег.

as239 писал(а):

Еще бы найти таблицy/функцию приритетов по взятию объектов.


Так вот тут все это дело - int __fastcall AICalculateMapPosWeight
Вернуться к началу

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

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

Сообщение as239 » 04 май 2020, 06:22

А известна ли функция по приоритетам постройки?
Я знаю что есть 3-типа ИИ, но хотелось бы чтобы, независимо от типа ИИ, всегда первым делом делал эффективный грейд 1-2-3 уровня, а уже дальше развивался как положено.
Например для башни - это грейд гремлинов, для замка - лучников, для оплота - эльфов, для цитадели - волков, для темницы - троглодитов.
Последний раз редактировалось as239 04 май 2020, 06:29, всего редактировалось 2 раз(а).
Вернуться к началу

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

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

Сообщение Ben80 » 04 май 2020, 06:23

as239 писал(а):

1. BattleAI работает только с нейтралами или в битве с героем ИИ тоже?
Если да, как сделать чтобы с нейтралами он не работал с ИИ работал.


Со всеми работает. Как исправить - в моем коде добавить на наличие героя у вражеской стороны. Если героя нет, код не выполнять.
Вернуться к началу

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

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

Сообщение as239 » 04 май 2020, 06:29

Цитата:
Это полезно исправить. По крайней мере для игры на 200% или когда у компа просто много денег.

Да это было очень полезно, есть информация как это сделать?
Вернуться к началу

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

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

Сообщение Ben80 » 04 май 2020, 06:32

as239 писал(а):

А известна ли функция по приоритетам постройки?
Я знаю что есть 3-типа ИИ, но хотелось бы чтобы, независимо от типа ИИ, всегда первым делом делал эффективный грейд 1-2-3 уровня, а уже дальше развивался как положено.
Например для башни - это грейд гремлинов, для замка - лучников, для оплата - эльфов, для цитадели - волков, для темницы - троглодитов.


Функция известна - sub_0042AE00.
Типы ИИ - на самом деле фикция, разницы нет в их алгоритмах.
Про грейды тоже много думал, но на самом деле ИИ развивает город довольно правильно. Он дает больший вес постройкам двеллингов, нежели апгрейдам, просто потому что с этого больше получает добавку к суммарному AI_Value армии. Оптимально для него было бы, думаю, 1 апгрейд на 2 неделе и 2-4 апгрейда на 3 неделе.

Пару ошибок у него я все-таки нашел. Иногда он строит не очень эффективные постройки. Например, клетки в Инферно или иные генераторы орд. Причем самое ужасное, что строит их в начале недели )). Исправляю так:

Код: Выделить всё
int __stdcall correctBuildingHordeAIValue(LoHook* h, HookContext* c)
{
   if(o_GameMgr->curr_day_ix < 5)
   {
      c->eax = 0;
      c->return_address = 0x42B7A8;

      return NO_EXEC_DEFAULT;
   }

   return EXEC_DEFAULT;
}

int __stdcall correctUpgBuildingHordeAIValue(LoHook* h, HookContext* c)
{
   if(o_GameMgr->curr_day_ix < 5)
   {
      c->eax = 0;
      c->return_address = 0x42B814;

      return NO_EXEC_DEFAULT;
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x42B79F, correctBuildingHordeAIValue);
_PI->WriteLoHook(0x42B825, correctUpgBuildingHordeAIValue);
Вернуться к началу

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

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

Сообщение Ben80 » 04 май 2020, 06:35

as239 писал(а):

Цитата:
Это полезно исправить. По крайней мере для игры на 200% или когда у компа просто много денег.

Да это было очень полезно, есть информация как это сделать?


Изучать int __fastcall AICalculateMapPosWeight + Enter2Object и проследовать к сундукам. Деревья знаний, а также школы войны и магии тоже с этим делом связаны. В том смысле, что там стоит выбор - деньги или развитие героя. В целом на всем этом деле компу можно очень хорошо помочь.
Сам пока не делал.
Вернуться к началу

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

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

Сообщение Ben80 » 04 май 2020, 06:46

По Дипломатии идея состоит в том, чтобы нельзя было присоединить войско, сравнимое по силе с уже имеющимся у героя. А, например, только монстров, которые слабее хотя бы раза в 3. В какой-то степени это похоже на Дипломатию из мода The Succession Wars. Там можно присоединять и монстров, сравнимых по силе с войском героя, но присоединять только часть войска. Следствие в обоих подходах одинаковое - нет резких скачков в развитии войска, которые сильно зависят от случайности.

А изменение механики такое:
в оригинале драка/не драка определяется сравнением харизмы героя и агрессивности монстра.
Ch = Power_Factor + уровень Дипломатии + Sympathy
По моей механике:
Ch = Power_Factor
а далее уже, если не дерутся, то Дипла и Sympathy помогают присоединить монстров.

Плюс изменения в расчете Power_Factor.
В оригинале:
Код: Выделить всё
PowerFactor = 11, если k >= 7
PowerFactor = 2 * (k - 1), если 1 < k < 7
PowerFactor = ...

По моей механике:
Код: Выделить всё
PowerFactor = 12, если k >= 6
PowerFactor = 3 * (k - 2), если 2 < k < 6
PowerFactor = 0, если K <= 2


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

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

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

Сообщение Ben80 » 04 май 2020, 06:55

2AlexSpl Я так понял, что функция для расчета эффективности бафов-дебафов на самом деле не учитывает способности существ. Например, оцениваем эффективность для Air Shield, добавляем в армию рукопашников, и имеем соответствующее увеличение значения функции. То же, например, со Слепотой. Добавляем драконов, и...
С учетом этого можно сказать, что AI_Value для Air Shield завышено очень-очень сильно. Я б поправил с 20/20/50/50 на 5/5/10/10.
Вернуться к началу

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 » 04 май 2020, 07:21

Цитата:
1) В статье соотношение весов для Грамотности и Волшебства 4:1. В реальности 2:1

Для Scholar действительно Value = [the_strongest_spell_efficiency_delta(1, 1, 0, 0, 0, 0, 0) * Spell_Power * 1/10]. Спасибо. Кам там 1/5 оказалась, непонятно :smile5: Скорее всего, копипаст.

Цитата:
2AlexSpl Я так понял, что функция для расчета эффективности бафов-дебафов на самом деле не учитывает способности существ. Например, оцениваем эффективность для Air Shield, добавляем в армию рукопашников, и имеем соответствующее увеличение значения функции. То же, например, со Слепотой. Добавляем драконов, и...

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

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

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

Сообщение Ben80 » 04 май 2020, 07:24

AlexSpl писал(а):

Особенно весело с дебафами, когда дебаф проверяется на своих же юнитах.


Ну, в этом я ничего страшного не вижу - в целом эти функции работают типа как "вероятностные". Типа если у тебя много таких существ, то и у твоих противников тоже ))
Вернуться к началу

Пред.След.

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

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

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