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


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

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

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

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

Сообщение as239 » 15 июн 2019, 04:32

It's work, but in every mouse movement:
Код: Выделить всё
char buffer[32];
sprintf(buffer, "mixedDestination: %d", mixedDestination);
strcat(h3_TextBuffer, buffer);

I didn't see condition on pressed Alt, maybe this is the problem?
Последний раз редактировалось as239 15 июн 2019, 04:58, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение as239 » 15 июн 2019, 04:53

@AlexSpl
Не понимаю как сымитировать отсутствие активного героя.
И естественно не знаю как отследить нажатие шифта.
Вернуться к началу

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

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

Сообщение RoseKavalier » 15 июн 2019, 14:39

@as239
It seems the issue is in the headers, let me get back to you. :smile5:\\

EDIT
See this and make this correction.
I will update everything in a little while, I have one more thing I want to do before making new releases.
Последний раз редактировалось RoseKavalier 15 июн 2019, 15:25, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение Ben80 » 15 июн 2019, 14:41

I have write code. It works, but lead to some instability of HD Mod ))
I have feeling that I'm wrong somewhere.

Who can propose better code ?

 
Код: Выделить всё
int __stdcall hideTemplateName(LoHook* h, HookContext* c)
{   
    _HString_* addr = (_HString_*)(*(int*)0x699538 + 0x1FB4C + 4);

   char* pChar = addr->c_str;
   std::string str;
   if(pChar)
   {
   std::string str2(pChar);
    str = str2;
      if(str.find("Random seed") != -1)
      {
         int x1 = str.find("Template");
         int x2 = str.find("Random seed");
         str.erase(x1, x2 - x1);
         addr->c_str = new char[str.length() + 1];
         strcpy(addr->c_str, str.c_str());
      }
   }

   return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4C018D, hideTemplateName);


Problem in strings:
addr->c_str = new char[str.length() + 1];
strcpy(addr->c_str, str.c_str());

But it is possible, code is correct but I should choose better place for hook.
Вернуться к началу

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

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

Сообщение Ben80 » 15 июн 2019, 15:26

Код: Выделить всё
   std::string str;
   if(pChar)
   {
   std::string str2(pChar);
    str = str2;


Of course, should be
Код: Выделить всё
   std::string str(pChar);
   if(pChar)
   {


but solution of problem is other.
Вернуться к началу

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

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

Сообщение RoseKavalier » 15 июн 2019, 15:32

@Ben80
It's probably easier to write with H3API, example remove "Random Seed" and "Template" words
Код: Выделить всё
void aaa()
{
   H3String *desc = &P_Main->mapDescription;
   if (desc->String() && desc->Remove("Random seed"))
      desc->Remove("Template");   
}


But I'm not entirely sure what you're trying to do...

Added H3String::FindFirst(substring), returns position if found.
Вернуться к началу

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

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

Сообщение Ben80 » 15 июн 2019, 15:49

I would like to finish my mod as soon as possible and then help you a bit - to enumerate structures (shifts) in your SDK.
Вернуться к началу

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

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

Сообщение as239 » 15 июн 2019, 16:11

Цитата:
See this and make this correction.

It works!
The only problem now - it works without "Alt" pressing.
Вернуться к началу

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, 16:40

Shift + Click на герое делает его активным (вариант без изменения курсора):

Код: Выделить всё
#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;
}

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);
        }
    }

    return TRUE;
}
Вернуться к началу

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

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

Сообщение as239 » 15 июн 2019, 16:52

Цитата:
Shift + Click на герое делает его активным (вариант без изменения курсора):

Шикарно! Работает! Если еще найти изменение курсора вообще будет супер.
Как вы это делаете я не понимаю :)
Вернуться к началу

Пред.След.

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

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

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