Current time: 20.04.2024, 16:00 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Typhon v. 2.9
» Инструмент мододелов из MoP для ЭРЫ
Author Message
Berserker Offline
Administrators

Posts: 16485
Post: #256

Mahno, в настоящее время никак. В Эре 2.9.4 через !!RD нужно будет реализовать свой алгоритм работы с альтерветками или использовать готовый мод, который постараемся сделать.


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

Posts: 49
Post: #257

(28.12.2019 23:52)Berserker Wrote:  Mahno, в настоящее время никак. В Эре 2.9.4 через !!RD нужно будет реализовать свой алгоритм работы с альтерветками или использовать готовый мод, который постараемся сделать.

Лучше буду ждать готовый мод)А то мне многое не понятно, а у вас голова сильно варит
29.12.2019 00:04
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4338
Post: #258

Berserker, я уже не первый раз слышу про !!RD и !?FU(OnOpenRecruitDlg); и иже с ним, но так и не нашёл по ним документации.
Есть где-нибудь по ним небольшая справка?
Первая мысль, что пришла в голову с предполагаемым новым !!RD, так это сделать окно найма для 3 или 4 существ для тех существ, которые будут именть несколько апгрейдов с некоторыми скриптами, в т.ч. и оригинальными воговскими.


Image: widget.png?style=banner2

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

Posts: 16485
Post: #259

daemon_n, в era changelog.txt всё, что в Help\Era manual. В 2.9.3 вылетает, где-то я недавно загружал обновлённую dll.


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

Posts: 4338
Post: #260

Berserker, да в чейнджлогп видел, но так и не понял, если честно. Видимо, пока не моё)


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
29.12.2019 11:00
Visit this user's website Find all posts by this user Quote this message in a reply
AuAu Offline

Posts: 287
Post: #261

Лол) колесуны))) вспомнили же)


очень большая сборка модов для сиськофайтинга
In WoG we trust
29.12.2019 16:15
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16485
Post: #262

Эра 2.9.4 конфликтует по отзывам с Тифоном: не отображается плата в ресурсах у монстров. МОР, не подскажешь, где мы разминулись?

    ApiJack.StdSplice(Ptr($4B0770), @Hook_OpenRecruitMonsDlg, ApiJack.CONV_THISCALL, 1);
    ApiJack.HookCode(Ptr($70DD4A), @Hook_OpenTownDwelling);
    // Prevent ESI (PTown) := EAX override. Exchange ESI, EAX instead
    Core.p.WriteDataPatch(Ptr($51FB9F), ['9690']);
    ApiJack.HookCode(Ptr($51FBB5), @Hook_OpenTownDwellingFromKingdomOverview);
    ApiJack.HookCode(Ptr($5DD2FC), @Hook_OpenTownHallDwelling);
    ApiJack.HookCode(Ptr($5D4271), @Hook_OpenTownHordeDwelling);
    ApiJack.HookCode(Ptr($5510D2), @Hook_UpdateAdvMapInRecruitMonsDlg);
    ApiJack.HookCode(Ptr($550EB7), @Hook_RecruitMonsDlgMouseClick);
    ApiJack.HookCode(Ptr($5DD3C8), @Hook_TownHallMouseClick);
    ApiJack.HookCode(Ptr($550860), @Hook_RecruitDlgRecalc);
    ApiJack.HookCode(Ptr($551089), @Hook_RecruitDlgAction);
    ApiJack.HookCode(Ptr($550989), @Hook_AllowZeroCost);
    ApiJack.HookCode(Ptr($5509A4), @Hook_AllowZeroResourceCost);


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

Posts: 2269
Post: #263

(28.12.2019 23:15)Mahno Wrote:  Как открыть окно найма кликом на такой-то области?В Эре в версии 2.9.3. с тифоном не работают клики на найм существ в форте и выбор веток существ

Исправлено костылём. Просьба к Берсеркеру в следующих версиях эры перехват на все воговские триггеры больше не изменять.

(14.01.2020 01:51)Berserker Wrote:  Эра 2.9.4 конфликтует по отзывам с Тифоном: не отображается плата в ресурсах у монстров. МОР, не подскажешь, где мы разминулись?

В течении дня попробую поискать.
14.01.2020 14:48
Find all posts by this user Quote this message in a reply
MOP Offline
Moderators

Posts: 1468
Post: #264

Дедовский способ: беру первые четыре цифры из адреса твоего хука и ищу в файле Тифона.
Единственный близкий результат - ChangeNumMon, один из адресов - 550826h. Близко к
Quote:ApiJack.HookCode(Ptr($550860), @Hook_RecruitDlgRecalc)
Но всё равно далековато. Эры последней нет, посмотреть не могу. Если не оно - не знаю.


Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
(This post was last modified: 14.01.2020 15:02 by MOP.)
14.01.2020 15:01
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16485
Post: #265

XEPOMAHT, зачем Тифон перехватывает ProcessErm? В Эре она вся переписана. Полностью замещена. Это же ядро движка.
MOP, понял, спасибо большое в любом случае.


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

Posts: 2269
Post: #266

(14.01.2020 15:33)Berserker Wrote:  зачем Тифон перехватывает ProcessErm? В Эре она вся переписана. Полностью замещена. Это же ядро движка.

Чтобы на воговских триггерах исполнять код Тифона. Сама Эра при этом не перехватывается, ничего в ней Тифон не изменяет, т.к. это и не нужно.
14.01.2020 15:59
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16485
Post: #267

XEPOMAHT, в Эре это не так делается. Да и вообще в любом расширяемом программном продукте. Вместо таких перехватов используется подписка на события. Скажем, в Эре это RegisterHandler (адрес функции, 'название события') и обработчик stdcall, принимающий один указатель на непрозрачную структуру данных. Всё. Подписались на событие такое-то, скажем OnHeroScreenMouseClick, выполнили код. Или можешь подробнее описать, что ещё нужно Тифону?

Причём обработчики плагинов выполняются до ЕРМ, можно что угодно перезаписать. Не хочется именованных событий и хочется старые триггеры по номерам?

RegisterHandler(обработчик, 'OnTrigger 30303'); например.
Чтобы получить адрес экспортируемой era.dll функции нужно вызвать LoadLibrary('era.dll') и затем GetProcAddress(дескриптор библиотеки era.dll, имя функции).


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

Posts: 2269
Post: #268

(14.01.2020 16:13)Berserker Wrote:  RegisterHandler(обработчик, 'OnTrigger 30303'); например.
Чтобы получить адрес экспортируемой era.dll функции нужно вызвать LoadLibrary('era.dll') и затем GetProcAddress(дескриптор библиотеки era.dll, имя функции).

Готового кода под эту вещь у меня нету, использую только то, что есть (не программист я, не потянуть с нуля создание функций LoadLibrary и GetProcAddress, примерно-похожего кода по которым у меня всё равно нету - в движке Третьих Героев это не используется, да и ЭРА списки адресов своих функций не записывает в статическую память, где бы их легко можно было бы читать без всяких лишних вызовов LoadLibrary и GetProcAddress).

(14.01.2020 01:51)Berserker Wrote:      ApiJack.StdSplice(Ptr($4B0770), @Hook_OpenRecruitMonsDlg, ApiJack.CONV_THISCALL, 1);

Пока что единственное решение вышеупомянутого бага в Тифоне - убирать данный перехват для восстановления показов ресурса в окне найма, больше ничего найти не удалось. Оригинальная функция по номеру монстра берёт из структуры стоимость ресурса, но заменённая функция из ERA имеет абсолютно другой вид и не использует вызовов родных геройских функций (по крайней мере таких я там не нашёл, так только пробежался отладчиком по коду - а он не маленький, без бутылки не разберёшься).
(This post was last modified: 14.01.2020 19:10 by XEPOMAHT.)
14.01.2020 19:07
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16485
Post: #269

Quote:Пока что единственное решение вышеупомянутого бага в Тифоне - убирать данный перехват для восстановления показов ресурса в окне найма, больше ничего найти не удалось. Оригинальная функция по номеру монстра берёт из структуры стоимость ресурса
Уже теплее.

Как я понял, Тифон структуру с информацией о монстрах расширил. Всё, что нужно сделать, это один раз вызвать функцию из era.dll: RedirectMemoryBlock(7D0C90, старый размер массива с инфой о монстрах, новый адрес массива).

MonTable rb sizeof._Creature_*MonNum; структура существ (главная)
Вот эта таблица в тифоне.

В самом же коде Тифона MOP импортирует много функций.

data import
; Импортируемые процедуры
    library kernel32,'kernel32.dll'

    import kernel32,\
CreateFileA,'CreateFileA',\
GetFileSize, 'GetFileSize',\
VirtualAlloc, 'VirtualAlloc',\
ReadFile, 'ReadFile',\
CloseHandle, 'CloseHandle',\
VirtualFree, 'VirtualFree',\
WriteFile, 'WriteFile'

end data

Точно также можно импортировать из Эры несколько функций.
Попробуй

library era, 'era.dll'
import era, RegisterHandler, 'RegisterHandler', RedirectMemoryBlock, 'RedirectMemoryBlock'

А в functions.asm в ; ГЛАВНАЯ ПРОЦЕДУРА
нужно будет сделать так:

; Уведомляем Эру о том, что таблица существ перенесена
push MonTable
push sizeof._Creature_*197
push 7D0C90
call RedirectMemoryBlock

; Вместо хука на ProcessErm нужно подписаться на событие, но это уже позже, давай для начала с этим багом разберёмся.


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

Posts: 2269
Post: #270

(14.01.2020 19:46)Berserker Wrote:  ; Уведомляем Эру о том, что таблица существ перенесена
push MonTable
push sizeof._Creature_*197
push 7D0C90
call RedirectMemoryBlock

Не работает. Тифон от такого вызова падает при загрузке игры:

Code:
Failed to write data at 230390.
EIP: Typhon.BD0E8. Code: C0000005

> Registers
EAX: 00000000 (int: 0)
ECX: 0022FFB0 (int: 2293680, pint: 0x773D208B = 2000494731)
EDC: Ntdll.E4F4 (int: 2089870580, pint: 0x24A48DC3 = 614763971)
EBX: 7FFD9000 (int: 2147323904, pint: 0x00000000)
ESP: 0022FFB4 (int: 2293684, pint: 0x0D171819 = 219617305)
EBP: 0022FFF0 (int: 2293744, pint: 0x00000000)
ESI: 00000000 (int: 0)
EDI: 00000000 (int: 0)

Но если эровский хук на 4B0770 убрать, то падения уже нет. В общем пока проблема с Hook_OpenRecruitMonsDlg не будет решена, Тифон будет отключать Hook_OpenRecruitMonsDlg.
(This post was last modified: 15.01.2020 12:53 by XEPOMAHT.)
15.01.2020 11:51
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