Цитата
Не специалист, но теоретически,Lua скрипты могут и сюда прикрутить если знают исходный код.. но насколько это сложно, ответят только те кто шарит)
Попробую ответить, не как специалист, скорее больше как любопытствующий наблюдатель, обладающий знанием, которое позволяет интуитивно предположить возможный ответ.
Из собственного опыта прогулки по исходникам EOP, складывается общее понимание того, как устроен механизм "турбонаддува" геймплея Меди 2:
1. Путем исследования памяти системного процесса medieval2.exe/kingdoms.exe с помощью динамического отладчика обнаруживаются нужные регистры и значения регистров в машинном коде.
2. Библиотека EOP на уровне исходного кода осуществляет установку/подмену нужных значений в нужные регистры игрового процесса, когда данный процесс активируется из-под лаунчера EOP.
3. Функциональность Lua-скриптов EOP опирается на знание объявлений/определений библиотечных функций проекта EOP и потребляет эти функции, позволяя мододелу передавать нужные аргументы.
Теперь давайте взглянем на общий механизм встраивания скриптов в программу, в нашем случае это Lua скрипты, но важна суть самого принципа, т.к. концептуальный подход во многих языках программирования является похожим, различаются лишь технические детали реализации:
- Скриптовый язык может быть встроен в исходный код целевой программы - этот случай нам не подходит, т.к. у нас есть "пропатченный" экзешник без исходного кода.
- Скриптовый язык может вызывать функцию/процедуру из целевой программы, если известно имя, количество/типы её параметров и тип возвращаемого значения, а также если эта функция/процедура находится в какого-либо рода библиотеке (например, DLL) - это делается продвинутыми средствами языка программирования: подключается эта "нативная" библиотека, затем тем или иным образом осуществляется вызов нужной функции. Этот случай тоже не совсем подходит, т.к. (то что я видел краем глаза здесь) "пропатченные" экзешники это исполняемые файлы, а не библиотеки. Если бы был исходный код, библиотеку можно было бы создать путем расщепления программы, но это определенно не для реверс-инженерии задача, где (как я понимаю) важно сохранить максимальную неизменность изначальной программы.
Проект EOP использует последний из вышеописанных подходов, но реализует данный подход путем смешивания традиционной техники и реверс-инженерии. Пожалуй, это единственный путь достижения приемлемого результата. Так как же быть, если мы захотим прикрутить Lua-скрипты EOP к "пропатченным" экзешникам ???
Скорее всего, самым простым способом будет следующий - заменить "бэкенд" игрового процесса.
Например, EOP использует родные экзешники CA для обхода лимитов, а теперь понадобится сделать переключатель на "пропатченные экзешники" коммьюнити.
Для этого потребуется как минимум:
1. Исследовать, совместимы ли потребляемые EOP регистры в памяти процесса с теми же самыми регистрами в памяти "пропатченного" процесса. Возможно, совместимость есть, но заниматься динамическим анализом процесса всё равно придётся - взять и прикрутить EOP к модифицированному экзешнику вряд ли получится без последствий.
2. На уровне исходного кода EOP написать новые реализации функций, принимающих участие в подмене значений регистров - если это действительно нужно, или же можно каким-то способом специализировать существующие реализации, например с помощью добавления новых параметров и так далее.
3. Подготовить нужные внешние интерфейсы для того чтобы мододелы могли переключать нужные реализации функции для использования фич EOP на пропатченном или неизменном экзешнике игры.
Концептуальный принцип очень похож на следующий: вы запускаете какую-нибудь старенькую игру, используя тот или иной графический рендерер (DirectX или OpenGL, например) - здесь же EOP будет потреблять ту или иную реализацию одного и того же игрового движка.
Резюмирую: если вам нужно перенести функционал EOP на взломанный экзешник Меди, потребуется реализовать поддержку данного экзешника на уровне исходного кода EOP.