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

Full Version: Исследование героев
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Quote:Берс, можешь объяснить суть триггеров входа в окно героя и выхода из оного?
Тебя интересует, как это юзать в Эре или почему именно так реализовано?
Ну, меня интересует, можно ли таким же образом состряпать функцию для кода из второго спойлера. Ab
Добавлено:
Для функции 90002.
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';
Bers, спасибо огромное! Всё работает!
Подскажите, пожалуйста, вот какую штуку. Есть желание сделать триггер при найме существ. Нашел деф кнопки "нанять максимум существ", ввел в поиск по ссылкам, попал в ту часть кода, где эта кнопка создается и помещается. Теперь - главное: как выйти от момента создания кнопки в диалоговом окне к тому самому моменту, когда происходит первый запрос на создание диалогового окна?
Иными словами - как выйти на тот адрес, на который и нужно ставить ловушку?
Добавлено:
Кстати, значение адреса 0x74CE30 дал мне не feanor, а MOP, за что ему тысячу раз спасибо!
Там где создаётся, открой стёк вызовов. Либо в этой же функции, либо в одной из родительских генерируется действие.
Теперь практически обратный вопрос: адрес выхода из окна искать так же? Иными словами, искать адрес, к которому обращается игра при закрытии окна, нужно так же?

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

Я правильно понял?
Не правильно. Узнать купил или не купил можно в пост триггере, сравнив армию до и после. Так что нужно делать один перехватчик вызова функции диалога найма героя. Сперва генерируешь событие открытия, затем выполняешь геройскую функцию, затем событие закрытия. После этого возвращаешь управление игре.
А события открытия/закрытия искать в Олли в стеке вызовов? Ставя точки останова на каждом из этих адресов?
Добавлено:
И что имеется в виду под пост-триггером? !$FU%номер функции для открытия окна диалога%?
GhostManSD, не могу помочь, не так много времени. Читай литературу, разбирайся сам по-тихоньку, всё ведь не всегда однозначно, чтобы 100%-ый рецепт выписать. Научившись трассировать программы по шагам, смотреть дамп и состояние переменных, легко сможешь определять то, что тебе нужно. А иначе вопросы будут постоянно.
Quote:третий - если игрок нажал кнопку отмены.
ищешь обработчик нажатий кнопок в диалоге. В конкретно данном случае искать легко - через бряк на 4F6C00 (показ сообщения). Кнопка с номером 30721 (дес.) - кнопка закрытия диалога.
Номер получен путем опытов или интуитивно (кнопка ОК в CM:I - 30720)?
Правильно ли я понял по поводу дефа той или иной кнопки, что данные располагаются в общем и целом примерно так (жирным выделена строка, к которой прихожу по поиску дефа):
Не мог бы кто-нибудь объяснить суть команд, стыдливо прикрытых знаками "???"? Я пробовал поиграться со значением, но вроде ничего не изменилось.
Осталось теперь понять, как от всего этого великолепия выйти к моменту создания самого диалога.
(07.09.2010 03:10)GhostManSD Wrote: [ -> ]Не мог бы кто-нибудь объяснить суть команд, стыдливо прикрытых знаками "???"?
там может быть адрес обработчика нажатия (4 байта)
Там вроде какие-то маленькие значения в духе 20, 40, 1, 2, etc. Некоторые интересные для меня адреса я нашел в call functions, ставя по очереди на них бряки:
1. Нажатие в окне найма "нанять" или "отмена". Действует почему-то лишь на экране города, в жилище действует лишь "отмена". Не там ищу?
2. Нажатие при заходе в жилище кнопки "ОК" при вопросе "хотите ли вы нанять...?".
3. Адрес перед высвечиванием диалога.

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