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


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

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

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

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

Сообщение Catastrophe » 19 авг 2019, 14:39

Спасибо большое. А как можно туда добавить проверки на id героя, id надетого на него артефакта? Есть идея, чем заменить свойства артефактов по орлиному глазу...
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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

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

Сообщение AlexSpl » 19 авг 2019, 14:49

См. homm3.h, там всё есть (скачать можно по ссылке в первом сообщении этой темы).

Цитата:
А как можно туда добавить проверки на id героя, id надетого на него артефакта? Есть идея, чем заменить свойства артефактов по орлиному глазу...

Например, так:
Код: Выделить всё
o_BattleMgr->hero[side]->id;
o_BattleMgr->hero[side]->DoesWearArtifact(AID_SPELL_BOOK);
Вернуться к началу

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

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

Сообщение AlexSpl » 19 авг 2019, 14:53

Кстати, SDK RoseKavalier выглядит намного привлекательнее, чем ранняя версия homm3.h. Поэтому, если кто-то захочет взяться за описание SDK (краткое, где скачать и т.п.), добавлю инструкции в первый пост.
Вернуться к началу

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

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

Сообщение Catastrophe » 19 авг 2019, 15:15

o_BattleMgr->hero[side]->id уже пробовал, крашит игру. С артефактом то же самое. А у вас это работает?
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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

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

Сообщение AlexSpl » 19 авг 2019, 15:17

Сразу делитесь кодом, который крашит, потому что иначе мне придётся самому писать код и проверять. А дело наверняка в Вашем коде. Сейчас проверю.

* * *
Проверил. Дело в Вашем коде, как я и предполагал. Так что лучше сразу поделиться кодом, чтобы были хоть какие-то шансы на ответ :smile1:

Если Вы про heroes id, то они определены только для первых 11 героев. Я бы сделал id героев через enum:

Код: Выделить всё
enum {ORRIN, VALESKA, EDRIC, ...};


А Вам нужно прописывать id героев числами.
Последний раз редактировалось AlexSpl 19 авг 2019, 15:34, всего редактировалось 2 раз(а).
Вернуться к началу

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

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

Сообщение Catastrophe » 19 авг 2019, 15:33

Если закомментить c_crss_h = o_BattleMgr->hero[side]->id; и заменить эту переменную в конце, вылеты прекратятся.
Код: Выделить всё
int c_crss_h;

int __stdcall CrStartSpells(LoHook* h, HookContext* c)
{
    for (int side = ATTACKER; side <= DEFENDER; ++side)
    {
        for (int i = 0; i < o_BattleMgr->stacks_count[side]; ++i)
        {
         c_crss_h = o_BattleMgr->hero[side]->id;
         // stone skin
            if (o_BattleMgr->stack[side][i].creature_id == 30 ||
            o_BattleMgr->stack[side][i].creature_id == 31)
            {
            // spell id, duration, magic school level, hero id (for possible specialty bonus)
            CALL_5(int, __thiscall, 0x444610, &o_BattleMgr->stack[side][i], 46, -1, 2, c_crss_h);
            }
        }
    }

    return EXEC_DEFAULT;
}

Цитата:
А Вам нужно прописывать id героев числами.

Я все id числами прописываю.
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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

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

Сообщение AlexSpl » 19 авг 2019, 15:37

Последний аргумент не int! А _Hero_:

Код: Выделить всё
int __stdcall CastStoneSkinOnGargoyles(LoHook* h, HookContext* c)
{
   for (int side = ATTACKER; side <= DEFENDER; ++side)
   {
      for (int i = 0; i < o_BattleMgr->stacks_count[side]; ++i)
      {
         if (o_BattleMgr->stack[side][i].creature_id == CID_STONE_GARGOYLE ||
             o_BattleMgr->stack[side][i].creature_id == CID_OBSIDIAN_GARGOYLE)
         {
            if (o_BattleMgr->hero[side]->id == HID_ORRIN) CALL_5(int, __thiscall, 0x444610, &o_BattleMgr->stack[side][i], SPL_HYPNOTIZE, 3, 0, o_BattleMgr->hero[side]);
         }
      }
   }
                     
   return EXEC_DEFAULT;
}
Вернуться к началу

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

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

Сообщение Catastrophe » 19 авг 2019, 15:43

Сделал без использования переменной, все равно вылет при начале боя.
Код: Выделить всё
int __stdcall CrStartSpells(LoHook* h, HookContext* c)
{
    for (int side = ATTACKER; side <= DEFENDER; ++side)
    {
        for (int i = 0; i < o_BattleMgr->stacks_count[side]; ++i)
        {
         // stone skin
            if (o_BattleMgr->stack[side][i].creature_id == 30 ||
            o_BattleMgr->stack[side][i].creature_id == 31)
            {
            // spell id, duration, magic school level, hero id (for possible specialty bonus)
            CALL_5(int, __thiscall, 0x444610, &o_BattleMgr->stack[side][i], 46, -1, 2, o_BattleMgr->hero[side]->id);
            }
        }
    }

    return EXEC_DEFAULT;
}
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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

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

Сообщение AlexSpl » 19 авг 2019, 15:46

Я написал выше. Последний аргумент не id героя, а ссылка на него (см. пример выше) :smile1:
Вернуться к началу

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

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

Сообщение Catastrophe » 19 авг 2019, 16:01

Да, без ->id работает, спасибо. А как починить артефакт? Так вылетает:
Код: Выделить всё
         if (o_BattleMgr->hero[side]->DoesWearArtifact(63) == true)
         {
            CALL_5(int, __thiscall, 0x444610, &o_BattleMgr->stack[side][i], 53, -1, 2, o_BattleMgr->hero[side]);
         }
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

Пред.След.

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

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

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