06.07.2017, 17:49
(06.07.2017 10:08)Algor Wrote: [ -> ]как будет действовать ИИ в ситуации, когда перед его воротами герой без войск, но с наложенной "маскировкой".
На маскировку ИИ не повелся...

(06.07.2017 10:08)Algor Wrote: [ -> ]как будет действовать ИИ в ситуации, когда перед его воротами герой без войск, но с наложенной "маскировкой".
proc Учёт_командира_ИИ
mov [Temp], 4; AI value
jmp Учёт_командира_ИИ3
endp
proc Учёт_командира_ИИ2
sub edx, 1Ch
mov [Temp], 0; Fight Value
endp
proc Учёт_командира_ИИ3; можно использовать EBX, EDI, ESI без сохранения
xchg eax, ebx; передать значение в долгосрочный регистр
lea esi, [edx-_Hero_.Количество_существ_в_слоте_0]; смещаем до начала структуры героя
GetHeroStruc HERO_Макс
lea ecx, [eax+156*sizeof._Hero_]
.if signed esi >= eax & signed esi < ecx; структура слотов для вычисления лежит в пределах структуры героя
stdcall Вычисление_AI_value_командира, esi
add ebx, eax
.endif
xchg eax, ebx; возвратить в eax
ret
endp
proc Вычисление_AI_value_командира
push ebx
mov ecx, [esp+8]
xor ebx, ebx; обнуляем для инициализации
.if Option_Commanders; опция "Командиры" включена
imul eax, [ecx+_Hero_.Номер], Размер_структуры_командира
add eax, Адрес_структуры_командиров
.if [eax+_Commander_.Доступность] & ~[eax+_Commander_.Жив_или_мёртв]; командир доступен и жив
mov ecx, [eax+_Commander_.Тип]
add ecx, CR_Паладин_Атакующий; получить тип монстра
imul ecx, sizeof._Creature_
add ecx, [Temp]; Fight Value или AI value
mov ecx, [ecx+Адрес_структуры_монстров+_Creature_.Fight_Value]; получить базовое значение из структуры монстра
mov eax, [eax+_Commander_.Текущий_уровень]; начинается с нуля
mov eax, [eax*4+Треугольные_числа]; получить условный множитель, зависящий от уровня командира
imul eax, ecx; умножить на базовое значение
add ebx, eax; добавить к общему показателю
.endif
.endif
xchg eax, ebx; вернуть результат функции
pop ebx
ret 4
endp
Треугольные_числа: dd 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 1326, 1378, 1431,1485,1540,1596,1653,1711,1770,1830,1891,1953,2016,2080,2145,2211,2278,2346,2415,2485,2556,2628,2701,2775,2850,2926,3003,3081,3160,3240,3321,3403,3486,3570,3655,3741,3828,3916,4005,4095
(09.07.2017 13:12)gamecreator Wrote: [ -> ]Elzivir, ну попробуй:
Отсутствие опечаток или ошибок не гарантирую.
(30.05.2017 13:39)Algor Wrote: [ -> ](30.05.2017 13:27)Heromant Wrote: [ -> ]Реализовывать алгоритм поиска оптимального пути на ERM с нуля достаточно сложно...Но данный алгоритм уже реализован в базовом ИИ игре, но как извлечь его, отделив от перемещения - я не знаю, да и вряд ли кто-то здесь мне поможет это сделать.Вообще, надо просто найти существующую функцию и использовать ее. Это к "реверсерам". По-поводу "вряд ли кто-то здесь мне поможет" - а ты просил?
Quote: Повторюсь: проблема не в том, как технически устроить втречу/передвижение, а в том, чтобы определить когда это действительно нужно.
(05.10.2018 14:55)Algor Wrote: [ -> ]Технически это не сложно. Можно в начале каждого хода ИИ игрока проходиться по его героям, далее по имеющимся артефактам и принудительно надевать арты с максимальной ценностью.
Но тогда нужно также заморочиться и с модификаторами ценности в зависимости от текущего состояния героев. Чтобы при отсутствии некромантии/стрельбы "обнулялись" ценности соотв. артов, при значительном кол-ве низкоуровневых существ повышалась ценность артов на +1 к здоровью, при отсутствии книги обесценивались арты на силу/знание, при выученном заклинании и выключенной опции "живые свитки" соотв. свитки не надевались бы в "разное" и т.д. Вот этих нюансов достаточно много.