Wake of Gods Forum | Форум Во Имя Богов

Full Version: ERA III
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
XEPOMAHT, для универсального подхода мне нужен перехват на любой щелчок с получением верных координат в рамках центрированной зоны 800х600 или всего экрана в случае карты приключений.

V_Maiko, I don't see the task for Era engine. It's fully scripts task, if I understood you correctly. There is ERM function SaveGame, allowing to specify save name/path. There is also CreateDirectory function to create directory.
(18.09.2021 21:55)XEPOMAHT Wrote: [ -> ]Эмм... в экране города просмотр монстров теперь накрывает прирост, что выглядит неккоректно, т.к. эта часть интерфейса закрываться не должна. Ограничители в экране города рекомендуется оставить стандартными, а не 800х600.
Имейте ввиду, что в game bug fixes extended.dll есть код
Code:
// центрирование изображения по ПКМ в городе на иконке найма войск (ранее уходило сильно влево, особенно заметно при игре с HD)
    _PI->WriteHexPatch(0x5D47B3, "0F BF 57 18  8B 4F 24 B8  FF FF FF FF  90");

UPD: ага, увидел, что этот патч больше не действует. Как я понял это в ЭРЕ 3.9.0 сделано? Тогда я в следующем релизе "bug fixes extended" (если он когда то будет) выпилю этот патч.
В дополнение скажу, что в нынешнем показе сообщения по ПКМ я поддержу Берса:
(18.09.2021 22:51)Berserker Wrote: [ -> ]Всё верно. Подсказка открывается не для того, чтобы читать про анубиса выше и затем смотреть на остальных ниже с зажатой ПКМ. ПКМ для концентрации внимании на чём-то под курсором.
... и нынешние координаты показа сообщения именно те, что нужны. Лично я против задирания сообщения выше, как предлагает ХЕРОМАНТ
igrik, да, в Эре 3.9.0. Если знаешь, куда безопаснее всего установить перехват на любой щелчок мыши с тем, чтобы получить вменяемые координаты в диалоге — напиши, пожалуйста. А то в героях такой дикий разброс мест появления этих ПКМ диалогов, что просто диву даёшься.

Патч можно убирать.
Сходу не отвечу. Но боюсь, что такого универсального места попросту нет. Единственное что мне приходит в голову - это конструктор диалога (0x5FEFB0). Тут можно получить и координаты, и размеры будущего диалога, что смещение правильно регулировать. Но однозначно будут трудности с получением "от куда вызван диалог".
Где-то должно быть место, где менеджер окна отсылает сообщение активному диалогу. Но ок, пока не критично.
Вот щас я тебя не понял. Посылает сообщение какого вида?
Сообщение — вызов виртуальной функции вида [edx+8], по сути вызов обработчика события щелчка в диалоге.
Berserker, можете пожалуйста подсказать, как использовать функционал, аналогичный SN:R в плагине на С++?
Две функции экспортируются Эрой и доступны в С++ era.h файле:
GlobalRedirectFile — глобальное перенаправление (работает во всей игре, не сохраняется в сохраняемые файлы)
RedirectFile — локальное перенаправление в рамках текущей запущенной карты, сохраняется и загружается после автоматически. Собственное, его SN:R использует.
Спасибо, их я видел, но мне не совсем понятно, как именно передать им аргументы. В era.h это не указано, а если впрямую давать две строки, результат получается какой-то странный...
procedure RedirectFile (OldFileName, NewFileName: pchar); stdcall;
procedure GlobalRedirectFile (OldFileName, NewFileName: pchar); stdcall;
Как передавать значения ассоциативных переменных через ресивер !!IP: ?
раз уж планируется отказываться от HE:W, то им должна быть альтернатива.
@Raistlin
Чё то мне подсказывает, что в era.h дополнительно нужно расширить описание функций:
PHP Code:
typedef void  (__stdcall *TRedirectFile) (const charOldFileName, const charNewFileName); 

@Berserker
Берс, ты не сможешьш поставить универсально один хук на все возможные события обработчика. Так не получится.
Есть базовый Dlg_Proc (0x5FFDE0 или 0x405610) (в виртуальной таблице это [vTable+0xC] или [vTable+0x24] не помню точно), но мне кажется в этом случае это не то.

Просто у каждого более-менее важного диалога - своя виртуальная таблица, в которой смещение до обработчика - у всех разное.
Например:
1) SwapDlg: proc = [vTable+0x2C]
2) BattleDlg: proc = [vTable+0x8]
3) TownDlg: proc = [vTable+0x8]
4) HeroDlg: proc = [vTable+0x24]
и т.д.

Я перестал понимать что именно ты хочешь сделать:
-если ты хочешь менять координаты диалога, то это нужно делать перед показом, например в конструкторе.
-а обрабатывать события кликов мыши (это в процесс диалог - 0x5FFDE0 или 0x405610).


PS: чё со временем то случилось у форума? У меня щас показывает 15:41, хотя по настоящему сейчас 19:41
igrik, Berserker, большое спасибо!
This is not Era 3, right? I see a bunch of preinstalled mods

Image: 1632643630.jpg
Reference URL's