| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				До сих пор проблема сделать патчинг в AfterWoG? 
Code:
 ; Code sectionsection '.code' code readable executable
 
 rd 500; для антивирусов
 
 _OnAfterWoG              db 'OnAfterWoG', 0
 _OnCustomDialogEvent     db 'OnCustomDialogEvent', 0
 _OnBeforeBattleAction    db 'OnBeforeBattleAction', 0
 _OnAfterBattleAction     db 'OnAfterBattleAction', 0
 _OnBeforeErmInstructions db 'OnBeforeErmInstructions', 0
 
 DLL_PROCESS_ATTACH = 1
 
 match =FALSE, COPYMODE
 {
 proc TYPHON, hDll, Reason, Reserved
 ; только при подключении dll к процессу, не к потокам
 .if dword [Reason] = DLL_PROCESS_ATTACH
 ; регистрируем обработчики событий
 stdcall [RegisterHandler], OnAfterWoG,              _OnAfterWoG
 
Code:
 ; ГЛАВНАЯ ПРОЦЕДУРАproc OnAfterWoG uses esi edi ebx, Event ; после инициализации WoG
 ; ставим хуки
 mov esi, Table_Hooks
 .LoopHooks:
 mov al, [esi+8]
 mov ecx, [esi+4]; тифон
 mov edx, [esi]; ориг
 mov [edx], al
 lea eax, [edx+5]
 sub ecx, eax
 mov [edx+1], ecx
 add esi, 9
 cmp esi, End_Table_Hooks
 jl .LoopHooks
 ; Меняем допустимое кол-во существ:
 mov esi, ChangeNumMon; таблица адресов
 @@:
 lodsd
 mov dword [eax], MonNum
 cmp esi, EndChangeNumMon
 jnz @b
 ; изменения для случайной генерации
 mov dword [541159h+1], MonNum-1
 mov eax, -0FB0h;
 mov dword [541013h+2], 0FB0h
 mov [54106Bh+2], eax
 mov [54109Ch+3], eax
 mov [5410E1h+3], eax
 mov [541174h+3], eax
 ; переносим структур MonNum
 mov eax, MonNamesERM; таблица имён и описаний для ERM
 mov [733390h], eax
 mov [7333C3h], eax
 mov [7514F4h], eax
 mov [752185h], eax
 mov [7521F1h], eax
 mov [752F35h], eax
 mov eax, 12*MonNum; размер таблицы
 mov [7514EFh], eax
 mov [75217Ch], eax
 ; Переносим таблицу ссылок на имена существ и способност
 Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
 Поддержать проект
 
 |  | 
	| 23.11.2022 15:44 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (23.11.2022 15:44)Berserker Wrote:  До сих пор проблема сделать патчинг в AfterWoG? 
Да. В AfterWoG нет порядка и хуки Тифона могут быть случайно перекрыты любым сторонним кодом из AfterWoG от другого плагина, что небезопасно (особенно когда Патчер или сама ЭРА пытаются ставить свои высокоуровневые хуки поверх тифоновских не понимая, что при забивании нопами испорченного хуком кода портится чуть ли не половина функции, т.к. патчеру или ЭРЕ нельзя сказать, что код испорчен - анализатор кода патчера всегда пытается найти место выхода из хука, перенеся и выполнив при этом затёртый код вместо программиста невзирая ни на что, в итоге приводит к ошибкам в игре, т.к. патчер не видит "грязные" хуки, ему только чистый код подавай, спасибо на том, что патчеру просто можно в той же "грязной" форме сказать, что в этом месте Тифон что-то меняет, но это больше для тех, кто занимается совместимостью с ERA+, а не для самого патчера, память которого наборот забивается несуществующими патчами, о которых патчер только знает, но которые никогда не выполняются). Тем более сейчас, когда в эровском AfterWoG участвуют добрая пловина плагинов к ЭРЕ и будут участвовать ещё и будущие плагины. Отдельный хук после AfterWoG на все тифоновские патчи геройских структур был сделан в Тифоне Мастером ещё начиная с версии 1.0, и все патчи в версии 3.ХХ написаны именно под этот адрес хука, а не под AfterWoG, просто страшно, что ту гиганскую портянку придётся адаптировать под AfterWoG - это ~3300 ассемблерных команд, вручную всё это проверять (тем более, когда многие команды затрагивают саму ЭРУ и HD-мод) - самоубийство для проекта ERA+. Лично я предпочитаю делать по принципу "написал->работает->не трогай", т.к. времени, которое я могу уделять на развитие ERA+, стало не так много.
			 
				
(This post was last modified: 23.11.2022 16:18 by XEPOMAHT.)
 |  | 
	| 23.11.2022 16:05 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				1) Код Эры выполняется ДО кода всех плагинов. Иными словами, все обработчики OnAfterWoG Эры выполняются ДО любых обработчиков OnAfterWoG плагинов. Перепроверять особо ничего не нужно. Quote: Отдельный хук после AfterWoG на все тифоновские патчи геройских структур был сделан в Тифоне Мастером ещё начиная с версии 1.0 
2) Это костыльный вариант. В TyphonZ я сразу же заменил его на нормальную подписку на события. А игра в кто первее пропатчит одно и то же место обречена на провал. Два плагина, переносящие одну и ту же структуру, и так несовместимы.
			
 Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
 Поддержать проект
 
 |  | 
	| 23.11.2022 16:55 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (23.11.2022 16:55)Berserker Wrote:  Два плагина, переносящие одну и ту же структуру, и так несовместимы. 
Хорошо, пример: Тифон подменяет некоторые кривые хуки Эмерала на артефакты. Так же Тифон подменяет хуки например от buttons.era, затирает кое-что из game bug fixes extended.dll, wog_native_dialogs.era, да простит меня Игрик.... Более того, манипуляции Тифона происходят и с HD_WOG.dll. Именно ради совместимости с плагинами Тифон должен выполняться на 100% после ВСЕХ плагинов, устанавливающих хуки в AfterWoG, иначе Тифон не сможет контролировать эти хуки. Да, в чистом безкостыльном виде typnon.dll вообще ни с чем практически несовместим так же точно как в среде ЭРЫ и эровских плагинов не сможет выполнится HotA.dll с просто гигантским количеством изменений в коде игры несмотря даже на все ухищрения патчера.
 
Если функционал всех плагинов, входящих в базовую комплектацию ЭРЫ и ЭРЫ+, добавить непосредственно в typhon.dll, тогда да - можно будет безболезненно перенести установку всех патчей и хуков в эровкий AfterWoG.
 
Собственно AfterWoG - для небольших плагинов. Глобальные плагины должны использовать аналог AfterWoG, чтобы работать независимо от того винегрета, который исполняется в AfterWoG и с которым у Тифона всегда будут конфликты. Авторы плагинов не могут/не хотят заниматься совместимостью с ЭРА+ (исключение - Игрик), их не мало, со всеми договориться просто не реально (пишут плагины и программисты из Кореи например), поэтому совместимость приходится делать только в рамках самой ЭРЫ+ с отдельными dll. AfterWoG для этого совершенно не годится в виду своей безконтрольности.
			 
				
(This post was last modified: 23.11.2022 17:19 by XEPOMAHT.)
 |  | 
	| 23.11.2022 17:18 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 24.11.2022 07:29 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 24.11.2022 07:47 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (24.11.2022 07:47)Berserker Wrote:  у Эра+, как ты сам заметил, по умолчанию слабая совместимость с плагинами и ты тщательно их отбираешь сам. 
Пользователей Эра+ это не останавливает. Кто-то например захочет доложить в мод новейший плагин от daemon_n , кто-то может написать свой собственный конкретно под Эру+. Тем более в составе Эры+ есть редакторы монстров и заклинаний, а в будущем возможно будет и редактор городов, что так же привлекает некоторых энтузиастов.
  (24.11.2022 07:47)Berserker Wrote:  Потому как быстрое и простое решение — вполне. Могу альтернативно сделать просто приватное событие для Era+ вместо AfterWoG. Это мне пара строк кода. 
Лично я не понимаю, чем новое эровское событие, которое будет добавлено исключительно для Тифона, будет лучше хука? В данный момент эровские события в Тифоне не используются вообще никак. А "import era" в импортируемых процедурах закомментирован до лучших времён.
			 |  | 
	| 24.11.2022 08:32 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 24.11.2022 08:53 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (24.11.2022 08:53)Berserker Wrote:  Потому что оно сработает до OnAfterStructsRelocations. А в том событии все структуру уже должны быть перенесены. 
Там прикол был в том, что с той же структурой монстров RedirectMemoryBlock не срабатывал из AfterWoG, поэтому у меня нет доверия к эровскому AfterWoG, слишком много уже с этим намучался. RedirectMemoryBlock корректно работал только в момент инициализации самой dll и больше нигде. Причины неизвестны, возможно, что ЭРА всё же копирует адрес на структуру монстров где-то до AfterWoG, а где-то - после, поэтому в эровском диалоге найма монстров не отображались ресурсы, хотя всё остальное - работало, та же самая ситуация была у Маячка в феаноровском плагине на новых монстров, не знаю, как он её разрулил.
 
Проще уж применять в era.dll результаты RedirectMemoryBlock где-нибудь перед главным меню игры, когда все структуры уже пропатчены. Без специальных событий для плагинов, глобально меняющих структуры игры.
			 |  | 
	| 24.11.2022 09:18 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 24.11.2022 13:17 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 | 
			| 
 
				Прямо сейчас для тестов тебе подходит OnReportVersion. 
Порядок:
 
Code:
 VfsImport.RunVfs(VfsImport.SORT_FIFO);VfsImport.RunWatcherA(pchar(GameDir + '\Mods'), 250);
 
 EventMan.GetInstance.Fire('OnAfterVfsInit', NO_EVENT_DATA, 0);
 
 LoadPlugins('era');
 EventMan.GetInstance.Fire('OnBeforeWoG', NO_EVENT_DATA, 0);
 BinPatching.ApplyPatches(GameDir + '\' + PATCHES_PATH + '\BeforeWoG');
 
 InitWoG;
 
 LoadPlugins('dll');
 EventMan.GetInstance.Fire('OnAfterWoG', NO_EVENT_DATA, 0);
 BinPatching.ApplyPatches(GameDir + '\' + PATCHES_PATH + '\AfterWoG');
 
 EventMan.GetInstance.On('OnGenerateDebugInfo', OnGenerateDebugInfo);
 
 EventMan.GetInstance.Fire('OnReportVersion');
 AssignVersionsInfoToCredits;
 
 EventMan.GetInstance.Fire('OnAfterStructRelocations');
 Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
 Поддержать проект
 
 |  | 
	| 24.11.2022 16:34 |  | 
	
		| Archer30   
   
   Posts: 1192
 
 |  | 
	| 17.12.2022 10:20 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 17.12.2022 21:16 |  |