Current time: 14.04.2024, 16:32 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Typhon v. 2.9
» Инструмент мододелов из MoP для ЭРЫ
Author Message
Raistlin Away
Moderators

Posts: 1348
Post: #466

Berserker, все дело в том, что MonTable2 - это изобретение Мастера, и в воге этой таблицы нет. Соответсвенно, нет и гарантированно свободных 59000 байт.
Quote:Вот я ткнул наугад на адрес 023474B2, как я могу быть уверенным, что в этом месте ничего нет? Или я не могу?
Вот тут я предположил, что можно где-то в случайно выбранном месте (где, по идее, пусто и ничего нет) разместить таблицу, а если что-то все-таки затрется, повторить операцию столько раз, сколько потребуется.


Создал новый глобальный мод: WoG Ultra Edition
14.02.2021 18:22
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #467

Тут явно какая-то каша. Либо там разные перенесённые таблицы, либо именно новые. Если новые, то нужно написать экспортируемую функцию GetMonTable2, в которой возвращать адрес MonTable2.

Пример:
http://free-tutorials.org/simple-example...with-fasm/


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
14.02.2021 20:21
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1348
Post: #468

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


Создал новый глобальный мод: WoG Ultra Edition
(This post was last modified: 15.02.2021 20:28 by Raistlin.)
14.02.2021 22:35
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2271
Post: #469

(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 не существует.
15.02.2021 00:10
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1348
Post: #470

XEPOMAHT, спасибо за информацию! Я попробую так сделать.


Создал новый глобальный мод: WoG Ultra Edition
15.02.2021 00:46
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1348
Post: #471

Погодите, это ведь получается, что я таким образом запихаю что-то напрямую в стек не проверяя, что там вообще находится. Не получится ли в результате, что я отправлю в могилу какой-нибудь другой процесс?


Создал новый глобальный мод: WoG Ultra Edition
15.02.2021 03:05
Find all posts by this user Quote this message in a reply
M.A.K.C. Offline

Posts: 472
Post: #472

Здравствуйте! а можно сделать, чтобы брались значения монстров из текстового файла, вкладываемого в папку с модом?


Все свежие обновления я выкладываю на своем сайте здесь.
15.02.2021 17:50
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1348
Post: #473

M.A.K.C., фактически, это так и есть, только файл не текстовый, а бинарный. Редактируется он с использованием графического редактора, который есть в архиве. Если вдруг тебя волнует скорость анимации существ (она изначально существенно выше), то взгляни на прошлую страницу, я там выложил файлик, который восстановит ее. Учти, только, что все выставленные ранее параметры слетят при этом до параметров по умолчанию.


Создал новый глобальный мод: WoG Ultra Edition
15.02.2021 18:09
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2271
Post: #474

(15.02.2021 17:50)M.A.K.C. Wrote:  а можно сделать, чтобы брались значения монстров из текстового файла, вкладываемого в папку с модом?

Можно, но смысл? Редактор монстров с настройками монстров из текстового файла не работает.
15.02.2021 18:10
Find all posts by this user Quote this message in a reply
M.A.K.C. Offline

Posts: 472
Post: #475

Спасибо. Жаль, что жалоба есть, а спасибо, нет.


Все свежие обновления я выкладываю на своем сайте здесь.
(This post was last modified: 15.02.2021 20:43 by M.A.K.C..)
15.02.2021 20:43
Find all posts by this user Quote this message in a reply
Mahno Offline

Posts: 49
Post: #476

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

   А что за параметры могут слететь??
17.02.2021 01:39
Find all posts by this user Quote this message in a reply
Raistlin Away
Moderators

Posts: 1348
Post: #477

Mahno, все те, что были выставлены. Тот файл возвращает настройки по-умолчанию.


Создал новый глобальный мод: WoG Ultra Edition
17.02.2021 05:56
Find all posts by this user Quote this message in a reply
Mahno Offline

Posts: 49
Post: #478

Добрый день. Будет ли тифон под Эра 3 переделан?Не работает с модом panda upgrade mod просто
06.03.2021 14:01
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2271
Post: #479

(06.03.2021 14:01)Mahno Wrote:  Не работает с модом panda upgrade mod просто

Что именно там не работает? Если нужна Тифоновская структура монстров, то она возвращается из Эры по команде GetRealAdress.
(This post was last modified: 06.03.2021 23:55 by XEPOMAHT.)
06.03.2021 23:55
Find all posts by this user Quote this message in a reply
Mahno Offline

Posts: 49
Post: #480

(06.03.2021 23:55)XEPOMAHT Wrote:  
(06.03.2021 14:01)Mahno Wrote:  Не работает с модом panda upgrade mod просто

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

Уже все работает...)
07.03.2021 13:24
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group