Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlinecatshy  
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 06 сен 2018, 12:32
Пол: Не указан
Поблагодарили: 0 раз.

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

Сообщение catshy » 02 апр 2019, 20:02

Hello everybody!

I have a question about save game function. I want to create mod for H3 Streaming where players and watchers they will be able to see game statistics. The most easy way for me is analyzing save game files, but on begin I need a function what can save the game for example every 10 seconds in defined path and file name.

Can anybody help me? :)
Вернуться к началу

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

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

Сообщение RoseKavalier » 03 апр 2019, 02:42

This will save to default game folder.
If you need more details, lmk.

Код: Выделить всё
#define CALL_6(return_type, call_type, address, a1, a2, a3, a4, a5, a6) ((return_type(call_type *)(int, int, int, int, int, int))(address))((int)(a1), (int)(a2), (int)(a3), (int)(a4), (int)(a5), (int)(a6))

void SaveGame(char* save_name) { CALL_6(void, __thiscall, 0x4BEB60, *(int*)0x699538, save_name, 1, 1, 1, 0); }
Вернуться к началу

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

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

Сообщение Ben80 » 03 апр 2019, 03:13

RoseKavalier писал(а):

This is my current disassembly at code you specified:
 
Изображение



It seems both sub_00541630 and sub_00542570 create zone blocks (guard of passage),
however sub_00541630 creates 1 monster, sub_00542570 creates 2 monsters.

:smile1: More precisely, sub_00541630 creates one monster at a time, inside loop in sub_00541630.

sub_00542570 is called only if sub_00541630 failed. It failed at some conditions (?):
Код: Выделить всё
  v65 = *(_DWORD *)(v5 + 20);
  if ( v8 != *(_DWORD *)(v5 + 24) )
    return 0;
  if ( *(_DWORD *)(a2 + 12) == 8 )
    return 0;
  if ( *(_DWORD *)(v5 + 12) == 8 )
    return 0;


and
Код: Выделить всё
if ( v13 == v12 || (a4 = (Mon2Way.Last - v13) / 12, !((Mon2Way.Last - v13) / 12)) )
  {
    delete((void *)v13);
    return 0;
  }
Вернуться к началу

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

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

Сообщение RoseKavalier » 03 апр 2019, 04:58

542570 has references to subterranean gate, it attempts to link zones using subterranean gates.
Monster generation is called twice, one for each end of subterranean gate.

Failed condition example of sub_00542570:
Изображение
The second condition you show is a check on whether the vector is populated.... if empty, failure.

i.e.
Cannot create a link between two zones with Subterranean gate
1- same Z level
2 - terrain is water (this condition is also used when linking through monoliths)

In other words, it seems like process to link 2 zones is (over simplified)
1 - try to link with regular path
2 - try to link with boat
3 - try to link with subterranean gate
4- try to link using monoliths

Here I forced sub_00541630 to always fail, and all zones are linked by monoliths or subterranean gates:
(no water)
 
Изображение


Now a random map with water, still forcing 541630 to fail
Shipyards are here, but 0 land connection.
 
Изображение


Finally another random map with water, but now I also force sub_541FC0 to fail
I can assure you there is 0 shipyard on this one)
... only linked by Subterranean gates and monoliths.
 
Изображение


If I force all three of these to fail, zones are linked only by monoliths.
 
Изображение
Вернуться к началу

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

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

Сообщение Ben80 » 03 апр 2019, 05:26

RoseKavalier писал(а):

Here I forced sub_00541630 to always fail, and all zones are linked by monoliths or subterranean gates:


You have solved bug with shifted guards )) exactly as in proposals of one multiplayer gamer. Of course, I have refused such solution.
But very interesting, thank you ! And very useful, of course. You have solved task of managing of preferable way to link zones.
Вернуться к началу

offlinecatshy  
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 06 сен 2018, 12:32
Пол: Не указан
Поблагодарили: 0 раз.

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

Сообщение catshy » 03 апр 2019, 08:26

RoseKavalier писал(а):

This will save to default game folder.
If you need more details, lmk.

Код: Выделить всё
#define CALL_6(return_type, call_type, address, a1, a2, a3, a4, a5, a6) ((return_type(call_type *)(int, int, int, int, int, int))(address))((int)(a1), (int)(a2), (int)(a3), (int)(a4), (int)(a5), (int)(a6))

void SaveGame(char* save_name) { CALL_6(void, __thiscall, 0x4BEB60, *(int*)0x699538, save_name, 1, 1, 1, 0); }


Hello, thanks for answer! :) Im a newbie in C/C++ - I know only the basics. I haven't problems analyzing the game's save code, but I can't help myself with the use of the function specified by you, can you help me with the appropriate implementation of this code? I need it for H3 + Hota.
Вернуться к началу

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

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

Сообщение Ben80 » 03 апр 2019, 11:28

catshy писал(а):

I need it for H3 + Hota.


HotA does not support plugins.
Вернуться к началу

offlinecatshy  
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 06 сен 2018, 12:32
Пол: Не указан
Поблагодарили: 0 раз.

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

Сообщение catshy » 03 апр 2019, 11:48

Ben80 писал(а):

catshy писал(а):

I need it for H3 + Hota.


HotA does not support plugins.



Hmm, I see... but maybe is way to do it using dll injection or something like this?
Вернуться к началу

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

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

Сообщение Ben80 » 03 апр 2019, 13:31

catshy писал(а):

Hmm, I see... but maybe is way to do it using dll injection or something like this?


Yes, it is possible with Dll injection. I have used AngelRun (customized by me) written by Berserker from http://wforum.heroes35.net/
You can ask him. He provided me source code (Delphi).

If you want, I can try to find it on my computer and send you.
Вернуться к началу

offlinecatshy  
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 06 сен 2018, 12:32
Пол: Не указан
Поблагодарили: 0 раз.

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

Сообщение catshy » 03 апр 2019, 14:37

Ben80 It would be great if you would share your code with me because the link you provided doesn't work.

Addresses for save game function in hota+hd mod will be this same (0x4BEB60 and 0x699538) as RoseKavalier wrote before?
Вернуться к началу

Пред.След.

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

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

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