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


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

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

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

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

Сообщение as239 » 22 янв 2020, 15:41

Цитата:
item ids 2000-2007 if memory serves.

And what is the address for hook?
I need to use Dlg_GetClickedItemId? or something else?

Цитата:
What for?

To fix one more bug with Shift+LCM on hero:
1. Activate any unit slot
2. Hold Shift
3. Click any empty army slot.
4. Choose any number at army division dialog.

Hm, latest SOD SP version doesn't have this problem.
I tried this
Код: Выделить всё
if (msg->KeyPressed() == H3VK_SHIFT && !shiftPressed && P_Executive->last_mgr == P_AdventureMgr && P_AdventureMgr->dlg->IsTopDialog())

But it doesn't help, also I have a problem with this code, after heroes exchange in town.
Cann't see another changes from my code.
Вернуться к началу

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

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

Сообщение RoseKavalier » 22 янв 2020, 16:36

Oh, I noticed this a while back and corrected it in H3Plugins but never pushed the fix until now.
There is no check after a dialog is started whether Shift was 'unpressed', this bug happens with all dialogs, not just creature exchange.
Вернуться к началу

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

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

Сообщение as239 » 09 фев 2020, 09:17

Сделал чтобы кнопка удалить была доступна для героя в городе, при открытии с карты приключений.
Код: Выделить всё
_PI->WriteByte(0x4E1B98, 0x74);

Но не уверен в правильности решения.

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

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

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

Сообщение RoseKavalier » 09 фев 2020, 14:19

Make Dismiss button available everywhere (except Tavern, right-click anyway)
Код: Выделить всё
pi->WriteWord(0x4E1E80, 0x9090);

Unfortunately doesn't work too well from town, but it's a start...

Good work on RMG! Unfortunately you seem to know more about those issues than me at this time and I still don't have time to invest into RMG.
Вернуться к началу

offlineigrik  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 14 сен 2017, 12:35
Пол: Не указан
Поблагодарили: 84 раз.

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

Сообщение igrik » 10 фев 2020, 09:47

as239 писал(а):

Сделал чтобы кнопка удалить была доступна для героя в городе, при открытии с карты приключений.
Код: Выделить всё
_PI->WriteByte(0x4E1B98, 0x74);

Но не уверен в правильности решения.

Это не верное решение.
Верное -> смотри по этому адресу 0x4E1CE7

По поводу города - три вызова в районе этого адреса 0x5D52CA. Второй параметр в каждом вызове сделай 0 (оригинал = 1)
А потом запрещай апдейтить диалог карты приключений тут 0x04E1C3A
Вернуться к началу

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

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

Сообщение as239 » 16 фев 2020, 07:12

Цитата:
Это не верное решение.
Верное -> смотри по этому адресу 0x4E1CE7

По поводу города - три вызова в районе этого адреса 0x5D52CA. Второй параметр в каждом вызове сделай 0 (оригинал = 1)
А потом запрещай апдейтить диалог карты приключений тут 0x04E1C3A

Сделал так:
Код: Выделить всё
   _PI->WriteByte(0x4E1CE8, 0xEB);
   _PI->WriteByte(0x5D52C0, 0x00);
   _PI->WriteByte(0x5D5314, 0x00);
   _PI->WriteByte(0x4E1C3A, 0xEB);

Но с удалением в городе все равно проблема - после удаления героя, остается его иконка, видимо как-то нужно еще обновлять слоты героя в городе?

Врата ада в любой город, тоже почему то не работают:
Код: Выделить всё
   _PI->WriteHexPatch(0x5C2AD5,"EB 07");
   _PI->WriteHexPatch(0x5D892C, "90 90 90 90 90 90");
   _PI->WriteHexPatch(0x5D894C, "90 90 90 90");
Вернуться к началу

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

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

Сообщение as239 » 20 фев 2020, 08:51

А как узнать есть в ГМ города выбранное заклинание?

Смотрю: "P_TownMgr->town->spells"
// * +44
// * which spells are available in mage guild
INT32 spells[5][6];

Код: Выделить всё
   for (int i = 0; i < 6; i++)
   {
      int SpellID = P_TownMgr->town->spells[4][i];
   }

Хочу проверить отстроено ли заклинание 5-го уровня.
Но в SpellID вижу ID - не отстроенных заклинаний, и странные значения, например 1599558.
Вернуться к началу

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

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

Сообщение RoseKavalier » 20 фев 2020, 13:55

There may be some garbage in the unused slots, because you have at most this many spells per level:
Код: Выделить всё
6 (5) lvl 1
5 (4) lvl 2
4 (3) lvl 3
3 (2) lvl 4
2 (1) lvl 5


In general, number of spells by level can be obtained through
6 - (level) + (Library Built)

You can force redraw of town portraits, based on igrik.
Maybe the H3Town garrison/visiting hero fields need to be set to -1.
Вернуться к началу

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

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

Сообщение as239 » 21 фев 2020, 13:10

I would like to ask some more questions.

1. It would be nice, also to show killscount from METEOR_SHOWER, FIREBALL, INFERNO, etc, in the battle.
I can do it myself, i just need to know how to get the list of selected H3CombatMonster by spell.

2. Do I understand correctly that all spells of all GM levels in each city are generated at the start of the game, not at the moment building? Where's the place?

3. I found that HW-Rules calls "Town_IsStructureBuilt_4305A0" to check maximum GM level of the town.
I did that HiHook:
Код: Выделить всё
signed int __stdcall Town_IsStructureBuilt(HiHook* hook, int this1, int a2, char a3){
        //a2 = building ID
   if ((a2 == 2 || a2 == 3 || a2 == 4) && (a3 == 1))
   {
      return 1;
   }
   return THISCALL_3(signed int, hook->GetDefaultFunc(), this1, a2, a3);
}

And rebuild from any level works fine, without dll parsing.
Could there be any original calls to this function that will now works wrong?
I do not remember such.

4. If dll configuration is Debug. There is a mistake after heroes meet in town:
 
Изображение

These calls of town screen update causes that:
Код: Выделить всё
          CALL_1(void, __thiscall, 0x5D5930, o_TownMgr);
            CALL_1(void, __thiscall, 0x5D5810, o_TownMgr);

Can it be fixed?

5. Last Fresh mod versions don't work, on some computers, without this install Visual C++ Redistributable Packages for Visual Studio 2013:
https://www.microsoft.com/ru-RU/downloa ... x?id=40784
Moreover, Fresh mod 1,2 works without it.
Can it be fixed from my side?
Вернуться к началу

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

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

Сообщение as239 » 21 фев 2020, 14:39

No need to answer q1.
Did it, and its enough - just point unit u need, and u will see kills count:
Код: Выделить всё
         switch (spell_id)
         {
         case H3Spell::CHAIN_LIGHTNING:
         case H3Spell::METEOR_SHOWER:
         case H3Spell::INFERNO:
         case H3Spell::FIREBALL:
         case H3Spell::FROST_RING:

         case H3Spell::ICE_BOLT:
         case H3Spell::IMPLOSION:

But creature count from AA resurrection, and Pitlord demonation will be useful.
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: Yandex [bot] и гости: 6