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


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

Улучшение ИИ

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

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

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

Есть ли какие-то очевидные нелепости в использовании ИИ заклинаний в бою, которые легко правятся изменением ai_value?
Насколько я помню, ИИ очень любит использовать всякие защиты от огня и т.д., которые в 90% боев не имеют никакого смысла.
Последний раз редактировалось as239 10 май 2020, 16:15, всего редактировалось 1 раз.
Вернуться к началу

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

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

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

Анатолий, AI_Value не имеют никакого отношения к использованию ИИ спеллов в настоящей битве.

Но то, о чем ты говоришь, сделать очень просто:

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

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

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

Цитата:
Готовой функции нет, при выводе вот так считается

Текущая мана хранится в структуре героя (+0x18). Максимальный запас - [GetIntelligencePower_4E4B20(hero) * max(1, min(Knowledge, 99)) * 10]. Ежедневное восполнение - GetDailyManaRestorePoints_4E41B0. Это для справки :smile1:

Цитата:
AI_Value не имеют никакого отношения к использованию ИИ спеллов в настоящей битве.

А как комп решает, какое кастовать?
Вернуться к началу

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

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

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

Через специальную процедуру "взвешивания" заклинаний в бою

//----- (0043B2E0) --------------------------------------------------------
void *__stdcall combatMan_GetSpellWeightAIProc(int a1)

Как уже ранее говорил в нашей дискуссии, итоговый вес, по-видимому, представляет собой математическое ожидание ущерба/выгоды, выраженной в единицах AI_Value юнитов на поле боя.
Вернуться к началу

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

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

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

Александр, а вы могли бы реализовать Берсерк для ИИ (самое главное - написать оценку-взвешивание) ? :smile1:
Там пришлось бы задействовать такую интересную вещь как MovementManager. В итоге получилось бы очень познавательно.
Вернуться к началу

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 » 10 май 2020, 14:00

Теоретически каст Берсерка ничем от каста, например, того же Проклятия не отличается (хотя продвинутая и экспертная версии, скорее, Fireball и Inferno соответственно). Просто скопировать код и заменить эффекты (igrik даже делал AoE Slow). С оценкой сложнее :smile1: А Вы смотрели, как HotA оценивает Берсерк?
Вернуться к началу

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

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

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

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

Мне кажется, в случае с Берсерком идти по простому пути было бы неинтересно :)
Ведь тут в чем особенность - нужно для каждого вражеского юнита определять, "кого он пойдет бить" :smile1:
то есть ближайшего юнита. Это нужно, чтобы определить, на кого выгоднее всего делать каст. А на продвинутом и экспертном уровне все еще интереснее - поскольку мы имеем подвижную область, в которую хотим "уловить" самых "выгодных" вражеских юнитов.

Когда я писал Battle_AI, то смог определить из какой процедуры выходят результаты работы MovementManager. При этом я не видел еще инфы по MovementManager в H3API, и не знал о существовании H3Era.dbgmap. То есть сейчас-то инфы в помощь довольно много.
Вернуться к началу

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

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

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

AlexSpl писал(а):

Просто скопировать код и заменить эффекты (igrik даже делал AoE Slow).


Да, работа Игрика на самом деле очень интересная. Я пока не изучал его код всерьез.
Вернуться к началу

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

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

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

Так ИИ может хоть как-то использовать Берсерк?
Вернуться к началу

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

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

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

В оригинальной игре - никак. Глянул быстренько код игры - в общем весь расчет возможности одного отряда ударить другой происходит здесь: CombatMan_00422CA0 + sub_00448560
В CombatMan_00422CA0 есть цикл по стекам противника
Код: Выделить всё
       for ( i = &v7->Monsters[21 * v28]; v26 < *(&v7->HeroAMonCount + v28); ++v26 )
        {


Для реализации ИИ Берсерка можно попытаться сделать финт ушами :smile1: и пройтись этим циклом за противника по своим же стекам, а не по стекам противника (по нашим). Тогда набор битов возможности ударить по своим же стекам будет в поле 0x544 каждого _BattleStack_
Только надо после взвешивания Берсерка не забыть проделать ту же процедуру по заполнению 0x544 и других полей, только уже нормальным образом (против противника).
Вернуться к началу

Пред.След.

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

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

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

cron