Current time: 22.11.2024, 17:37 Hello There, Guest! (LoginRegister)
Language: english | russian  

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

Posts: 16657
Post: #76

Quote:Берс, можешь объяснить суть триггеров входа в окно героя и выхода из оного?
Тебя интересует, как это юзать в Эре или почему именно так реализовано?


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

Posts: 1054
Post: #77

Ну, меня интересует, можно ли таким же образом состряпать функцию для кода из второго спойлера. Ab
Добавлено:
Для функции 90002.


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

Posts: 16657
Post: #78

C_FUNC_ZVS_CALLFU = $74CE30; // void FUCall(int n)
Я использовал константу для адреса функции обработки события вызова ЕРМ-функции. А феанор тебе просто дал числовое значение адреса, что одно и то же.

У тебя следующие ошибки:
1) Имена экспортируемых в кавычках должны быть.
2) Функции не нужно вызывать, просто пиши ЕРМ обработчики !?FU90001; ...
3) Секция exports должна быть одна и находиться до BEGIN Hook... END.
4) В секции записи друг от друга отделяются ",", а лишь в конце ";"

Code:
EXPORTS
    HOOK_Trigger_TownEnter NAME 'Trigger_TownEnter',
    HOOK_PostTrigger_HeroLevel NAME 'PostTrigger_HeroLevel',
    HOOK_Trigger_RecruitingTroops NAME 'Trigger_RecruitingTroops';


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

Posts: 1054
Post: #79

Bers, спасибо огромное! Всё работает!


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

Posts: 1054
Post: #80

Подскажите, пожалуйста, вот какую штуку. Есть желание сделать триггер при найме существ. Нашел деф кнопки "нанять максимум существ", ввел в поиск по ссылкам, попал в ту часть кода, где эта кнопка создается и помещается. Теперь - главное: как выйти от момента создания кнопки в диалоговом окне к тому самому моменту, когда происходит первый запрос на создание диалогового окна?
Иными словами - как выйти на тот адрес, на который и нужно ставить ловушку?
Добавлено:
Кстати, значение адреса 0x74CE30 дал мне не feanor, а MOP, за что ему тысячу раз спасибо!


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

Posts: 16657
Post: #81

Там где создаётся, открой стёк вызовов. Либо в этой же функции, либо в одной из родительских генерируется действие.


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

Posts: 1054
Post: #82

Теперь практически обратный вопрос: адрес выхода из окна искать так же? Иными словами, искать адрес, к которому обращается игра при закрытии окна, нужно так же?

Вот есть, например, окошко найма существ. Нужно найти три адреса: один - если игрок нажал кнопку покупки и успешно купил существ, другой - если игрок нажал кнопку покупки, а купить не смог (а-ля не хватает провизии), третий - если игрок нажал кнопку отмены. Порядок действий таков (например, хотя можно наверняка и иначе):
1. Найти в ссылках деф кнопки "нанять всех".
2. Открыть стек вызовов.
3. Поставить точку останова на все вызовы и по одному отсеивать их, снимая эти точки останова, пока не найду нужные.

Я правильно понял?


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

Posts: 16657
Post: #83

Не правильно. Узнать купил или не купил можно в пост триггере, сравнив армию до и после. Так что нужно делать один перехватчик вызова функции диалога найма героя. Сперва генерируешь событие открытия, затем выполняешь геройскую функцию, затем событие закрытия. После этого возвращаешь управление игре.


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

Posts: 1054
Post: #84

А события открытия/закрытия искать в Олли в стеке вызовов? Ставя точки останова на каждом из этих адресов?
Добавлено:
И что имеется в виду под пост-триггером? !$FU%номер функции для открытия окна диалога%?


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

Posts: 16657
Post: #85

GhostManSD, не могу помочь, не так много времени. Читай литературу, разбирайся сам по-тихоньку, всё ведь не всегда однозначно, чтобы 100%-ый рецепт выписать. Научившись трассировать программы по шагам, смотреть дамп и состояние переменных, легко сможешь определять то, что тебе нужно. А иначе вопросы будут постоянно.


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

Posts: 624
Post: #86

Quote:третий - если игрок нажал кнопку отмены.
ищешь обработчик нажатий кнопок в диалоге. В конкретно данном случае искать легко - через бряк на 4F6C00 (показ сообщения). Кнопка с номером 30721 (дес.) - кнопка закрытия диалога.
06.09.2010 18:22
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #87

Номер получен путем опытов или интуитивно (кнопка ОК в CM:I - 30720)?


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

Posts: 1054
Post: #88

Правильно ли я понял по поводу дефа той или иной кнопки, что данные располагаются в общем и целом примерно так (жирным выделена строка, к которой прихожу по поиску дефа):
Не мог бы кто-нибудь объяснить суть команд, стыдливо прикрытых знаками "???"? Я пробовал поиграться со значением, но вроде ничего не изменилось.
Осталось теперь понять, как от всего этого великолепия выйти к моменту создания самого диалога.


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

Posts: 7107
Post: #89

(07.09.2010 03:10)GhostManSD Wrote:  Не мог бы кто-нибудь объяснить суть команд, стыдливо прикрытых знаками "???"?
там может быть адрес обработчика нажатия (4 байта)


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
07.09.2010 09:26
Find all posts by this user Quote this message in a reply
GhostManSD Offline

Posts: 1054
Post: #90

Там вроде какие-то маленькие значения в духе 20, 40, 1, 2, etc. Некоторые интересные для меня адреса я нашел в call functions, ставя по очереди на них бряки:
1. Нажатие в окне найма "нанять" или "отмена". Действует почему-то лишь на экране города, в жилище действует лишь "отмена". Не там ищу?
2. Нажатие при заходе в жилище кнопки "ОК" при вопросе "хотите ли вы нанять...?".
3. Адрес перед высвечиванием диалога.

Нужен хук именно на кнопку "нанять".


Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
07.09.2010 10:49
Visit this user's website 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