Wake of Gods Forum | Форум Во Имя Богов

Full Version: Typhon v. 2.9
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Berserker, все дело в том, что MonTable2 - это изобретение Мастера, и в воге этой таблицы нет. Соответсвенно, нет и гарантированно свободных 59000 байт.
Quote:Вот я ткнул наугад на адрес 023474B2, как я могу быть уверенным, что в этом месте ничего нет? Или я не могу?
Вот тут я предположил, что можно где-то в случайно выбранном месте (где, по идее, пусто и ничего нет) разместить таблицу, а если что-то все-таки затрется, повторить операцию столько раз, сколько потребуется.
Тут явно какая-то каша. Либо там разные перенесённые таблицы, либо именно новые. Если новые, то нужно написать экспортируемую функцию GetMonTable2, в которой возвращать адрес MonTable2.

Пример:
http://free-tutorials.org/simple-example...with-fasm/
Berserker, это была новая таблица. Простите, что непонятно объяснил, у меня, просто, уже немного крыша едет от новой информации 148 В общем, задачу я все-таки решил и сейчас расскажу как, чтобы в будущем по аналогии мог сделать любой.

Первое, что понадобилось сделать, это найти место между функциями (можно где-то еще), где нет вообще ничего. Полистав виртуальные адреса в Олли я заметил, что после 0х401121 идет десятка два "нопов", я выбрал понравившийся (0х401127) и поместил туда функцию, которая будет возвращать нужный мне указатель:
Code:
; В Data.asm пишем следующее (там, где стоят все остальные хуки)
       Hook 401127h, GetPreventiveCounterstrikeTable,          TCall;
...
; Далее в Functions.asm соответственно нужно создать функцию с таким названием
proc GetPreventiveCounterstrikeTable
;      Ядро всей операции - помещение в регистр esi указателя на таблицу
       mov esi, PreventiveCounterstrikeTable
       ret
endp
Теперь о том, как это использовать в плагине. Кстати, я специально оставил здесь "несколько нестандартный" показ сообщения - это просто пример того, как можно передать адрес или значение ЕРМ-скрипту для каких бы то ни было целей.
Code:
int PreventiveCounterstrikeTable;
__asm
{
    push eax;Сохраняем старое значение, хранящееся в eax
    push esi;Сохраняем старое значение, хранящееся в esi
    mov eax, 00401127h; Помещаем в eax адрес функции
    call eax; Вызываем(теперь в esi хранится нужный адрес)
    mov PreventiveCounterstrikeTable, esi;Сохраняем адрес в переменную для дальнейшего использования
    pop esi ;Восстaнавливаем старое значение, хранивщееся в esi
    pop eax ;Восстaнавливаем старое значение, хранивщееся в eax
}
ostringstream stream;
stream << "IF:M^" << *(_ptr_*)(PreventiveCounterstrikeTable+200) << " " << *(_ptr_*)(PreventiveCounterstrikeTable + 201)  << "^";
ExecErmCmd(stream.str().c_str());
У существа 200 есть превентивный контрудар, у 201 - нет. Результат налицо:
Image: 46ajec.png

Кстати, что-то такое я уже предлагал раньше:
Quote:Правда, у меня имеется иная идея: что, если на месте какой-то не используемой больше функции создать новую, которая будет попросту записывать в какой-то регистр адрес таблицы? Я тогда смогу вызвать ее где-то ещё, сохранив при этом предыдущее значение, хранящееся в регистре, куда-нибудь скопировать указатель, а затем восстановить данные в том регистре, куда я его сохранял.

Итак, это было мое первое практическое применение ассемблера - можно считать, очередное достижение получено 96 Глобальный мод я уже создавал, исследования кода проводил, осталось выпустить плагин для всеобщего использования и написать туториал 96
(14.02.2021 22:35)Raistlin Wrote: [ -> ]Первое, что понадобилось сделать, это найти место между функциями (можно где-то еще), где нет вообще ничего. Полистав виртуальные адреса в Олли я заметил, что после 0х401121 идет десятка два "нопов", я выбрал понравившийся (0х401127) и поместил туда функцию, которая будет возвращать нужный мне указатель:

Слишком ненадёжно. Любой bin или dll может поместить по этому адресу свой код (например Тифон 3 занимает некоторые нопы, да и Эмералд 2 теперь тоже, т.к. из-за невозможности ручной отмены мешающих Тифону патчей, сделанных через патчер, пришлось их перенести на нопы:

Code:
[ ][ ][ ] 31: (00401059 04 Patch  0000002359 - emerald), (00401059 04 Patch  0000002360 - emerald), (00401059 04 Patch  0000002361 - emerald), (00401059 04 Patch  0000002362 - emerald), (00401059 04 Patch  0000002363 - emerald), (00401059 04 Patch  0000002364 - emerald), (00401059 04 Patch  0000002365 - emerald), (00401059 04 Patch  0000002366 - emerald), (00401059 04 Patch  0000002367 - emerald), (00401059 04 Patch  0000002368 - emerald), (00401059 04 Patch  0000002374 - emerald), (00401059 04 Patch  0000002375 - emerald), (00401059 04 Patch  0000002376 - emerald), (00401059 04 Patch  0000002377 - emerald), (00401059 04 Patch  0000002378 - emerald), (00401059 04 Patch  0000002379 - emerald), (00401059 04 Patch  0000002380 - emerald), (00401059 04 Patch  0000002381 - emerald), (00401059 04 Patch  0000002382 - emerald), (00401059 04 Patch  0000002383 - emerald), (00401059 04 Patch  0000002384 - emerald), (00401059 04 Patch  0000002385 - emerald), (00401059 04 Patch  0000002386 - emerald), (00401059 04 Patch  0000002387 - emerald), (00401059 04 Patch  0000002388 - emerald), (00401059 04 Patch  0000002389 - emerald), (00401059 04 Patch  0000002390 - emerald), (00401059 04 Patch  0000002391 - emerald), (00401059 04 Patch  0000002392 - emerald), (00401059 04 Patch  0000002393 - emerald), (00401059 04 Patch  0000002394 - emerald)

Если подобное попадёт на твой адрес, то полезут ошибки).

Вообще, в RedirectMemoryBlock наверняка можно в качестве условного "оригинальный_адрес_MonTable2_в_воге" использовать любой заранее фатальный адрес, например:

Code:
stdcall [RedirectMemoryBlock], 6666, 59000, MonTable2

После вызываешь у себя в dll функцию GetRealAdress и проверяешь его на 6666. Если значение изменилось, значит получили адрес MonTable2. Если нет - значит игру запустили без Тифона и MonTable2 не существует.
XEPOMAHT, спасибо за информацию! Я попробую так сделать.
Погодите, это ведь получается, что я таким образом запихаю что-то напрямую в стек не проверяя, что там вообще находится. Не получится ли в результате, что я отправлю в могилу какой-нибудь другой процесс?
Здравствуйте! а можно сделать, чтобы брались значения монстров из текстового файла, вкладываемого в папку с модом?
M.A.K.C., фактически, это так и есть, только файл не текстовый, а бинарный. Редактируется он с использованием графического редактора, который есть в архиве. Если вдруг тебя волнует скорость анимации существ (она изначально существенно выше), то взгляни на прошлую страницу, я там выложил файлик, который восстановит ее. Учти, только, что все выставленные ранее параметры слетят при этом до параметров по умолчанию.
(15.02.2021 17:50)M.A.K.C. Wrote: [ -> ]а можно сделать, чтобы брались значения монстров из текстового файла, вкладываемого в папку с модом?

Можно, но смысл? Редактор монстров с настройками монстров из текстового файла не работает.
Спасибо. Жаль, что жалоба есть, а спасибо, нет.
(15.02.2021 18:09)Raistlin Wrote: [ -> ]M.A.K.C., фактически, это так и есть, только файл не текстовый, а бинарный. Редактируется он с использованием графического редактора, который есть в архиве. Если вдруг тебя волнует скорость анимации существ (она изначально существенно выше), то взгляни на прошлую страницу, я там выложил файлик, который восстановит ее. Учти, только, что все выставленные ранее параметры слетят при этом до параметров по умолчанию.

   А что за параметры могут слететь??
Mahno, все те, что были выставлены. Тот файл возвращает настройки по-умолчанию.
Добрый день. Будет ли тифон под Эра 3 переделан?Не работает с модом panda upgrade mod просто
(06.03.2021 14:01)Mahno Wrote: [ -> ]Не работает с модом panda upgrade mod просто

Что именно там не работает? Если нужна Тифоновская структура монстров, то она возвращается из Эры по команде GetRealAdress.
(06.03.2021 23:55)XEPOMAHT Wrote: [ -> ]
(06.03.2021 14:01)Mahno Wrote: [ -> ]Не работает с модом panda upgrade mod просто

Что именно там не работает? Если нужна Тифоновская структура монстров, то она возвращается из Эры по команде GetRealAdress.

Уже все работает...)
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Reference URL's