Объявления

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

H3API by RoseKavalier

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

Re: H3API by RoseKavalier

Сообщение RoseKavalier » 11 мар 2021, 02:57

A while back I modified the way H3Dlg works because passing along a proc as argument is archaic, it now acts more like common C++ UI controls and is generally easier to work with. At some point I will make some overridable controls as well.
I don't know how up to date your api version is but here's an overview of how it now works:

H3Dlg now has its own virtual table where you simply override virtual functions to achieve what you need.

e.g.
Код: Выделить всё
struct MyDlg : H3Dlg
{
   MyDlg(int w, int h) : H3Dlg(w, h) {} // _H3API_ H3Dlg(int width, int height, int x = -1, int y = -1, BOOL statusBar = false, BOOL makeBackground = true, INT32 colorIndex = IntAt(0x69CCF4));

   int m_myValue;

   virtual BOOL OnCreate() override
        {
            m_myValue = 1234;
            return true; // continue running dialog, false to abort
        }
        virtual BOOL OnLeftClick(INT itemId, H3Msg& msg) override
        {
            if (itemId != m_myValue)
            { ...
                return false; // do not process further messages, skips DefaultProc()
            }
            return true; //  goes to DefaultProc()
        }
};


However if you wish to have complete control, you can override vDialogProc which is what provides all these handy overrideable functions in order to implement your own.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение igrik » 11 мар 2021, 16:37

After looking at your new headlines, I realized the reason for my mistake. Thanks. I solved the problem.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение as239 » 17 апр 2021, 06:54

Moving to the latest H3API - its a real pain :smile8:
Most of the problems are solved.
Besides that:
1. <P_NewGameDlg>, <CastDef()>:
 
Изображение

2. <Save>, <Load>:
 
Изображение

What should I do instead?

And a few clarifications, are these the correct fixes?
1. <H3Msg> create:
 
Изображение

2.<F_GetCursorPosition->H3POINT::GetCursorPosition>, <H3POINT->POINT>, it looks strange that SimulateMouseOver argument type is <POINT>, instead <H3POINT>:
 
Изображение


A small addition to the H3API:
<INT32> is better type for <H3RmgZoneGenerator._f_20> and <H3RmgZoneGenerator._f_24>, then <h3unk8 _f_20[4]>:
 
Изображение

Because <H3RmgZoneGenerator._f_20> is the X coordinate, and <H3RmgZoneGenerator._f_24> is the Y coordinate.
Последний раз редактировалось as239 17 апр 2021, 16:06, всего редактировалось 1 раз.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение RoseKavalier » 17 апр 2021, 11:59

I missed a few changes in the overview I guess :smile14:
1a- P_SelectScenarioDialog
1b- Cast<H3DlgDef>

2- H3GzFile instead of H3ZStream
z_stream is part of the class, but according to RTTI it was called TGzFile, so renamed closer to reality.

Extras
1 - yes that should do, the other fields are not used anyway.
2 - H3POINT and ::POINT are analogous. I changed it on my development api a while back but it's not yet live, you can do so in
Код: Выделить всё
include/h3api/H3Managers/H3AdventureManager.hpp
include/h3api/H3Managers/H3AdventureManager.cpp


Addition
Sure thing, just wondering the x/y of what? Since [10-18] already has x/y/z.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение as239 » 17 апр 2021, 16:05

Thanks!

But having one error:
 
Изображение


Addition.
It is the lower left vertex of the rectangle described around the zone:
 
Изображение
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение RoseKavalier » 17 апр 2021, 18:05

Two corrections for bitset (not ready to update the api):

\include\h3api\H3Containers\H3Bitset.hpp : 597
Код: Выделить всё
m_bits[i] = other.m_bits[i];


\include\h3api\H3Containers\H3Bitset.hpp : 611
Код: Выделить всё
if (m_bits[i] != other.m_bits[i])
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение as239 » 03 май 2021, 17:07

Is there an easy way to extend the original structure "H3rmgMapItem"?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 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)
Поблагодарили: 2161 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 03 май 2021, 17:34

Цитата:
Is there an easy way to extend the original structure "H3rmgMapItem"?

Если Вам не нужны новые поля, вы можете создать свой класс, наследующий H3rmgMapItem.
Вернуться к началу

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

Re: H3API by RoseKavalier

Сообщение as239 » 03 май 2021, 17:35

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

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 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)
Поблагодарили: 2161 раз.

Re: H3API by RoseKavalier

Сообщение AlexSpl » 03 май 2021, 17:44

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

char a1;
char unk0;
char unk1;
char unk2;

Здесь игра читает a1 как поле типа char, поэтому остальные три можно отдать под свои поля. Но если глобально, то придётся патчить код (те фрагменты, которые используют размер структуры, например, в операциях с указателями).
Вернуться к началу

Пред.След.

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

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

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