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


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

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

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

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

Сообщение RoseKavalier » 13 июн 2019, 17:36

You should use #include "<relative path>/H3API.h".
Example

Including individual files should not work, except maybe H3Base.
Вернуться к началу

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

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

Сообщение as239 » 13 июн 2019, 18:18

Added #include "../Headers/H3API.h"

Commented //#include "patcher_x86.hpp" in "homm3.h"
 
Изображение


Still having errors
 
Изображение
Последний раз редактировалось as239 13 июн 2019, 18:35, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение RoseKavalier » 13 июн 2019, 18:26

Try making new *.cpp and *.h files where you only include H3API, no homm3.h.
You are probably getting collisions.

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

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

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

Сообщение as239 » 13 июн 2019, 18:34

Yes, pure project haven't problems.

So i need to refuse from "homm3.h"?
Its the big problem for me, i have 102 errors without it.
Вернуться к началу

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

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

Сообщение RoseKavalier » 13 июн 2019, 18:48

No, you just need to keep both header sets separated within your project.

Create two new files:
"Test.cpp" (or whichever name you want)
"Test.h"

In "Test.h"

Код: Выделить всё
#pragma once
// this line is maybe not needed, uncertain!
#include "<relative path>/patcher_x86.hpp"

void Test_init(PatcherInstance *pi);


In "Test.cpp"
Код: Выделить всё
#include "<relative path>/H3API.h"

_LHF_(TestFunction)
{
// you can use H3API in this file with no collision from homm3.h
return EXEC_DEFAULT;
}

void Test_init(PatcherInstance *pi)
{
// add all your hooks here
// pi->WriteLoHook(0x12345678, TestFunction);
}


In "dllmain.cpp", add these 2 lines:
Код: Выделить всё
// near top
#include "Test.h"

// in DllMain()
// this will load all H3API hooks, without collisions as the definitions should be kept separately
Test_init(_PI);


You can add other functions in Test.cpp and Test.h to be used from dllmain.cpp, so long as you don't mix structures from the headers.
Вернуться к началу

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

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

Сообщение as239 » 14 июн 2019, 07:28

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.
Последний раз редактировалось as239 14 июн 2019, 12:32, всего редактировалось 4 раз(а).
Вернуться к началу

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

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

Сообщение as239 » 14 июн 2019, 10:18

Хотел бы попросить помощи в решении следующих вопросов:
1. Как получить значение флага "HW_rules"?
 
Изображение


2. Какая функция возвращает HP юнита, чтобы в ней можно было увеличить НP на произвольное значение?

3. Как активировать произвольного героя?
Пробывал различные варианты - герой на панели активируются, но полоска MP пропадает и как будто идет от старого героя. Нужно что-то еще обновить.

Вариант 1:
Код: Выделить всё
   _Player_ *me = o_GameMgr->GetMe();
   me->selected_hero_id = me->heroes_ids[0];
   o_AdvMgr->FullUpdate(true);


Вариант 2:
Код: Выделить всё
        _Player_ *me = o_GameMgr->GetMe();
         int a1 = 0;
         o_AdvMgr_ActivateHero( o_AdvMgr, me->heroes_ids[0], a1, a1, a1 );//Не понимаю что здесь должно быть в параметрах а1,а2,а3
Последний раз редактировалось as239 14 июн 2019, 12:41, всего редактировалось 1 раз.
Вернуться к началу

offlineАватара пользователя
Catastrophe  
имя: Alex
Посвященный
Посвященный
 
Сообщения: 88
Зарегистрирован: 07 мар 2019, 11:50
Пол: Мужчина
Поблагодарили: 22 раз.

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

Сообщение Catastrophe » 14 июн 2019, 12:03

Как можно дать в бою бродячим монстрам какой-нибудь фиксированный бонус? + некий процент к атаке там, защите, урону, хп, либо просто + мораль/удача...
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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, 13:52

Попробуйте так:
Код: Выделить всё
o_AdvMgr_ActivateHero(o_AdvMgr, me->heroes_ids[0], 0, 0, 1);

Параметры a3, a4 и a5 - это флаги (0 или 1). При установленном a5 перерисовывается правая панелька (миникарта, список героев, статусное окно). Скорее всего, остальные тоже связаны с перерисовкой. Например, когда активным становится герой ИИ эта функция вызывается с установленным флагом a3.
Вернуться к началу

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

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

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

AlexSpl писал(а):

Попробуйте так:
Код: Выделить всё
o_AdvMgr_ActivateHero(o_AdvMgr, me->heroes_ids[0], 0, 0, 1);

Параметры a3, a4 и a5 - это флаги (0 или 1). При установленном a5 перерисовывается правая панелька (миникарта, список героев, статусное окно). Скорее всего, остальные тоже связаны с перерисовкой. Например, когда активным становится герой ИИ эта функция вызывается с установленным флагом a3.


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

Пред.След.

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

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

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