Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: Интересные фактыА я не говорил, что он не кастует Haste (Haste в исполнении ИИ сам наблюдал изредка). Не кастует он Slow. И есть общая ошибка в расчете целевого Х как для Slow, так и для Haste.
|
Re: Интересные фактыПроверил. Slow тоже кастует.
Нужно уточнить, в каких именно случаях комп не кастовал Slow и Haste, т.е. в чём именно ошибка. |
Re: Интересные фактыAlexSpl писал(а): Нужно уточнить, в каких именно случаях комп не кастовал Slow и Haste, т.е. в чём именно ошибка. Ну, не знаю, как вы проверяли - когда у компа в книге кроме Slow ничего нету ? На практике я ни разу не видел Slow в исполнении ИИ. В чем именно ошибка, я уже написал - забыли поставить минус. Если хотите, можете эту инфу игнорировать (скажем, если она субъективно вам чем-то не нравится), соответствие истине она от этого не потеряет.
|
Re: Интересные фактыЦитата: Проверял с тремя заклинаниями: Magic Arrow, Slow, Haste. За бой комп скастовал все три. Цитата: Мне больше интересно, в каких случаях комп не кастует. Код я гляну позже. |
Re: Интересные фактыТак, получается, что и для взвешивания снятия Haste при кастовании Slow он тоже знак неправильно ставит. То есть требуется еще один хук.
По идее можно обойтись без хуков, и hex кодингом заменить fsubrp на fsubp по адресу 0x466525 (ENG 2.1). Как-то так. Получается
*** Хотя нет, не получится обойтись hex кодингом, к сожалению. |
Re: Интересные фактыAlexSpl писал(а): ИИ не обязан кастовать все, что у него есть (по очереди, в случайном порядке, или как-то еще), он кастует то, что получает максимальную оценочную функцию. Поэтому если в каком-то бою из имеющихся нескольких заклинаний было скастовано только одно (несколько раз), это необязательно говорит о каких-то имеющихся багах/ошибках. Конкретно по Slow подозрение о наличии бага возникло по той причине, что я вообще ни разу ни видел каст этого заклинания (по итогам прохождения десятков сценариев). Но если некастование Slow можно как-то объяснить тем, что он как-то считается заниженно (если так, то это нельзя было бы отнести к багам), то некастование Mass Slow вызвало уже серьезные подозрения, поскольку понятно, что заклинание мощное. |
Re: Интересные факты
*) Обычно так не пишут (например, -x - y и т.п.). -x - y = -(x + y). Это ближе, но выше аналогичный код для Haste, где знак Вы не меняете. Я не смотрел в дебаггере, какие значения выдаёт функция sub_4D6EF0() для Slow/Mass Slow, но можете объяснить, как Вы пришли к тому, чтобы изменить знак на противоположный? |
Re: Интересные фактыAlexSpl писал(а): Объяснить очень просто: 1) по итогам просмотра кода combatManager::RawEffectSpellInfluence - ветка для slow и haste. Из кода очевидно, что оценочная функция пропорциональна разнице между кол-вом необходимых ходов отряда до края поля до каста и кол-вом необходимых ходов отряда до края поля после каста. Поэтому оценочная функция всегда возвращает отрицательное значение для оценки Slow и положительное - для Haste. p.s. В combatManager::RawEffectSpellInfluence всегда отрицательное значение возвращается только для Slow и Curse. 2) Я меняю знак уже после вызова combatManager::RawEffectSpellInfluence в теле combatManager::DetermineEffectOfSpell. Если посмотреть код в combatManager::DetermineEffectOfSpell, там ниже ветки для Slow есть ветка для Curse. И вот там не забыли поставить минус по итогам вызова combatManager::RawEffectSpellInfluence. На это я обратил внимание. p.s. Для Curse минус поставить не забыли, зато забыли изменить минус на плюс для учета снятия заклинания Bless. *** Небольшая проблема оригинального кода в том, что не унифицировали плюсы-минусы в combatManager::RawEffectSpellInfluence - лучше бы для всех заклинаний возвращался всегда плюс. Это уменьшило бы вероятность ошибок при расставлении плюсов и минусов к возвращаемому значению combatManager::RawEffectSpellInfluence. Баг для 2.0 Eng и 2.1 Rus с DispelMagic в combatManager::EffectSpellCure как раз обусловлен этой путаницей. Последний раз редактировалось Ben80 10 ноя 2020, 12:57, всего редактировалось 1 раз.
|
Re: Интересные фактыА вот, кстати, фикс для масс-спеллов - они иногда не срабатывали для всех отрядов, если присутствовал хотя бы один отряд, имунный к заклинанию.
|
Re: Интересные фактыПолучается, все эти годы мы играли в неправильных Героев 2 Но появись эти фиксы раньше, Портал бы всё равно не играл на исправленной версии: для игроков не в теме версия "из коробки" - незыблемый эталон, и не важно, что программист просто забыл поставить знак минус, и то, что игра с этим минусом становится такой, какой её хотели видеть, а бонусом идёт ещё и улучшение качества боевого ИИ.
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1