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


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlinecatshy  
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 06 сен 2018, 12:32
Пол: Не указан
Поблагодарили: 0 раз.

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

Сообщение catshy » 06 июн 2019, 07:52

Catastrophe писал(а):

catshy писал(а):

HOTA + HD Mod

hota doesn't support plugins for hd mod anymore


Well, yea I know, but it's still possible as DLL (injection) or just in cheat engine & ASM (+ LUA).

Edit:

Guys, I can pay for this help, I need it for my project, but I got stuck on this step :( - all what I need is ASM function to make a save game GM1.
Вернуться к началу

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

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

Сообщение as239 » 06 июн 2019, 12:48

Ben80 писал(а):

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

Кто-нибудь знает как к ней обратиться?
Вернуться к началу

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

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

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

Это просто поле или набор полей в менеджере битвы. Посмотреть что это такое проще всего, заглянув в код для конца битвы, когда заклинания из этой структуры копируются в книгу героя.
Я смотрел только мельком, поэтому четкой инфы запостить не могу.
Вернуться к началу

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

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

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

catshy писал(а):

I need it for my project


Откуда мы знаем, вдруг ты читер.
Вернуться к началу

offlinecatshy  
Новичок
Новичок
 
Сообщения: 15
Зарегистрирован: 06 сен 2018, 12:32
Пол: Не указан
Поблагодарили: 0 раз.

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

Сообщение catshy » 06 июн 2019, 18:54

@Ben80 well... u dont know it, but I can explain why save game file and not dump memory and read all infos what I need from memory - its faster in my opinion, because memory dump, save it as file and analytics need a lot of RAM - Im not super good programmer, maybe thats why. At this moment I can get a lot (almost all what i need) from memory dump, but I want to optimize my program.

I need it just for make statistics from players who use online lobby. I don't ask for "hacks" like for example unlimited move or add army or other stuff for hero, because I'm an opponent of cheating during the game - especially in my beloved H3 which I've been playing for 20 years (unfortunately, there is a lot of this type of shit for the cheat engine on the internet.).

I will only add that players will not see statistics during the game - they will see them only after the end of the game and only if both players accept the show their stats.

btw. sorry for my english.
Вернуться к началу

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

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

Сообщение Catastrophe » 06 июн 2019, 23:59

Как можно отредачить свойства объекта? Не как в воге, где редактор карт мог это делать для каждого отдельного объекта, а глобально.
Например, сделать эту клетку полностью проходимой по умолчанию:

Изображение
Последний раз редактировалось Catastrophe 07 июн 2019, 05:58, всего редактировалось 2 раз(а).
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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

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

Сообщение Catastrophe » 07 июн 2019, 04:24

Изменение специализаций, пока только по вторичным навыкам. Теперь все они предоставляют фиксированный бонус в 50% и 100%.
Код написан с условием, что вы не меняли оригинальный бонус за лвл в 0.05, его вообще лучше не трогать.
Принцип работы: перед умножением 0.05 на уровень героя происходит подмена уровня героя на нужное нам значение.
 Для специализаций по лидерству и удаче лучше отредачить GENRLTXT.txt, заменив "временно до следующей битвы" на "от других источников"
Изображение

Код: Выделить всё
#include homm3.h

int __stdcall c_spec_leader(LoHook* h, HookContext* c)
{
   c->ecx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_luck(LoHook* h, HookContext* c)
{
   c->edx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_necro(LoHook* h, HookContext* c)
{
   c->edx = 10;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_archery(LoHook* h, HookContext* c)
{
   c->edx = 10;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_offense(LoHook* h, HookContext* c)
{
   c->eax = 10;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_estates(LoHook* h, HookContext* c)
{
   c->edx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_eye(LoHook* h, HookContext* c)
{
   c->edx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_diplomacy(LoHook* h, HookContext* c)
{
   c->edx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_resistance(LoHook* h, HookContext* c)
{
   c->edx = 10;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_learning(LoHook* h, HookContext* c)
{
   c->eax = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_intelligence(LoHook* h, HookContext* c)
{
   c->eax = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_aid(LoHook* h, HookContext* c)
{
   c->eax = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_mysticism(LoHook* h, HookContext* c)
{
   c->ecx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_navigation(LoHook* h, HookContext* c)
{
   c->ecx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_logistics(LoHook* h, HookContext* c)
{
   c->edx = 20;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_scouting(LoHook* h, HookContext* c)
{
   c->ecx = 10;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_sorcery(LoHook* h, HookContext* c)
{
   c->edx = 10;
   return EXEC_DEFAULT;
}

// bool apientry dllmain

         _PI->WriteLoHook(0x4E3C73, c_spec_leader); // 2x
         _PI->WriteLoHook(0x4E3A1D, c_spec_luck); // 2x
         _PI->WriteLoHook(0x4E3F84, c_spec_necro); // 1.5x
         _PI->WriteLoHook(0x4E4412, c_spec_archery); // 1.5x
         _PI->WriteLoHook(0x4E455B, c_spec_offense); // 1.5x
         _PI->WriteLoHook(0x4E4641, c_spec_estates); // 2x
         _PI->WriteLoHook(0x4E46D2, c_spec_eye); // 2x
         _PI->WriteLoHook(0x4E482E, c_spec_diplomacy); // 2x
         _PI->WriteLoHook(0x4E498E, c_spec_resistance); // 1.5x
         _PI->WriteLoHook(0x4E4AEB, c_spec_learning); // 2x
         _PI->WriteLoHook(0x4E4B5B, c_spec_intelligence); // 2x
         _PI->WriteLoHook(0x4E4BCB, c_spec_aid); // 2x
         _PI->WriteLoHook(0x4E41F0, c_spec_mysticism); // 2x
         _PI->WriteLoHook(0x4E4C64, c_spec_navigation); // 2x
         _PI->WriteLoHook(0x4E4F10, c_spec_logistics); // 2x
         _PI->WriteLoHook(0x4E4320, c_spec_scouting); // 1.5x
         _PI->WriteLoHook(0x4E5B53, c_spec_sorcery); // 1.5x

То же самое, только для специализаций по спеллам, наносящим урон:
Код: Выделить всё
#include homm3.h

int __stdcall c_spec_nukes1(LoHook* h, HookContext* c)
{
   c->eax = 10;
   return EXEC_DEFAULT;
}

int __stdcall c_spec_nukes2(LoHook* h, HookContext* c)
{
   c->edx = 0;
   return EXEC_DEFAULT;
}

// bool apientry dllmain

         _PI->WriteLoHook(0x4E6301, c_spec_nukes1); // 1.3x
         _PI->WriteLoHook(0x4E6304, c_spec_nukes2); // check will treat all creatures as lvl 1 ones

Так же можно тупо заменить их на специализацию по волшебной стреле (фиксированный 50% бонус):
Код: Выделить всё
         _PI->WriteJmp(0x4E62FD, 0x4E62F1);

Ну и с остальным так же:
Код: Выделить всё
         _PI->WriteJmp(0x4E62CA, 0x4E62A8); // disrupting ray formula to default
         _PI->WriteJmp(0x4E62DB, 0x4E62F1); // fire wall formula to magic arrow
         _PI->WriteJmp(0x4E62E5, 0x4E62A8); // luck spell formula to default

И небольшой десерт из моего мода:
Код: Выделить всё
         // this requires some explaining
         _PI->WriteHexPatch(0x4E6291, "8D 46 E5"); // lea eax, [esi-13] -> lea eax, [esi-27]
         // spell spec table is limited to 43 entries + it skips first 13 entries (non-battle ones)
         // spells which are not included in this table will use id 06 (default damage formula)
         // this change makes the game skip first 27 entries instead of 13, to include ALL spells
         _PI->WriteByte(0x4E6296, 69); // spells with id more than 42 -> 69 are not included

         // spell spec table - looks like it only enables fire shield specialty, specialties on spells like mirth/sorrow/misfortune still doesn't work
         _PI->WriteHexPatch(0x4E6358, "00 00 00 00 00 00 00 00 00 01 00 01 01 01 01 01 02 02 02 02 02 02 02 02 02 02 02 00 05 01 00 00 00 01 00 00 00 00 00 01 01 01 01");
         // 00 - 2.0x, 01 - 1.5x, 02 - 3/2/1, 03 - unused (fortune), 04 - unused (disrupting ray), 05 - 9/6/3 (slayer, 4/3/2/1 in original game), 06 - unused (default)

         // spell specialties
         _PI->WriteJmp(0x4E62FD, 0x4E62F1); // damage spells spec use magic arrow formula (1.5x fixed multiplier)

         // replacing luck spell specialty, currently makes it a dummy one
         _PI->WriteHexPatch(0x4E62E5, "8B 45 10 90 90"); // mov eax, 2 -> mov eax, [ebp+0x10]
         // _PI->WriteLoHook(0x4E62EA, c_spec_spell); // stub for future possible specialty
Последний раз редактировалось Catastrophe 07 июн 2019, 13:50, всего редактировалось 8 раз(а).
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

offlinefeanor  
Новичок
Новичок
 
Сообщения: 14
Зарегистрирован: 15 мар 2016, 16:23
Пол: Не указан
Поблагодарили: 15 раз.

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

Сообщение feanor » 07 июн 2019, 09:05

Цитата:
Как можно отредачить свойства объекта? Не как в воге, где редактор карт мог это делать для каждого отдельного объекта, а глобально.
Например, сделать эту клетку полностью проходимой по умолчанию:

Если в общих чертах, то никак, потому что маски проходимости сохраняются в картах.
Для новонарисованных и RMG можно отредактировать шаблон в текстовиках объектов, для старых - только если изменять все вот это вот при загрузке карты.
Вернуться к началу

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

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

Сообщение Catastrophe » 07 июн 2019, 10:34

feanor писал(а):

Для новонарисованных и RMG можно отредактировать шаблон в текстовиках объектов

Вот именно для рмг мне надо, как шаблон редачить? Если ты про objects.txt, может есть софт, который умеет удобно читать шифр оттуда?
feanor писал(а):

для старых - только если изменять все вот это вот при загрузке карты.

Ну и правильно, че карты ломать, так даже лучше
Быстрее всего смогу ответить вам в Telegram: @PleaseAndThankYou
Вернуться к началу

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

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

Сообщение Ben80 » 07 июн 2019, 13:51

Ссылку на шифр уже давали:
https://github.com/potmdehex/homm3tools ... body.h#L14

Софт в какой-то степени тоже есть )))
viewtopic.php?f=56&t=532&start=6
Вернуться к началу

Пред.След.

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

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

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