Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 05 авг 2021, 08:09

Хорошо, а получилось ли отыскать среди этих функций адрес для хука на вывод статусную строку?

Изображение

Можно часть, которые точно не подойдут отбросить, а остальные перебрать.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 05 авг 2021, 08:11

Хороший кандидат - OnMouseMove. Но этот метод может просто очищать статусную строку, когда курсор не над элементами с хинтом. Посмотрю чуть позже.

Можно ещё брейкпоинт на текстовый буфер поставить, если вывод в статусную строку идёт через него.

* * *
Нашёл. Попробуете по аналогии с предыдущим примером сделать?

Изображение
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 05 авг 2021, 08:52

Попробовал поставить хук по адресу 0x643C4C вот так:
Код: Выделить всё
int __stdcall showInfoButton(LoHook* h, HookContext* c)
{
   if (c->esi == 0xD)
   {
      string str = *(char**)(c->esi * 8 + 0x6A74C4);
      str = str + "test";
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x643C4C, showInfoButton);


После открытия окна с существами идет вылет. Но здесь я не уверен, что нужно использовать esi. Да и оригинальное сообщение из статусной строки должно получаться по идее иначе.

Кстати, когда апгрейд стека существ возможен, то при наведении на кнопку выводится оригинальное сообщение "Upgrade Unit" или "Улучшить" (в русской версии). А вот когда кнопка неактивна (недостаточно ресурсов), то при наведении на кнопку апгрейда курсора мыши в статусной строке пусто, то есть в таком случае оригинальное сообщение не выводится (а вот в HotA выводится в любом случае не зависимо от состояния кнопки).
Последний раз редактировалось Rolex 05 авг 2021, 08:56, всего редактировалось 2 раз(а).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 05 авг 2021, 08:53

А Вы ставьте на 0x5F5320 (на картинке адрес указан).

Цитата:
Но здесь я не уверен, что нужно использовать esi

Здесь мы работаем через edi, а индекс - в eax.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 05 авг 2021, 08:57

А оригинальное сообщение статусной строки, получаем так же?
*(char**)(c->edi * 8 + 0x6A74C4)
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 05 авг 2021, 08:59

Вы можете посмотреть на инструкцию, подсвеченную красным? Где там esi и 0x6A74C4? Я же говорю: попробуйте сделать по аналогии, а не скопировать предыдущий код :smile1:
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 05 авг 2021, 09:09

Вроде, так:
Код: Выделить всё
*(char**)(c->eax * 8 + 0x6A74C0);


Хотя на предыдущем скрине было:

mov esi, adress[esi*8]
Здесь же:
mov edi, adress[eax*8]

То есть там в обеих случаях esi, а здесь edi и eax.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 05 авг 2021, 09:11

Да, теперь оригинальную строку получаете правильно :smile20:

Цитата:
То есть там в обеих случаях esi, а здесь edi и eax.


В команде mov a, b a - это приёмник, т.е. mov a, b <=> a = b; В квадратных скобках - индекс, а 0x6... - это адрес таблицы с хинтами.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 05 авг 2021, 09:18

Правда толку мало. test к оригинальному сообщению из статусной строки не добавляется.
Код: Выделить всё
int __stdcall showInfoButton(LoHook* h, HookContext* c)
{
   if (c->edi == 0xD)
   {
      string str = *(char**)(c->eax * 8 + 0x6A74C0);
      str = str + "test";

      sprintf(o_TextBuffer, "%s", str.c_str());
      c->esi = (int)o_TextBuffer;
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x5F5320, showInfoButton);
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 05 авг 2021, 09:21

Это потому, что индекс кнопки теперь не в edi, а в eax. А в edi - наша строка.

Цитата:
c->esi = (int)o_TextBuffer;

А esi вообще на картинке нет. Ну, и не забудьте NO_EXEC_DEFAULT. Можно без адреса возврата: мы джампимся на следующую команду. Если что, нам нужно туда, куда ведёт стрелочка (адрес нижнего блока).
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron