Current time: 22.04.2024, 06:01 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Исследование героев
» туториал(ы)
Author Message
feanor Offline

Posts: 622
Post: #121

Quote:+) Добавлено новое событие 77010: Any Hero Interruction (аналог !?HE для всех героев). Параметры события: Герой-Инициатор, Герой-Цель.
Событие, как и оригинальное !?HL, возникает дважды: до и после взаимодействия.
Пример:
!?FU77010;
!!SN:X?y1/?y2;
!!IF:M^Initiator: %Y1, Target: %Y2^;
Не то?
10.09.2010 10:47
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #122

Гм, откуда это? Из Era.chm? Мне сейчас интересна не сама функция, а принцип поиска нужных значений для самой функции и ее создание. Пытаюсь учиться.


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
10.09.2010 13:39
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #123

Из хэлпа по изменениям в Эре 1.8. А так верно идёшь, находишь триггер !?HE ZVS, там он генерит событие в зависимости от нового героя. Ищешь, в каких регистрах герой-источник, герой-приёмник и пишешь свою реализацию. Код из Эры:

Code:
PROCEDURE Hook_HeroesMeet_Call; ASSEMBLER; {$FRAME-}
ASM
    // Если триггер - !?OB, то возвращаемся
    CMP DWORD [EBP+$1C], 34
    JNE @@Exit
    // Получаем номер героя-инициатора
    MOV EAX, [$69CCFC]
    MOV EAX, [EAX+4]
    MOV DWORD [General.EventParams], EAX
    // Получаем номер цели
    LEA ECX, [ECX-30100]
    MOV DWORD [General.EventParams+4], ECX
    // Генерируем ЕРМ-событие
    PUSHAD
    PUSH General.C_ERA_EVENT_HEROMEET
    CALL General.GenerateCustomErmEvent
    POPAD
    // Возвращаем управление ZVS
    @@Exit:
    PUSH $74D760
    PUSH $74C816
END; // .procedure Hook_HeroesMeet_Call

// Патчим вызов триггера !?HE
General.HookCode(POINTER($74D75B), @Hook_HeroesMeet_Call, General.C_HOOKTYPE_JUMP, 5);


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

Posts: 1054
Post: #124

Bers, я сейчас писал, что я нашел место, где сравнивается номер героя с 0 и со 155. Но это для того, чтобы игра знала, выдавать или не выдавать сообщение об ошибке в духе "баран, героя номер -1 в природе не существует!!111". А мне теперь нужно от этого перейти непосредственно к триггеру !?HE... Вот это-то и представляет сложность: я не знаю соли.


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
10.09.2010 19:20
Visit this user's website Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #125

Что-то я не понял, как вообще написать dll для создания триггера?

В смысле что надо сделать, чтобы она работала, и по известному мне адресу выполнялся написанный мной код?
10.09.2010 20:47
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #126

См. исходник MoP'a. Мне вот куда интереснее, как найти адрес для хука.


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 10.09.2010 20:49 by GhostManSD.)
10.09.2010 20:48
Visit this user's website Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #127

GhostManSD Wrote:См. исходник MoPa.
Там есть какие-то непонятные мне константы.
А когда я попробовал просто заменить адрес и код на свой, это работать отказалось.
10.09.2010 20:52
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #128

Так адрес не любой нужен, а тот, что нарыт в ассемблере.


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 10.09.2010 21:02 by GhostManSD.)
10.09.2010 21:02
Visit this user's website Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #129

Так я и нарыл.
10.09.2010 21:03
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #130

Посмотри ещё исходники Эры.


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
10.09.2010 21:06
Visit this user's website Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #131

Всё, получилось.
10.09.2010 22:44
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #132

Так, ошибку при чтении игрой команды "!?HE-1;" затёр. Если кому нужно, вот исходник. Код, на самом-то деле, ничтожен, но приятно, что хоть это сумел...
Подскажите, пожалуйста, как всё-таки искать оригинальный триггер !?HE. Часа четыре пытался что-нибудь сообразить, но никак.


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
11.09.2010 00:12
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #133

GhostManSD, такие вещи проще и универсальнее через бинарные патчи делать. Например, нужно занопить 5 байт: адрес 9090909090.


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

Posts: 1054
Post: #134

Berserker, спасибо! Осталось теперь узнать, как это делать...
Добавлено:
А с поиском триггера никто не подскажет?


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 11.09.2010 00:52 by GhostManSD.)
11.09.2010 00:52
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #135

Quote:Осталось теперь узнать, как это делать...
Создаёшь txt файл, в котором пишешь: адрес байты в хекс-формате. Далее BinGen.exe file.txt => file.bin. Бинарный файл просто кидаешь в папку EraPlugins.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
11.09.2010 01:14
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