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