Current time: 25.11.2024, 07:25 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Плагины. Обсуждение
» Plugins. Discussion & Questions
Author Message
FallenAngel Online

Posts: 844
Post: #661

igrik, а заплатка no_underground_at_underground.bin? Или в вог/куда-то еще пойдет?
(This post was last modified: 09.03.2024 21:10 by FallenAngel.)
09.03.2024 20:48
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #662

(09.03.2024 20:48)FallenAngel Wrote:  igrik, а заплатка no_underground_at_underground.bin? Или в вог пойдет?
Она добавлена.
Code:
[+] Битвы в шахтах в подземелье проверяют тип почвы. Ранее было всегда = подземелье


game bug fixes extended.dll || My Plugins || My GitHub
09.03.2024 21:10
Visit this user's website Find all posts by this user Quote this message in a reply
FallenAngel Online

Posts: 844
Post: #663

igrik, не заметил, спасибо!
09.03.2024 22:09
Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1175
Post: #664

igrik, thanks for your work!

Might be a problem or might not, but I noticed an unexpected change of game_bug_fixes.
Hero info panel is not shown immediately until the msg box on day 1 from the map is closed

If you start Arrogance the first map of SoD

With game bug fixes:
Hero info panel is empty
Without game bug fixes:
Hero info panel is ready immediately
It is completely fine either way. I just mention it here in case it is a sign of something else's wrong.


Latest ERA mods and scripts in development - My GitHub
10.03.2024 01:46
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #665

Fixed!

Update the info panel has been corrected. It is updated only when the adventure map is active.
I did it on purpose. I've always been infuriated by updates inside the city or the hero's screen, or battles, etc. (watch the screenshot)



game bug fixes extended.dll || My Plugins || My GitHub
10.03.2024 04:42
Visit this user's website Find all posts by this user Quote this message in a reply
major Offline

Posts: 146
Post: #666

Для добавления в game bug fixes extended.

Есть визуальный баг, или скорее недочёт, связанный со штрафом препятствий.
Если двухгексовое существо стоит справа за стенами при осаде, то при некотором расположении стрелков слева от стен, стрельба по переднему гексу может быть со сломанной стрелой, а по заднему - с прямой, или наоборот. Причем урон в обоих случаях одинаковый. Связано с тем, что при определении штрафа здесь 0x43B713 и здесь 0x443999 в функцию передается гекс, на котором стоит существо (для 2-гексового - задняя часть), и урон рассчитывается по нему. А вот отображение прямой и сломанной стрелы здесь 0x476106 как раз зависит именно от гекса, на который наведён курсор.

Визуализация бага

На мой взгляд достаточно сделать одинаковым отображение прямой/сломанной стрелы для обоих гексов, нежели пересчитывать урон.
В ХотЕ, кстати, баг тоже присутствует.
16.03.2024 03:20
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #667

igrik, зачем нужна данная строчка из TownHeroesMeet.cpp из wog_native_dialogs.era?

Code:
if ( *(int*)((int)o_ExecMgr +4) != (int)o_WndMgr )

Т.к. адреса менеджера o_ExecMgr в базе нет, поэтому я понять не могу что это, а узнать всё же желательно, т.к. пришлось перенести весь твой код из TownHeroesMeet.cpp в Тифон для того, чтобы открывать диалог встречи героев по хотовской кнопке в городе.
(This post was last modified: 12.04.2024 14:33 by XEPOMAHT.)
12.04.2024 14:32
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #668

Потому что в 90% случаев возникал баг с зависанием игры.
Баг заключался вот в чём:
1) Стартуем игру (новый запуск из винды, это важно! НЕ простая перезагрузка карты, а прям перезагрузка игры)
2) Заходим в город и вызываем диалог обмена героев. Важно НЕ проводить встречу вне города, до этого момента
3) После закрытия диалога встречи игра закрывает и диалог города тоже, и появляется визуальный баг (позже скину скрин)

Т.е. игра показывает основную карту, но без героев и городов. на мышь реакции нет, реакция есть на F4, F5 и всё

Этот код решал эту проблему в 99% случаев путём правильной перетасовки менеджеров
Code:
if ( *(int*)((int)o_ExecMgr +4) != (int)o_WndMgr )

Вот небольшое объяснение причины бага: т.е. на момент вызова диалога обмена в городе описание плохого и хорошего расположнения менеджеров в структуре o_ExecMgr
Image: JB0t2JA.png

Замечание: в коде Хоты и в Моп я подобного кода (да и вообще упоминания такой проблемы) не видел. Не понимаю, если честно - почему у меня такая проблема нарисовывалась и почему в других версиях этого не было.


game bug fixes extended.dll || My Plugins || My GitHub
13.04.2024 00:17
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #669

(13.04.2024 00:17)igrik Wrote:  Потому что в 90% случаев возникал баг с зависанием игры.

Ну я давно в курсе (именно по-этому данная кнопка в старых версиях ERA+ ничего не делает). Как я понял из кода игры, программисты из NWC схитрили и чтобы окно города всегда было открыто, то нужно, чтобы из под дочернего окна была видна хоть какая-нибудь часть диалога города, например полоска ресурсов (очередные содовские костыли). Если не видно ничего, то движок игры думает, что окно перекрыто и принудительно не показывает его. Но после закрытия дочернего возврата к показу родительского уже нет и у меня не получилось найти решение как заставить игру думать, что после уничтожения менеджера встречи героев активным становится менеджер города, а не менеджер карты приключений (т.к. диалог встречи героев отвязывается от менеджера карты приключений только костылями, возможно хотовцы сделали как-то без костылей, но этого мы никогда не узнаем).

(13.04.2024 00:17)igrik Wrote:  Этот код решал эту проблему в 99% случаев путём правильной перетасовки менеджеров
Code:
if ( *(int*)((int)o_ExecMgr +4) != (int)o_WndMgr )

Мне хотелось узнать что контретно делает эта строчка. Т.к. и без неё почему-то работает. Конкретнее - что такое o_ExecMgr, т.к. я не нашёл его в вого-базе IDA.

(13.04.2024 00:17)igrik Wrote:  в коде Хоты и в Моп я подобного кода (да и вообще упоминания такой проблемы) не видел. Не понимаю, если честно - почему у меня такая проблема нарисовывалась и почему в других версиях этого не было.

В MoP в городе диалог встречи героев не используется, насколько помню. Да и сам вызов Мастер модифицировал, добавив туда воговский триггер например.

А исходные коды HoA с этой кнопкой есть только у HotA Crew, т.к. по рукам бродят только коды от старых версий, где этой копки ещё нет.
13.04.2024 01:28
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #670

(13.04.2024 01:28)XEPOMAHT Wrote:  Мне хотелось узнать что контретно делает эта строчка. Т.к. и без неё почему-то работает. Конкретнее - что такое o_ExecMgr, т.к. я не нашёл его в вого-базе IDA.
Эта строчка проверяет, является ли o_WndMgr текущим менеджером (т.е. на верху дерева иерархии) или нет.
ExecMgr = это класс загрузки и управления базовыми менеджерами игры. Например он же загружает битву каждый раз, и каждый раз её выгружает. Так же и с диалогом города.
Буду дома - скину его структуру (то что я когда-то ещё разобрал)

(13.04.2024 01:28)XEPOMAHT Wrote:  В MoP в городе диалог встречи героев не используется, насколько помню. Да и сам вызов Мастер модифицировал, добавив туда воговский триггер например.
Как это? Нажми кнопку "Home" в городе с двумя героями. Я про MoP 3.07 и позднее

(13.04.2024 01:28)XEPOMAHT Wrote:  А исходные коды HoA с этой кнопкой есть только у HotA Crew, т.к. по рукам бродят только коды от старых версий, где этой копки ещё нет.
Ну так я тоже за счёт реверса смотрел. Но я не увидел у них там этих танцев с бубном.


game bug fixes extended.dll || My Plugins || My GitHub
13.04.2024 02:15
Visit this user's website Find all posts by this user Quote this message in a reply
MOP Offline
Moderators

Posts: 1468
Post: #671

(13.04.2024 00:17)igrik Wrote:  Замечание: в коде Хоты и в Моп я подобного кода (да и вообще упоминания такой проблемы) не видел. Не понимаю, если честно - почему у меня такая проблема нарисовывалась и почему в других версиях этого не было.
Была она, была. Именно поэтому при входе в экран города функция обновления экрана карты приключений самым грязным способом глушится намертво, а при выхода из экрана города - восстанавливается.


Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
13.04.2024 07:49
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #672

А я себе голову ломал "почему всё норм", когда смотрел код MoP. Теперь понятно. Спасибо за инфу Ab

Code:
struct _ExecMgr_; // Размер: 16
#define o_ExecMgr (*(_ExecMgr_**)0x699550)

// Менеджер работы с другими менеджерами (размер - 16)
NOALIGN struct _ExecMgr_ : _Struct_
{
  _Manager_* previous;
  _Manager_* next;
  _Manager_* current;
  _Manager_* field_C;

  _Manager_* RunManager() { return CALL_1(_Manager_*, __thiscall, 0x4B0BA0, this); }
  _byte_ CallManager(_Manager_* mgr)  { return CALL_2(_byte_, __thiscall, 0x4B09D0, this, mgr); }
  _int32_ PushManager(_Manager_* mgr) { return CALL_2(_int32_, __thiscall, 0x4B0770, this, mgr); }
  _int32_ AddManager(_Manager_* mgr)  { return CALL_3(_int32_, __thiscall, 0x4B0880, this, mgr, -1); }
  void RemoveManager(_Manager_* mgr)  { return CALL_2(void, __thiscall, 0x4B0950, this, mgr); }
};


// * размер 0x38h (56 байт) // первые 56 байт всех менеджеров в игре.
NOALIGN struct _Manager_ : _Struct_
{
  struct {
    _dword_ managerConstructor; // 0x44D200
    _dword_ managerDestructor;
    _dword_ managerUpdate;
  } *h3ManagerVTable;

  _Manager_* previus;   // parent
  _Manager_* next;      // child
  _int32_ id;
  _int32_ priority;
  char name[28];    // 0x14
  _int32_ nameEnd;  // 0x30
  _int32_ isActive; // 0x34

  void SetPreviousManager(_Struct_ *prevMgr) { previus = (_Manager_*)prevMgr; }
  void SetNextManager(_Struct_ *nextMgr) { next = (_Manager_*)nextMgr; }
  _Manager_* ActivateManager() { return CALL_1(_Manager_*, __thiscall, 0x4B0BA0, this); }

  void SetManagers(void *mgr1, void *mgr2)
  {
    previus = (_Manager_ *)mgr1;
    next = (_Manager_ *)mgr2;
  }
};

Code:
// это
if ( *(int*)((int)o_ExecMgr +4) != (int)o_WndMgr )
// то же самое, что и это
if ( o_ExecMgr->next != (_Manager_*)o_WndMgr )


game bug fixes extended.dll || My Plugins || My GitHub
13.04.2024 11:05
Visit this user's website Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2356
Post: #673

(13.04.2024 07:49)MOP Wrote:  Именно поэтому при входе в экран города функция обновления экрана карты приключений самым грязным способом глушится намертво, а при выхода из экрана города - восстанавливается.

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

(13.04.2024 11:05)igrik Wrote:  
Code:
// это
if ( *(int*)((int)o_ExecMgr +4) != (int)o_WndMgr )
// то же самое, что и это
if ( o_ExecMgr->next != (_Manager_*)o_WndMgr )

Добавил эту штуку в Тифон и... феаноровский плагин Emerald при повторном открытии диалога встречи героев начал выдавать утечки памяти, приводящие к вылетам на ровном месте, хотя тот же самый код Игрика Emerald почему-то не роняет, т.е. под Emerald патч в Тифоне на ротацию менеджеров придётся выполнять всегда, т.к. в самой игре патч вроде ничего не ломает. То ли плагин Emerald настолько кривой (который я когда-нибудь точно заменю собственым плагином на новые артефакты), то ли я что-то неправильно переписал с исходников (СИ тяжело читать).
13.04.2024 12:23
Find all posts by this user Quote this message in a reply
igrik Offline

Posts: 2819
Post: #674

(13.04.2024 12:23)XEPOMAHT Wrote:  ... то ли я что-то неправильно переписал с исходников (СИ тяжело читать).
Так декомпилируй WND и напиши по декомпилированому.
А вообще, если хардкодно блочишь обновление экрана карты приключений, то зачем эти танцы с бубуном

Декомпилят! Так тебе понятнее? Spiteful (Click to View)


game bug fixes extended.dll || My Plugins || My GitHub
13.04.2024 23:54
Visit this user's website Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1175
Post: #675

XEPOMAHT, it looks like Prima didn't patch Mana Vortex. When a hero has Knowledge at above 127, Mana Vortex won't be activated.

Map for testing

Suggesting address to patch: 0x5BDD24


Latest ERA mods and scripts in development - My GitHub
(This post was last modified: 22.05.2024 01:54 by Archer30.)
22.05.2024 01:10
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