Объявления

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

Улучшение ИИ

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

Улучшение ИИ

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

Сделал шаблон, в котором ИИ отводится несколько большая роль чем обычно.
Хотелось бы чтобы он мог уметь следующее:
1. Приоритет прокачки ИИ героя всегда следующий - земля (1,2,3), воздух (1,2,3), атака (1,2,3), защита (1,2,3), оригинальный алгоритм
2. ИИ всегда стремиться иметь заданное число героев.
3. Приоритет захвата объектов - города, внешние жилища, артефакты, пандоры, ульи, консерватории, утопии.
т.е. каждый ход ИИ смотрит в указанной порядке, может ли он взять этот объект.
4. У массового замедления и ускорения, наивысший приоритет после ударной магии.
5. ИИ расставляет самые медленные отряды рядом со стрелками.
6. В бою, всеми отрядами ждет, за исключением отрядов, которые могут закрыть стрелковый стек.
7. Если расчетно ИИ не умирает за 1 ход, то колдует заклинание в свой самый последний ход.

Есть ли похожие наработки?
Вернуться к началу

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

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

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

as239 писал(а):

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


AlexSpl писал пост на HeroesCommunity, который был переведен в Физмиговскую статью - по поводу выбора втор. навыков ИИ. Данная функция не поддается декомпиляции и за разбор функции снимаю перед Александром шляпу. Правда, при проверке у меня не все срослось - Стрельба, а также Мудрость, Грамотность и прочее, что связано со "SpellDeltaEfficiency". Распечатывал веса и не все по формуле пошло. А со Стрельбой вообще порядка на 2 расхождение (то есть раз в 100).

Пример хайхука, (едва ли не мой первый хайхук !) который позволяет умножать веса, расчитанные ИИ, на свой коэффициент:

Код: Выделить всё
int __stdcall HiHook_AI_ChooseSecSkill(HiHook* h, _Hero_* hero, int secSkill, int unknown)
{
   double k = 1.0;

   if(secSkill == HSS_DIPLOMACY)
      k = 10.0;

   int weight = k * CALL_3(int, __fastcall, h->GetDefaultFunc(), hero, secSkill, unknown);

   return weight;
}
...
_PI->WriteHiHook(0x524B70, SPLICE_, EXTENDED_, FASTCALL_, HiHook_AI_ChooseSecSkill);


as239 писал(а):

3. Приоритет захвата объектов - города, внешние жилища, артефакты, пандоры, ульи, консерватории, утопии.
т.е. каждый ход ИИ смотрит в указанной порядке, может ли он взять этот объект.


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

as239 писал(а):

4. У массового замедления и ускорения, наивысший приоритет после ударной магии.


Они и так обычно очень нехилый вес получают. Проблема только в том, чтобы они были.

as239 писал(а):

5. ИИ расставляет самые медленные отряды рядом со стрелками.


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

as239 писал(а):

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


Полировал с полгода назад вейт ИИ недели 2-3, но в итоге убрал под сукно. Все получилось, но не было уверенности, что это ему всегда на пользу пойдет.

as239 писал(а):

7. Если расчетно ИИ не умирает за 1 ход, то колдует заклинание в свой самый последний ход.


Он итак это делает. Его проблема в том, что он не учитывает вейт игрока (то есть по сути двойной ход некоторыми стеками), а при осаде в этом плане не учитывает стрелковые башни.
Вернуться к началу

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

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

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

Большое спасибо!
1. А по используемому количеству героев нет информации?
2. Есть разделении героев у ИИ на главного и собирателей?
3. Можно ли как-то заставлять ИИ проводить большинство боев героем, который получил землю?
4. Насчет приоритета объектов, что-то там не очень оптимально, например, ИИ даже на 3-й недели не берет улики, консы.
По хорошему, нужно чтобы было два отдельных алгоритм первый на пробитие их охраны, а второй уже на анализ содержимого.
Если сделать по моему предложению, то с каждым ходом, мощь ИИ армии будет расти т.е. наивысшим приоритетом должны быть нычки без охраны и повышалки, берем нычку идем по приоритетам, если можно что-то взять еще забираем, если нет идем берем следующую нычку без охраны и т.д.
Сейчас ИИ очень часто отвлекается на свитки, ресурсы, шахты.

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

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

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

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

Ну, сотрудничество - это, думаю, как раз то, чего не хватает моддерам, базирующимся на SoD, а не на WoG. Если заглянуть на форум ВоГ, то любо-дорого посмотреть, как ребята общаются и помогают друг другу. Но, во-первых, они там в основном давно знакомы друг с другом. Во-вторых, у них философия открытости, открытого исходного кода. И это понятно - если тебе когда-то помогли, дали знания, то помогай и ты другим.

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

Конкретно по вопросам. Лимиты на героев для различных уровней сложности жестко прописаны в экзешнике. Например, общий лимит на кол-во всех героев на карте (суммарно для всех игроков) - 0x66052C, 0x660530, 0x660534, 0x660538,0x66053C. Я у себя поставил здесь 100 - то есть по сути анлим. Также при желании можно найти и другие лимиты на героев, значимые для ИИ. (сам не искал)

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

На п.3 не знаю как ответить.

Насчет приоритета объектов - согласен, что "что-то там не оптимально". Я то лично не вижу Герои 3 как игру через консы/ульи, в моем ГСК частота этих объектов серьезно понижена. Но если иметь дело с оригинальным ГСК, то, наверно, по идее можно дать этим объектам завышенный вес, зная (в отличие от ИИ), что улики будут встречаться и дальше и таким макаром можно насобирать хорошую армию.
Но - да, сами охраняемые объекты ИИ "не видит", пока не будет уничтожен монстр на карте рядом с объектом.
У меня в проекте следующее - подкорректировать MovementManager, чтобы ИИ "видел" объекты за монстрами и шел к ним, а не к монстрам, попутно анализируя, сможет ли он пробить монстров, встретившихся по пути.

P.S. Покупка ИИ героя происходит в sub_00431BD0 и в функции, которая ее вызывает (sub_00431800).
Последний раз редактировалось Ben80 03 май 2020, 11:22, всего редактировалось 1 раз.
Вернуться к началу

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

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

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

Немного отклоняясь от темы: недавно реализовывал Орлоглаз с передачей спеллов непосредственно во время битвы. При получении заклинания в лог битвы передается сообщение. Плюс в том, что сообщение берется из стандартного текстовика Героев, а значит не зависит от локализации.

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

Код: Выделить всё
bool eagleEyeMessage = false;
char Text[200];
...
int __stdcall addEagleEyeMessage(LoHook* h, HookContext* c)
{
   if(eagleEyeMessage)
      CALL_4(void, __thiscall, 0x4729D0, *(void**)((int)o_BattleMgr + 0x132FC), Text, 1, 0);

   eagleEyeMessage = false;

   return EXEC_DEFAULT;
}

int __stdcall getSpellEagleEye(LoHook* h, HookContext* c)
{
   
   _Hero_* hero = o_BattleMgr->hero[c->edi];

   if(hero->spell[*(int*)(c->ebp + 8)] == 0)
   {
      hero->spell[*(int*)(c->ebp + 8)] = 1;
      hero->spell_level[*(int*)(c->ebp + 8)] = 1;

      sprintf(Text, *(const char **)(*(int*)(*(int*)(0x6A5DC4) + 32) + 888),
         hero->name, o_Spell[*(int*)(c->ebp + 8)].name);
      eagleEyeMessage = true;

   }

   c->return_address = 0x5A02D9;

   return NO_EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x5A02C6, getSpellEagleEye);
_PI->WriteLoHook(0x5A247B, addEagleEyeMessage);
Вернуться к началу

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

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

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

Цитата:
Ну, сотрудничество - это, думаю, как раз то, чего не хватает моддерам, базирующимся на SoD, а не на WoG. Если заглянуть на форум ВоГ, то любо-дорого посмотреть, как ребята общаются и помогают друг другу. Но, во-первых, они там в основном давно знакомы друг с другом. Во-вторых, у них философия открытости, открытого исходного кода. И это понятно - если тебе когда-то помогли, дали знания, то помогай и ты другим.

Полностью согласен. Кстати на этом форуме, с открытостью и взаимопомощью тоже все в порядке.
Вообще, в мире модинга homm3, единственный островок закрытости, надменности и недружелюбности - это хотовцы.

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

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

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

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

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

У нас абсолютно разная и не пересекающаяся целевая аудитория.
При обмене информации по ИИ, аудитория использования вашего творчества может только увеличиться.
А разве не эта наша главная цель?
Можно что-то дать и приватно, я обязуюсь это не разглашать.
Ну и естественно, я всегда указываю авторство и помощь.
Мне не нужно прям все, но какие-то основные моменты, которые могли бы улучшить играбельность этого шаблона:
 
Изображение

Сам шаблон в архиве во вложении.
Также отмечу, что возможные улучшения ИИ будут использоваться только для этого шаблона.
Вложения
2h6c.zip
(923 байт) Скачиваний: 408
Вернуться к началу

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

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

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

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

Спасибо! У меня такая же механика, но сообщение вроде не фиксируется.
Вернуться к началу

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

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

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

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

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

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

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

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

as239 писал(а):

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

Спасибо! У меня такая же механика, но сообщение вроде не фиксируется.


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

На своих наработках я, естественно, не собираюсь спать, как на подушке. И в конечном счете как любой художник (хе-хе, мда) не хотел бы, чтобы они канули в Лету, а наоборот. И мне приятно, что темой ИИ хотя бы кто-то интересуется.
В подходящее время я поделюсь кодом по ИИ. Однако сейчас я бы и тебе не советовал (хотя, возможно, я не прав) делать какой-то релиз в этом направлении. Слишком слабы сейчас наработки по ИИ. Боюсь, они вызовут только отторжение.
Советовал бы тебе пока не распылять силы по разным направлениям. Ты же, например, занимался ГСК, понятно, что это требует много времени.
Вернуться к началу

След.

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

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

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