Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: Как создать плагин для HD модаСейчас на даче и на ноутбук скачал IDA. Проблема в том, что базу не видит(забыл с рабочего ПК перекинуть), поэтому прошу, есть у кого dbfix.plw? Интернет перерыл, не нашел
|
Re: Как создать плагин для HD модаПочти разобрался. Сейчас изучается один закл, который направил враг, как только получает ход один из отрядов нашего героя после каста врага. Но проблема сейчас заключается в том, что изучается только первый направленный закл, остальные почему-то игнорятся... Может кто знает в чем проблема, вот код:
|
Re: Как создать плагин для HD модаRolex писал(а):
Ну тогда вот такое решение: создайте массив. Записывайте в него заклинания(одно заклинание - одна ячейка) и потом считываете каждое заклинание циклом for. |
Re: Как создать плагин для HD модаvoid_17 писал(а): Мы же не знаем заранее сколько раз враг будет кастовать. Плюс мы должны изучать сразу после каждого каста. Да и не нужен нам здесь массив. В этом хуке глобальной переменной каждый раз после каста врага присваевается новое значени айди направленного закла и этот же закл, если его нет в книге нашего героя, изучается.
Я нашел в чем была причина. Достаточно в eagleEyeMain убрать вот это dlgFirst[i] = false; То есть проблема в том, что вот эту проверку не проходит:
И не проходит ее именно из-за dlgFirst[i]. Когда нужно true дает false и изучения не происходит. Но если ее убрать (dlgFirst[i] = false) все как бы изучается как нужно, но начинаються другие проблемы: иногда изучается прямо в бою небоевое нулевое заклинание Вызов корабля (или просто показывается диалог об изучении, но закл в книгу не добавляется), а частенько при попытке пропустить ход идет вылет. Мне не до конца ясно, каково назначение в коде Орлиного глаза от AlexSpl, вот этого хука глобальных флагов eagleEyeSetGlobalFlags. Его надо бы как-то исправить.
Плюс хотелось бы сделать, чтобы с помощью Орлиного глаза можно было изучать и заклы 5-го уровня. В оригинале только до 4-го. Замена этого
на это:
не дала результатов. Даже если убрать эту проверку изучение заклов 5-го уровня не происходит. Видимо нужно ставить еще какой-то доп хук. |
Re: Как создать плагин для HD модаПо многочисленным просьбам радиослушателей
Плагин позволяет герою с навыком Eagle Eye с некоторой вероятностью* выучить заклинание, направляемое противником этого героя (заклинание учится в момент каста). Информация о выученных заклинаниях отображается при получении хода героем. Плагин не позволяет изучать заклинания монстров (нужны дополнительные хуки на каст монстров). Для того, чтобы герой мог учить заклинания 5-го уровня, уберите условие o_Spell[spell].level <= hero->second_skill[HSS_EAGLE_EYE] + 1.
* Чтобы вернуть вероятность, раскомментируйте строки в хуке learnSpell() (комменты нужны для стабильных тестов). |
Re: Как создать плагин для HD модаОгромное спасибо.
AlexSpl писал(а): А это и ненужно. Проверил в оригинале заклинания-абилки существ (вроде, удара молнии Птиц грома) не изучаються. Также было интересно проверить, а изучаються ли заклинания в тех случаях, когда на существе сработал резист. Как бы заклинание было направлено, но мы его не видим, а видим только резист. В итоге получилось, что в оригинале такие заклы все равно изучаються. В этом плагине все аналогично. AlexSpl писал(а): Все хорошо, все изучается. Только вот изучается даже тогда, когда недостаточно Мудрости. То есть если у героя Продвинутая Мудрость он может максимум изучить закл 4-го уровня, а в данном случае текущее развития Мудрости игнорируется и изучаються даже заклы 5-го уровня. Ну это я, вроде, пофиксил, заменив условие на такое:
Во время тестов в сетевой игре столкнулся с интересным багом. Если кастующий герой направил закл и герой, на которого направили этот закл получается его уже изучил (добавилось в его книгу), но сообщение об изучении ему еще не выводилось, так как ходит еще кастующий герой. И вот здесь получается, что если кастующий сразу сдается или убегает, то закл попадает в книгу без сообщения об изучении. И при последующей загрузки того же сейва и новом касте в сообщении выводится уже два закла, тот, который только что кастовался и тот, который с предыдущего боя. И так можно до бесконечности. В сообщении может выводится по несколько заклинаний, причем даже одинаковых: Думаю, может в таких случаях сделать как в оригинале. То есть если кастующий герой направил закл и сразу же сдался, то выводить сообщение с изученным заклом сразу же после боя. Последний раз редактировалось Rolex 29 июл 2021, 16:30, всего редактировалось 2 раз(а).
|
Re: Как создать плагин для HD модаЦитата: Нужно добавить хук showSpells() (ещё один) вместо оригинального кода вывода изученных заклинаний в конце боя, т.е. вместо вот этого:
и хук на начало боя, который бы обнулял n. * * * Попробуйте поставить хук на 0x4AC5EA с одной строчкой: n = 0; А здесь - 0x476996 - хук showSpells() с return_address = 0x476B78; (второй HexPatch нужно, конечно, удалить). Кстати, если кому интересно, запись E9 DD 01 00 00 означает джамп (near) на 0x1DD = +477 байт (вперёд, раз с плюсом) относительно адреса команды, следующей за данной. В плагинах советую использовать _PI->WriteJmp(откуда, куда); вместо этого. |
Re: Как создать плагин для HD модаЧто-то не работает. Либо я что-то не так делаю...
Добавил хук zeroSpell:
Далее добавил еще один хук showSpells и в самом коде хука добавил c->return_address = 0x476B78 и возвращаю NO_EXEC_DEFAULT.
_PI->WriteHexPatch(0x476996, (char*)"E9 DD 01 00 00") - убрал. На старте боя получаю вылет. Если же исходный код хука showSpells не трогать, а создать дополнительный хук showSpellsTwo, например, который будет дублировать первый за исключением c->return_address = 0x476B78 и NO_EXEC_DEFAULT, то вылета нет, но ничего не меняется. Направленый закл сбежавшим героем не изучается после боя, а при повторной загрузке n не обнуляется почему-то, снова выводится несколько заклов. |
Re: Как создать плагин для HD модаПробуйте так:
Если хотите, чтобы уведомление о выученных заклинаниях показывалось поверх диалога с результатами битвы, то перенесите хук на 0x477219, хотя мне кажется, что текущий вариант круче. Осталось только предусмотреть случай, когда герой погибает. Сейчас уведомление показывается победителю, если он выжил (например, после каста Armageddon). |
Re: Как создать плагин для HD модаДа, сообщение сейчас показывается, но с обнулением проблема осталась.
При тестировании в хотсите одним героем кастую закл и сразу же ним убегаю, показывается сообщение с выученным заклом. Загружаю заново этот же сейв, кастую либо тот же, либо другой закл и в этот раз дожидаюсь перехода хода к другому герою и сообщения об изученном закле во время боя. В итоге выводится два закла, тот который который я направлял в предыдущем бою с предыдущей загрузки и этот, который был направлен только что в текущем бою. По факту изучается только тот, который был направлен в текущем бою. Тот закл, который с предыдущего боя, просто отображается в сообщении об изученных заклах. Последний раз редактировалось Rolex 30 июл 2021, 07:08, всего редактировалось 2 раз(а).
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1