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


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
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 » 16 окт 2020, 11:49

Немножко переделал плагин, чтобы можно было произвольно менять высоту текстового описания:

Код: Выделить всё
#define _CRT_SECURE_NO_WARNINGS

#include "stdafx.h"
#include "..\..\HotA\homm3.h"

Patcher* _P;
PatcherInstance* _PI;

static _bool_ plugin_On = 0;

_bool_ isRusLng;

int __stdcall Y_LoadAllTXTinGames(LoHook* h, HookContext* c)
{
   if (o_CreatureInfo[0].name_single[0] != 'P') {
      isRusLng = 1;
   }
   else {
      isRusLng = 0;
   }
   return EXEC_DEFAULT;
}

int c_neu_rmb_id;

int __stdcall c_get_neu_rmb(LoHook* h, HookContext* c)
{
   c_neu_rmb_id = c->esi;

   return EXEC_DEFAULT;
}

int __stdcall changeRMBInfoDescTextHeight(LoHook* h, HookContext* c)
{
    int c_neu_lv = o_pCreatureInfo[c_neu_rmb_id].level + 1;
    int c_neu_at = o_pCreatureInfo[c_neu_rmb_id].attack;
    int c_neu_df = o_pCreatureInfo[c_neu_rmb_id].defence;
    int c_neu_sp = o_pCreatureInfo[c_neu_rmb_id].speed;
    int c_neu_hp = o_pCreatureInfo[c_neu_rmb_id].hit_points;
    int c_neu_d1 = o_pCreatureInfo[c_neu_rmb_id].damage_min;
    int c_neu_d2 = o_pCreatureInfo[c_neu_rmb_id].damage_max;
    char* c_neu_ds = o_pCreatureInfo[c_neu_rmb_id].specification_description;

    if (isRusLng == 1)
    {
      sprintf(o_TextBuffer, "%s\n\nУровень: {%d}, Атака: {%d}, Защита: {%d},\nЗдоровье: {%d}, Урон: {%d}-{%d}, Скорость: {%d}.\n\n\n%s",
          o_TextBuffer, c_neu_lv, c_neu_at, c_neu_df, c_neu_hp, c_neu_d1, c_neu_d2, c_neu_sp, c_neu_ds);
    }
    else
    {
      sprintf(o_TextBuffer, "%s\n\nLevel: {%d}, Attack: {%d}, Defense: {%d},\nHealth: {%d}, Damage: {%d}-{%d}, Speed: {%d}.\n\n\n%s",
          o_TextBuffer, c_neu_lv, c_neu_at, c_neu_df, c_neu_hp, c_neu_d1, c_neu_d2, c_neu_sp, c_neu_ds);
    }
   
    CALL_12(_DlgStaticText_*, __thiscall, 0x5BC6A0, c->eax, 16, 100, 224, 120 /* Description text height */,
        o_TextBuffer, (const char*)"smalfont.fnt", 1, 1001, 1, 0, 8);

    c->return_address = 0x53003B;
    return NO_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("HD.Plugin.NewRMGDesc");

            // check language after loading all txt files
            _PI->WriteLoHook(0x4EDFFD, Y_LoadAllTXTinGames);

            // advanced rmb on neutrals
            _PI->WriteLoHook(0x52FFEC, c_get_neu_rmb);
            _PI->WriteLoHook(0x53000E, changeRMBInfoDescTextHeight);
            _PI->WriteByte(0x530170, 217); // private y pos
      }
   }

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

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

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

Сообщение Rolex » 16 окт 2020, 12:06

Проблема в том, что если описание не помещается в одну строку, то оно тупо обрезается и не переносится на следующую. Хотя место есть. Оригинальный код дает 2 строки под описание (со шрифтом от Хоты), а если его поднять и слепить с навыками, то 3. А нужно без слепливания 4-5.
Вернуться к началу

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 » 16 окт 2020, 12:08

А как с описанием Воров? Там три строки без переноса. А лучше скиньте используемый Вами шрифт, чтобы я сам проверил.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

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

Сообщение Rolex » 16 окт 2020, 12:08

AlexSpl писал(а):

А как с описанием Воров? Там три строки без переноса.

Там ужатый шрифт. От шрифта все сильно зависит.
Вернуться к началу

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 » 16 окт 2020, 12:10

У Вас что буквы наполовину обрезаются краем текстового поля? Если нет, то перенос работает, и Вам следует увеличить высоту текстового поля.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

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

Сообщение Rolex » 16 окт 2020, 12:21

Проверил. С ужатым шрифтом ОК. А вот с нормальным шрифтом SMALFONT.FNT из HotA, вот такая фигня.
 скрин
Изображение
Последний раз редактировалось Rolex 16 окт 2020, 12:24, всего редактировалось 1 раз.
Вернуться к началу

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 » 16 окт 2020, 12:22

Какую высоту поля с описанием Вы поставили? И почему такое большое расстояние между описанием и параметрами?

Может, Вам следует изменить также и координату Y поля с описанием. А также убрать ведущие "\n", если они присутствуют в описании.
Последний раз редактировалось AlexSpl 16 окт 2020, 12:27, всего редактировалось 1 раз.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

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

Сообщение Rolex » 16 окт 2020, 12:26

Я ничего не менял в вашем коде. Просто собрал и протестил. Да, расстояние между параметрами и описанием действительно очень большое. Должна быть одна строка.
Последний раз редактировалось Rolex 16 окт 2020, 18:02, всего редактировалось 1 раз.
Вернуться к началу

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 » 16 окт 2020, 12:28

Цитата:
Я ничего не менял в вашем коде. Просто собрал и простестил.

Так код идентичен коду igrik'а. Я его переписал, чтобы Вы смогли потестить высоты больше 127 :smile1:
Вернуться к началу

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 » 16 окт 2020, 12:32

Так... догнал, почему места не хватает. igrik кучу "\n" в конце строки с параметрами понаставил. Уберите лишние. Ещё можно поиграть с шириной текстового поля. В плагине её уменьшили со 110 до 100.

Куча "\n" - это один в каждой строке :smile1:
Вернуться к началу

Пред.След.

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

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

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