а если написать свои методы для осады и просто заменить адреса методов на свои, тоже не выйдет? ну предположим есть ивент onSiegeStart, и ты в него как то инклудишь свой startSiege , а все остальное скипаешь и выполняется только твой код? Или это как раз то что ты описываешь где надо фиксить сотни ошибок?
Вы немного не поняли суть того, как работает экстендер в приложении. Допустим есть l2server.exe каждый участок кода имеет свой адрес в памяти(статический, не меняющийся) допустим функция метод класса CCastleSiege::OnSiegeStart(CCastleSiege*, int, int); старт этой функции, допустим, находится по адресу 0х463DEB, Допустим она вызывается в нескольких местах в сервере, при начале цикла осад, при гм команде и т.д. Для начала нам необходимо дизассемблировать и восстановить все члены класса CCastleSiege, и множество других, которые используются в этой функции, чтобы понимать, что вообще там происходит. Реверс происходит путем постановки брейк поинта,отладки и просмотра значений в переменных, и далее уже используя интуицию, так же в помощь берется пдб от 166, Далее, необходимое создать длл библу, написать функцию подмены(если целиком) вызова настоящей функции, на твою, измененную и написанную на с++ в твоей длл, так же необходимо написать портатипы, или изменить(по желанию) функции, которыетвызываются в OnSiegeStart. Если изменить, то проделать тоже самое и с ними. В общем вам необходимо разобрать не один класс, не Одину функцию, чтобы понимать что делается в одной нужной вам. Для человека, который этим занимается долгое время и имеет уже разобранный Ida от нужного протокола, это сделать очень не сложно. Если вы с нуля начнете делать это, то потратите очень много времени