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


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

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

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

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

Сообщение as239 » 15 фев 2019, 18:43

AlexSpl писал(а):

Короче, самый простой способ проверить, что не так: уберите весь код в хайхуке, кроме вывода диалога:

Код: Выделить всё
sprintf(o_TextBuffer, "%s", "Test");
b_MsgBox(o_TextBuffer, 1);

return CALL_2(int, __thiscall, h->GetDefaultFunc(), advManager, a2);


Увидите ли Вы диалог с текстом "Test"?


Да, так работает.
Вернуться к началу

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 » 15 фев 2019, 18:46

На разных машинах?

А так не работает:

Код: Выделить всё
   _GameMap_* Map = &o_GameMgr->Map;
   _MapItem_* MapItem;

   int Count = 0;
   
   for (int z = 0; z <= Map->has_underground; ++z)
   {
      for (int y = 0; y < o_MapHeight; ++y)
      {
         for (int x = 0; x < o_MapWidth; ++x)
         {
            MapItem = Map->GetItem(x, y, z);
      
            if ( MapItem->GetReal__object_type() == 54 ) ++Count;
         }
      }
   }

   sprintf(o_TextBuffer, "Monsters: %d", Count);
   b_MsgBox(o_TextBuffer, 1);

   return CALL_2(int, __thiscall, h->GetDefaultFunc(), advManager, a2);
Вернуться к началу

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

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

Сообщение as239 » 15 фев 2019, 18:50

AlexSpl писал(а):

На разных машинах?

А так не работает:

Код: Выделить всё
     _GameMap_* Map = &o_GameMgr->Map;
   _MapItem_* MapItem;

   int Count = 0;
   
   for (int z = 0; z <= Map->has_underground; ++z)
   {
      for (int y = 0; y < o_MapHeight; ++y)
      {
         for (int x = 0; x < o_MapWidth; ++x)
         {
            MapItem = Map->GetItem(x, y, z);
      
            if ( MapItem->GetReal__object_type() == 54 ) ++Count;
         }
      }
   }

   sprintf(o_TextBuffer, "Monsters: %d", Count);
   b_MsgBox(o_TextBuffer, 1);

   return CALL_2(int, __thiscall, h->GetDefaultFunc(), advManager, a2);


Так сообщение выдается но в нем 0.
Вот моя структура MapItem:


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

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 » 15 фев 2019, 19:10

Можете скинуть Вашу dll? Я посмотрю, в чём дело.

Как вариант, у вас выравнивание членов структур (Struct Member Alignment) не установлено в 1 байт.

* * *
Нашёл свой старый пост:
Цитата:
Попробовал потестировать плагин на виртуалках. На виртуалках Windows 7 и Windows Server 2008 R2 плагин вообще не работает (даже после отключения DEP). На Windows 10 всё OK. Надо теперь вторую Windows 10 поставить и проверить сетевую игру.


И правда, у меня ни один плагин не работает на виртуальных машинах Windows 7 и Windows Server 2008 R2. Ещё вспомнил, что я тогда тестил плагин Disguise из-за этого на виртуалках с Win10. Там работало. Без понятия почему так :smile5:

Вот сейчас перепроверил. Да, на виртуалке с Windows 10 плагины работают, на 7-ке и 2008 R2 - нет.
Вернуться к началу

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

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

Сообщение as239 » 16 фев 2019, 05:17

Цитата:
Как вариант, у вас выравнивание членов структур (Struct Member Alignment) не установлено в 1 байт.

Так и есть, поставил в 1 байт, теперь код работает.
Вернуться к началу

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

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

Сообщение RoseKavalier » 16 фев 2019, 06:40

Have you tried vXYZ_xp platform toolset and Multi-Threaded \MT runtime library (Code Generation option) ? I got these suggestions from berserker for compatibility. Bigger DLL but better compatibility :smile24:

I talked a bit with Ben80 who had been working on code for misplaced creatures - maybe you can ask him if he made progress.

To avoid the need to correct drawing, you can always try hook before the game draws the objects. I'm currently travelling so unable to verify but take a look around 0x4FDF6B, this is a loop to draw items.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

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

Сообщение Ben80 » 16 фев 2019, 08:23

RoseKavalier писал(а):

Have you tried vXYZ_xp platform toolset and Multi-Threaded \MT runtime library (Code Generation option) ? I got these suggestions from berserker for compatibility. Bigger DLL but better compatibility :smile24:

I talked a bit with Ben80 who had been working on code for misplaced creatures - maybe you can ask him if he made progress.

To avoid the need to correct drawing, you can always try hook before the game draws the objects. I'm currently travelling so unable to verify but take a look around 0x4FDF6B, this is a loop to draw items.


Since we have talked about misplaced creatures, I did not work at this. I'm not sure it is optimal approach. Ideally one should find code where RMG make something wrong instead of post-processing of map...

However I have code which (in post-processing mode) can find most of misplaced creatures (not necessarily on the roads) and write corresponding coordinates to log file. I can share my code with some skilled modder (for example, AlexSpl), if he need it.
This have relation to discussed topic viewtopic.php?f=56&t=532&start=6

Unfortunately, I don't have enough perseverance for big modding tasks. Mainly I'm making something small to see results of my work quickly. Moreover, at this moment I prefer simply play in Heroes 3 rather than do modding. In Multi-player, RoseKavalier, my apologizes.
Still I hope someday I will produce some complex things for Heroes 3.
Вернуться к началу

offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

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

Сообщение Ben80 » 16 фев 2019, 09:20

Possibly, MonsterGeneration stage is ideal place for correction of misplaced creatures. There one can get comprehensive info - about zones to be connected, zones coordinates and so on.
One can use my post-processing algorithms in such place. Of course, those algorithms should be modified.

BTW, RoseKavalier, can you give some info about HotA approach to misplaced creatures ?

Here Gus Smedstat presentation about RMG.
smedstad.ppt
(253.5 КБ) Скачиваний: 301
Вернуться к началу

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

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

Сообщение RoseKavalier » 18 фев 2019, 14:28

I've seen this document before, it is nice but I have no clue how this was coded! Obviously, correcting monster position during RMG would be best. Problem is finding correct spot.
I also have 0 idea what HotA have done (not looked at HotA since HDmod removed HoTa plugins), I spent about 15 minutes total in RMG code when we looked at Market of Time so it is a complete mystery to me still!

@AlexSpl
My IDA is v5.5. I have set and removed the HO_IGNORE_OVERLAPS flag some time ago with no success... maybe my version is a bit old and the problem?
Вернуться к началу

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 » 18 фев 2019, 17:11

Цитата:
My IDA is v5.5. I have set and removed the HO_IGNORE_OVERLAPS flag some time ago with no success... maybe my version is a bit old and the problem?

Yes, maybe it's a bug. The latest version I know of is 7.0, I've seen it on df2 somewhere.

Цитата:
I'm currently travelling so unable to verify but take a look around 0x4FDF6B, this is a loop to draw items.

It looks like a good place to hook. My idea is to find a function which initializes "draw" fields of the _MapItem_ structure. Then we can be sure that they will be initialized correctly, and can safely shift monsters.
Вернуться к началу

Пред.След.

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

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

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