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


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

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

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

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

Сообщение RoseKavalier » 24 июн 2019, 16:21

@as239
I know very little about multiplayer as I've never modded for it.
I would go with the assumption that the hook you are looking at is not active when player's turn is not active and try to find another hook location.

@AlexSpl
centered hero
SetMouseCursor() has listed enums beforehand.

I wish I could help with 1) 2) but I fail to grasp the issue, translator failure((
Вернуться к началу

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

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

Сообщение as239 » 24 июн 2019, 16:46

Цитата:
I would go with the assumption that the hook you are looking at is not active when player's turn is not active and try to find another hook location.

Hook is active, problem with it:
Код: Выделить всё
 H3TileMovement *mvmt = P_MovementMgr->GetMovementInfo(mixedDestination);

becouse it is crash withot this string:
Код: Выделить всё
      if (!mvmt) return EXEC_DEFAULT;
Вернуться к началу

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 » 24 июн 2019, 16:49

2RoseKavalier: We are looking for a way to make cursors behave just like in HotA when you press Shift key.
Вернуться к началу

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

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

Сообщение RoseKavalier » 24 июн 2019, 16:59

@AlexSpl

When hovering with shift
>>0x40E9DE
>>c->eax = 2; // AMC_Hero

When mouse is staying put, simply copy the instructions from before.

@as239
Uh. The only reason where 0x42ECC0 (getTileMovement) can return 0 is if mapSquares is not defined.
I'd need to try hotseat to figure it out, it could be this field needs to be re-initiated at end of turn.
Вернуться к началу

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 » 24 июн 2019, 17:07

Цитата:
When hovering with shift
>>0x40E9DE
>>c->eax = 2; // AMC_Hero

Yes, this is the idea. But how to change the cursor immediately when it's already over a hero? Also, it works for "meeting" cursor (8) only, I guess?

My idea is to set ecx = -1 here: 40E495h, thus imitating that there are no active heroes (like you clicked on town, for example). But the problem is that the cursor doesn't update immediately after you pressed Shift key. sub_0040E2C0 is only called when mouse coordinates are changed.

 Первая попытка
Код: Выделить всё
#include "pch.h"
#include "..\HotA\homm3.h"

Patcher* _P;
PatcherInstance* _PI;
static _bool_ plugin_On = 0;

int __stdcall checkShift(LoHook* h, HookContext* c)
{
    if ( GetAsyncKeyState(VK_SHIFT) & 0x8000 ) {
        c->return_address = 0x40A985;
        return NO_EXEC_DEFAULT;
    }

    return EXEC_DEFAULT;
}

int __stdcall changeCursor(LoHook* h, HookContext* c)
{
    if (GetAsyncKeyState(VK_SHIFT) & 0x8000) {
        c->ecx = -1;
    }
   
    return EXEC_DEFAULT;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    if (DLL_PROCESS_ATTACH == ul_reason_for_call)
    {
        if (!plugin_On)
        {
            plugin_On = 1;
            _P = GetPatcher();
            _PI = _P->CreateInstance((char*)"HD.Plugin.ShiftClick");

            _PI->WriteLoHook(0x40A7C7, checkShift);
            _PI->WriteLoHook(0x40E495, changeCursor);
        }
    }

    return TRUE;
}

Дополнительным хуком можно чуть подправить положение: достаточно, чтобы курсор сместился всего на один пиксель, а не на целую клетку, но его у меня под рукой нет. Всё равно существуют две описанные выше проблемы, так что всё равно. Нужно подходить к этой задаче серьёзней :smile1:
Вернуться к началу

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

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

Сообщение RoseKavalier » 24 июн 2019, 19:27

Вернуться к началу

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

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

Сообщение as239 » 26 июн 2019, 12:35

It works! Thaks!
The only problem i having now - it's ALT-movements.
Вернуться к началу

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

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

Сообщение as239 » 01 июл 2019, 07:31

А как вывести свой настроечный флаг на какую либо форму?
В идеале нужно на эту форму:
 
Изображение
Вернуться к началу

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

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

Сообщение as239 » 04 июл 2019, 07:11

Цитата:
А как вывести свой настроечный флаг на какую либо форму?

Очень нужна помощь по этому вопросу.
Вернуться к началу

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

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

Сообщение RoseKavalier » 04 июл 2019, 12:39

You're looking to make your own dialog or modify that one?

The former is simple enough, the latter needs to be done with needles.
Вернуться к началу

Пред.След.

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

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

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

cron