Current time: 23.11.2024, 04:14 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Ошибки, баги и недочёты WoG 3.58f
» Собираем в эту тему всевозможные ошибки игры
Author Message
Raistlin Away
Moderators

Posts: 1349
Post: #661

На мой взгляд, исправить стоит, но не хуком, а бинарником - можно просто скопировать байт-код, поменяв его части местами. Так, при желании, любой сможет это отключить, а также не будет потенциальных конфликтов с другими модами, которые захотят повлиять на вероятности старости.


Создал новый глобальный мод: WoG Ultra Edition
21.08.2021 23:22
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1349
Post: #662

Я дурак, забыл скинуть адрес функции 148 75DE21


Создал новый глобальный мод: WoG Ultra Edition
21.08.2021 23:33
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #663

(21.08.2021 23:22)Raistlin Wrote:  На мой взгляд, исправить стоит, но не хуком, а бинарником - можно просто скопировать байт-код, поменяв его части местами.

На мой взгляд, этот корявый хук вообще можно выключить. Т.к. он и установлен неудачно (ставить надо было непосредственно на 440253h), и выполняет мусор. А вообще, данная штука может быть реализована обычным бинарным пачтем, т.к. выше данной функции можно освободить место для кода (9 байт как минимум), задействуя +10 байт кода самой функции, который будет затёрт. Итого, 19 байт, в которые может без проблем уместиться проверка на монстра.

(21.08.2021 23:22)Raistlin Wrote:  Так, при желании, любой сможет это отключить, а также не будет потенциальных конфликтов с другими модами, которые захотят повлиять на вероятности старости.

В Тифоне расширены сами кейсы, поэтому что есть этот воговский хук, что его нет - особой разницы нет. Т.к. % срабатывания старения выставляется непосредственно в редакторе монстров (20, 40 и 100), ну и можно "старить" без проверки на "живность" (например Анубис старит всех без разбору 148 ).
22.08.2021 00:01
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #664

(22.08.2021 00:01)XEPOMAHT Wrote:  (например Анубис старит всех без разбору 148 ).

Пусть только сам будет с иммунитетом к старостиYes


Image: widget.png?style=banner2

Новейший Heroes Launcher
22.08.2021 00:16
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #665

Реализовал, спасибо. Патч в память из кода Эры, но без хуков. Войдёт в следующую версию.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
22.08.2021 00:20
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #666

Найден серьёзный Баг (оригинала), сработает и в WOG/ERA

Как все мы знаем, ограничение числа стеков в бою с каждой стороны - 20 ед.
Призыв элементалей хоть и занимает число стеков, но где-то за 3 ед до лимита эта величина подчищается.

Но с опытом существ/санта гремлинами/прочими скриптами доступно заполнение массива другими существами. + добавим поднятие Пит-лордами.

Проще говоря, на таких значениях можно выйти сверх лимита. И это возможно сделать подняв отряд пит-лордами либо призвав элементалей (для ИИ - нет проверки!!!), так понимаю, воскрешением тоже - 0x005A777B - адрес ошибки (v12->SlotIndex = this; )

Может, через ERM оно решается, но лучше через плагинYes


Image: widget.png?style=banner2

Новейший Heroes Launcher
19.09.2021 15:59
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #667

(19.09.2021 15:59)daemon_n Wrote:  Проще говоря, на таких значениях можно выйти сверх лимита. И это возможно сделать подняв отряд пит-лордами либо призвав элементалей (для ИИ - нет проверки!!!), так понимаю, воскрешением тоже - 0x005A777B - адрес ошибки (v12->SlotIndex = this118

Может, через ERM оно решается, но лучше через плагинYes

Проверки на лимит количества отрядов должны быть в коде, если их там нет (например в ВоГе не всегда, в скриптах - тем более), то нужно добавлять. combatManager врядли кто-то станет патчить для увеличения количества стеков - там куча данных, использующихся в плагинах, в общем совместимость будет практически никакая. В рамках обособленного мода типа HoA или MoP такую штуку можно сделать, но для ERA - абсолютно лишено смысла 105
(This post was last modified: 19.09.2021 19:28 by XEPOMAHT.)
19.09.2021 19:26
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #668

XEPOMAHT, проверка есть только для суммона, и только для человека.


Image: widget.png?style=banner2

Новейший Heroes Launcher
19.09.2021 19:55
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #669

daemon_n, призыв элементалей ИИ не скриптом?


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
19.09.2021 21:33
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #670

Berserker, нет - всё вручную. Я выдал ему в книгу только 1 заклинание.
Уточняю, что краш может быть вызван и человеком, если увеличить число стеков всем, кроме призыва - проверял в SoD также;
А для ИИ вообще нет такой проверки, но для SoD она и не нужна, а вот для ERA - да, так как там на старте боя можно спокойно иметь 15+ стеков.

Если надо, скину сейв и/или видео


Image: widget.png?style=banner2

Новейший Heroes Launcher
20.09.2021 07:41
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #671

Вообще то такая проверка есть (0x479A54)
Но она не работает и выход из функции ни на что не влияет (функции вызывающие эту продолжают выполнять свой код не обращая внимание на "неуспех" текущей. Отсюда и вылеты)
Code:
////// начальная часть кода функции BattleMgr_Add_New_StackBySpell ////

  stackFlags = &bm->stacks[21 * Side].Flags;
  // (132-80)=52 -> creature_id != NONE
  while ( *(stackFlags - 80) != -1 )
  {
    // !count && flag_DIE && flag_SUMMON
    if ( !*(stackFlags - 38) && ((unsigned int)*stackFlags >> 21) & 1 && ((unsigned int)*stackFlags >> 22) & 1 )
    {
      stackID = i;
      bool_isFindNewStackID = TRUE;
      goto ifFindStack;
    }
    // try to find next
    ++i;
    stackFlags += 338;
    // if maximum
    if ( i >= 20 )
      return 0;
  }
  stackID = i;
ifFindStack:

UPD: И что в итоге: например разберём код воскрешения пит-лордов (0x5A776F)

Code:
// (тут, если id нового стека не найдет, в v12 будет возвращён ноль)
v12 = BattleMgr_Add_New_StackBySpell(bm, v11, 48, v10, v5->hex_ix, 0, 1);
// просто перезапись адреса стека (в данном случае нуля)
v13 = v12;
// и тут закономерно получаем вылет при попытке взятия смещения у нуля:
v12->SlotIndex = (int)this;


game bug fixes extended.dll || My Plugins || My GitHub
20.09.2021 09:01
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #672

Понял, будем исправлять.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
20.09.2021 09:39
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #673

Берс исправление я вижу так:
Патчим лоухуком 3 ВЫЗОВА функции BattleMgr_Add_New_StackBySpell (0x479A30)
И если у этой функции результат равен нулю, завершаем вызывающие функции (благо они все типа void, и их завершение не критично для игры. Можно и сообщение добавить о невозможности вызова, призыва или воскрешения)

Кстати, в ВОГе тоже есть всего один вызов такой функции (0x714DA7), который обрабатывает ВСЕ вызовы монстров в ВОГе, и после идёт проверка на ноль, так что ВОГ это сделал безопасно, в отличие от СОДа.


game bug fixes extended.dll || My Plugins || My GitHub
20.09.2021 09:48
Visit this user's website Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4343
Post: #674

igrik, видимо, добавили, когда делали санта-гремлинов)


Image: widget.png?style=banner2

Новейший Heroes Launcher
20.09.2021 10:17
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #675

igrik, так и планировал, спасибо за разъяснения 132


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
20.09.2021 12:58
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group