Ох, Херомант, долго тебе писать. По моему мнению, не прав ты по всем пунктам. И скорость тоже меряешь явно на глаз. Хуки здесь не при чём, даже в ИИ коде. Скажу проще, лапшу из асм кода никто никогда править не будет. А хук из ЕРМ/Lua/плагинов поправить — пара байт или одна строка кода. По скорости быстрее Эровских хуков ничего не придумаешь. Глобальных переменных не использует, мосты лаконичные, адреса статичные (для предсказания переходов и спекулятивного выполнения). 
 
Если кто-то перехватил функцию и переписал её код, есть два варианта: 
1) Сделать свой перехват и полный свой функционал. 
2) Сделать свой перехват, выполнить доп. команды и вызвать перехваченную функцию, возможно с другими аргументами (а та может вызвать до этого перехваченную и т.д). 
 
Оба подхода работают без проблем. 
 
Если нужна замена части функционала, то call-перехвата почти всегда хватает. Если он умный, сам определяет размер перезаписанных данных, сам создаёт мост и бережно клонирует затёртые команды с их изменением (адреса, типы прыжков). Ну, таблицу switch-case пропатчить можно, конечно, но это обычный патч на запись N байт адреса. 
 
P.S. Некоторые люди сталкивались с микроподлагиваниями в бою, но пока так и не нашли причину. Думаю, если она и есть, то в одном конкретном месте.
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |