Объявления
Поздравляем
Roman2211


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
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 » 14 июн 2019, 14:10

Наверно, нужно смотреть в сторону MouseClick_AdvMap(), MouseClick_AdvMap2(), ProcessAdvMapKeyPress(). Хайхук и в нём проверять, зажат ли шифт и что находится под курсором. Но, может быть, можно и проще.

Я думаю, хороший вариант - поставить хук на функцию advMan_ProcessMapClick(), а статус шифта получать через функцию API GetKeyState().
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 14 июн 2019, 15:14

as239 писал(а):

1. Trying to show movement cost:
Код: Выделить всё
_LHF_(MapHintCoordinates)
{
      H3Position coord = P_AdventureMgr->mousePosition;
      H3AdventureManager *adv = P_AdventureMgr;
      UINT32 mixedDestination = adv->mousePosition.Mixed();
      adv->MovementCalculations(mixedDestination);
      H3TileMovement *mvmt = P_MovementMgr->GetMovementInfo(mixedDestination);
      if (!mvmt->access.accessible)
         return EXEC_DEFAULT;;
      UINT16 cost = mvmt->movementCost;
      sprintf(h3_TextBuffer, "%s Movements: %d", h3_TextBuffer , cost);
      //sprintf(h3_TextBuffer, "%s {~%s}(%d, %d, %d)}", h3_TextBuffer, SODSP_COLOR.adventure_coordinates.String(), coord.x, coord.y, coord.z);
   return EXEC_DEFAULT;
}

But having crashes with sprintf.

2. What is analog of this:
Код: Выделить всё
   sprintf(o_TextBuffer, "Test");
   b_MsgBox(o_TextBuffer, 1);   


3. Can I ask "SP_SpellText"?
Extended spellbook description works fine!
I am only missing "SP_SpellText".

update:
3. Founded texts ini-files. Interesting how it could be done without text files, but with structures in the code.
At least I don't know how to get language settings.


1. Try working with a buffer then strcat() the buffer to h3_TextBuffer;

2. h3_MessageBox(text)
h3_MessageBoxChoice(text)
h3_MessageBoxRMB(text)

3. I simply grab the line off the .txt file.
See struct H3TextFile.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

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

Сообщение as239 » 14 июн 2019, 15:33

Цитата:
1. Try working with a buffer then strcat() the buffer to h3_TextBuffer;

Sorry didn't get what to do.
Вернуться к началу

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 » 14 июн 2019, 15:45

Не используйте текстовый буфер одновременно как приёмник и как источник.
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

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

Сообщение as239 » 14 июн 2019, 16:26

Tried this:
Код: Выделить всё
ostringstream oss;
oss<< cost;
strcat(h3_TextBuffer,oss.str().c_str());

But also having crashes.
Вернуться к началу

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 » 14 июн 2019, 16:36

Вот тут (40A7D8h) игра делает героя активным при клике на нём левой клавишей мыши, когда ни один герой не активен (выбран город, например). Отсюда можно и начать: выше игра проверяет, активен ли хотя бы какой-нибудь герой. Если при зажатии шифта сымитировать, что ни один герой не активен, то игра позволит сделать клик на любом герое, после чего тот станет активным.

SetActiveHero() в этом блоке: 40A9DCh (до этого игра делает дополнительные проверки: наш герой или не наш, остались у него мувы или нет, что только нам на руку).
Последний раз редактировалось AlexSpl 14 июн 2019, 16:47, всего редактировалось 1 раз.
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 14 июн 2019, 16:39

Код: Выделить всё
char buffer[32];
sprintf(buffer, "Movements: %d", cost);
strcat(h3_TextBuffer, buffer);
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

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

Сообщение as239 » 14 июн 2019, 16:49

RoseKavalier писал(а):

Код: Выделить всё
char buffer[32];
sprintf(buffer, "Movements: %d", cost);
strcat(h3_TextBuffer, buffer);


Crashes anyway.
I don't know can it be associated with it:
 
Изображение
Вернуться к началу

offlineas239  
имя: Анатолий
Ветеран
Ветеран
 
Сообщения: 527
Зарегистрирован: 29 дек 2018, 14:17
Пол: Мужчина
Поблагодарили: 38 раз.

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

Сообщение as239 » 14 июн 2019, 16:56

Цитата:
Если при зажатии шифта сымитировать, что ни один герой не активен, то игра позволит сделать клик на любом герое, после чего тот станет активным.

Да именно это и нужно..
Вернуться к началу

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 » 14 июн 2019, 17:03

Тогда, собственно, можно начинать писать хук.
Вернуться к началу

Пред.След.

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

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

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