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


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

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

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

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

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

Сорян. Я даже не глянул. Думал вы сделали, что текстовое поле будет увеличиваться в зависимоти от размера описания. Сейчас поставил высоту 240. Теперь помещается 3 строки под самую завязку. Нужно 4. Плюс расстояние между описанияем и параметрами где-то 3 строки, тогда как между названием существ и параметрами 2 строки.
Последний раз редактировалось Rolex 16 окт 2020, 12:58, всего редактировалось 3 раз(а).
Вернуться к началу

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

Ну вот. Уберите лишний "\n" в конце строки с параметрами, и должно влезть.
Вернуться к началу

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

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

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

Убрал лишний "\n". Теперь все ок. Спасибо.
Вернуться к началу

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

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

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

Вот думаю по первому пункту сейчас. А если все упростить. Сделать следующим образом: Проверять изменялись ли на выбранной карте хоть какие-то параметры по каким-либо героями, и если да, то выводить старое окно на этой карте, иначе, если ничего не менялось - новое. Главное, чтобы проверка не была сложной. Или так не получится?
Вернуться к началу

offlineigrik  
Подмастерье
Подмастерье
 
Сообщения: 108
Зарегистрирован: 14 сен 2017, 12:35
Пол: Не указан
Поблагодарили: 84 раз.

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

Сообщение igrik » 17 окт 2020, 09:25

AlexSpl писал(а):

Так... догнал, почему места не хватает. igrik кучу "\n" в конце строки с параметрами понаставил. .

Нет. Я это не далал. Я только помогал автору мода (как вы помагаете всем в этой теме), но я не писал эти строк. Я лишь дал место хука и объяснил как сделать эти строки.
Вообще я ни в коем случае не являюсь автором мода adfontes :smile2:

Rolex писал(а):

Вот думаю по первому пункту сейчас. А если все упростить. Сделать следующим образом: Проверять изменялись ли на выбранной карте хоть какие-то параметры по каким-либо героями, и если да, то выводить старое окно на этой карте, иначе, если ничего не менялось - новое. Главное, чтобы проверка не была сложной. Или так не получится?

Уверяю. Просто не получится. Это будет очень и очень не просто!

Rolex писал(а):

5) Отображение возможного количества убитых существ при показе возможного урона. В формате (урон: X1-X2, убьет: Y1-Y2).
6) Отображение возможного урона и количества уничтоженых существ у одиночной мишени при касте заклинания, или сколько будет восстановлено/воскрешено. В формате (урон: X, убьет: Y) / (восстановит здоровья: X, существ: Y)
9) Внешние жилища, принадлежащие игрокам, копят существ каждую неделю. Если жилища никому не принадлежат, то еженедельно количество существ в них равняется одному приросту.

Эти 3 пункта уже написаны. Если интересно, то вот они:
5) https://github.com/igrikRS/HoMM3-Plugin ... Killed.cpp
6) https://github.com/igrikRS/HoMM3-Plugin ... escription (написан в двух вариантах для разных заголовочников) (скрины тут http://wforum.heroes35.net/showthread.p ... #pid104441)
9) https://github.com/igrikRS/HoMM3-Plugin ... s.cpp#L266 (только для ERA. Для SoD исследуйте 0x4B8760 (делается проще паренной репы :smile10: ))
Вернуться к началу

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

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

Сообщение Rolex » 17 окт 2020, 14:46

igrik писал(а):

5) https://github.com/igrikRS/HoMM3-Plugin ... Killed.cpp
6) https://github.com/igrikRS/HoMM3-Plugin ... escription (написан в двух вариантах для разных заголовочников) (скрины тут http://wforum.heroes35.net/showthread.p ... #pid104441)

Спасибо. Видно, что все писалось под WoG. Какие-то спец проверки. Основной алгоритм понятно, что тот же, но вот некоторые моменты и особенности реализации...

А можно ли подправить код под SoD/Complete, ибо я у себя их даже собрать не могу. В SoD_SP эти пункты также реализованы, исходники вроде в общем доступе, их бы только отыскать среди всего кода, подправить и прикрутить мультиплеер.

Возможно, использовались расширенные библиотеки под WoG (которых у меня нет) и, может быть, нужны еще какие-то доп настройки студии. Используется Visual Studio 2015.
Подключены следующие библиотеки: stdafx.h, patcher_x86.hpp, homm3.h.

По коду 5-го пункта:
GetFullHealth(0) - class _BattleStack_ не содержит члена "GetFullHealth".
Указатель на _HStr_*, который возвращает функция BattleMgr_GetAttackDamage_Hint_LogString не определен.
Идентификаторы _HStr_ и json_Combat - не определены.

По коду 6-го пункта (с заголовочником homm3.h):
Идентификатор не определен:
isRusLangWoG
BCF_DIE
SPF_DAMAGE
GetWoGOptionsStatus

class _BattleStack_ не содержит:
GetResistGolem
GetFullHealth
CanUseSpell
Get_Resurrect_Count

class _Hero_ не содержит:
Get_School_Level_Of_Spell
Get_Spell_Power_Bonus_Arts_And_Sorcery
GetSpell_Specialisation_PowerBonuses
GetResistSpellProtection

class _BattleMgr_ не содержит:
hero_spellPower
Get_Resurrect_BattleStack

igrik писал(а):

9) https://github.com/igrikRS/HoMM3-Plugin ... s.cpp#L266 (только для ERA. Для SoD исследуйте 0x4B8760 (делается проще паренной репы :smile10: ))

9-й уже решен для SoD/Complete, причем 2-мя разными способами:

Решение от Ben80:
Код: Выделить всё
int __stdcall growthAccumulation(LoHook* h, HookContext* c)
{
   *(_word_*)c->edi = *(_word_*)c->edi + (_word_)c->ecx;
   c->eax = *(int*)c->esi;

   return NO_EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0x4B87A0, growthAccumulation);


Решение от RoseKavalier:
Код: Выделить всё
_PI->WriteByte(0x4B87A1, 0x01);


Интересно, что в первом случае используется адрес 0x4B87A0, а во втором 0x4B87A1, разница в последнем байте. Ваш адрес тоже немного отличается (0x4B8760).

А есть какие-то наработки по этим 3-м пунктам?
Rolex писал(а):

3. При посещении банков существ выводить информацию об их охране (именно в момент посещения и вывода окна Хотите сразится...).
 скрины
Изображение
Изображение

4. Показ доступных для найма существ в внешних жилищах и Лагерях беженцев (по клику правой кнопкой мыши)
 скрины
Изображение
Изображение

5. Инфо о стоимости улучшения существ (по клику правой кнопкой мыши или при наведении на кнопку апгрейда).
 скрины
Изображение
Изображение

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

offlinedaemon_n  
имя: Дмитрий
 
Сообщения: 1
Зарегистрирован: 10 мар 2020, 01:24
Пол: Мужчина
Поблагодарили: 0 раз.

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

Сообщение daemon_n » 19 окт 2020, 12:35

AlexSpl писал(а):

Автор: AlexSpl

Название: BadLuck

Описание: Плагин обеспечивает поддержку отрицательной Удачи (уполовинивание базового урона, анимация и звук)...

Авторы: AlexSpl, igrik

Название: BadLuckClassic

Описание: Плагин обеспечивает поддержку отрицательной Удачи (вычитание половины базового урона, анимация и звук). При желании вы также можете распаковать архив из



Так понимаю, исходников нет? Сравнил с плагином, давно распространяемым ранее - один в один ведь?
Суть в том, что он не даёт запустить игру (Герои 3 ЭРА) на win XP.
Вернуться к началу

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

Исходники под спойлером "Код". Насчёт Эры не подскажу. Попробуйте собрать плагин сами.

По поводу авторства. Плагин я написал до того, как узнал о плагине feanor'а (думаю, Вы о нём говорите). Плюс первую его часть, которая касается анимации и звука, сложно написать по-другому, потому что это буквально переделанный код для Удачи.
Вернуться к началу

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

Интересное замечание по поводу отрицательной Удачи.

В Героях 1 вероятность выпадения положительной Удачи равна P(L) = L / 12 (да, именно 1/12 за каждую единицу Удачи), вероятность выпадения отрицательной - P(L) = -(L + 1) / 12 (тоже 1/12 за каждую единицу Удачи, но здесь баг: отрицательная Удача -1 приравнивается к 0, -2 к -1, а -3 к -2).

В Героях 2 шансы получить Удачу (как положительную, так и отрицательную) упали. Здесь вероятность выпадения положительной Удачи равна P(L) = L/24 (1/24 за каждую единицу Удачи), а отрицательной - P(L) = -(L + 1) / 24 (1/24 за каждую единицу Удачи; баг со смещением на единицу так и не исправлен).

В Героях 3 мы знаем только положительную Удачу: P(L) = L/24. И если ориентироваться на две предыдущие части Героев, то выбор вероятности выпадения отрицательной Удачи неоднозначен. Если делать в стиле Героев 1 (с иcправлением бага, естественно), то формула для вероятности выпадения отрицательной Удачи будет такой: P(L) = -L/12. Если же делать в стиле Героев 2, то такой: P(L) = -L/24.
Вернуться к началу

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

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

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

AlexSpl писал(а):

И если ориентироваться на две предыдущие части Героев, то выбор вероятности выпадения отрицательной Удачи неоднозначен.

Можно глянуть еще на вероятности выпадение Морали во всех 3-х первых частях. В первой части по Морали тоже есть баг, где отрицательная Мораль -1 приравнивается к 0 и тд?

Еще одно интересное наблюдение. Заклы Удача и Неудача в Героях 3 разных уровней (2 и 3 ур соотв), аналогично Радость и Печаль (3 и 4 ур соотв). В то время как Ускорение и Медлительность заклы одного уровня (1-го).
То есть я это к тому, что если бы разработчики изначально планировали одинаковые вероятности выпадаения положительной и отрицательной Удачи/Морали, то, вероятно, эти заклы были бы на одном уровне магии, как Ускорение и Медлительность, например.
Ну а так все логично, по-моему, отрицательная Удача и Мораль находятся на уровень выше именно потому, что вероятности их выпадения в два раза выше положительных.

AlexSpl писал(а):

Ben80, мне кажется, что даже в случае Удачи следует удваивать именно сумму бросков кости уронов.

Интересно, как думаете почему же тогда разработчики не сделали изначально для Удачи удваивание суммы бросков вместо прибавки?
Вот думаю, раз так более правильно, наверное, неплохо было бы тогда запилить еще и плагин для положительной Удачи с удваиванием суммы бросков кости (взамен оригинальному с прибавкой). Тут должно быть проще, первую часть с анимацией и звуком писать ненужно.

***
А не подскажите как из плагина изменить описание специализации "Золото"?

Вот код, который меняет доход специалиста по Золоту с 350 на 500.
Код: Выделить всё
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include "HotA\homm3.h"

Patcher* _P; // required for every plugin
PatcherInstance* _PI;
static _bool_ plugin_On = 0;

struct SecSkillDesc
{
   char* Name;
   char* Desc;
};

SecSkillDesc SpecEstatesDesc =
{
   
};


int __stdcall changeSpecEstatesDesc(LoHook* h, HookContext* c)
{

   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("HD.Plugin.SpecEstates");

         _PI->WriteDword(0x4E4680 + 1, 500);      // спец по золоту 350 -> 500
         _PI->WriteLoHook(0x4, changeSpecEstatesDesc);
      }
   }
   return TRUE;
}
Последний раз редактировалось Rolex 26 окт 2020, 13:40, всего редактировалось 1 раз.
Вернуться к началу

Пред.След.

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

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

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