Объявления

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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5547
Зарегистрирован: 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)
Поблагодарили: 2162 раз.

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

Сообщение AlexSpl » 23 окт 2023, 22:18

Не обязательно со старой. Можно с последней.
Вернуться к началу

offlineJediMaster  
имя: Джедай
 
Сообщения: 6
Зарегистрирован: 17 окт 2023, 02:06
Пол: Мужчина
Поблагодарили: 2 раз.

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

Сообщение JediMaster » 23 окт 2023, 23:50

Ваш проверил мод, функционирует.

Пока искал ответ ознакомился с позицией команды Hota и с их отношением к другим мододелам. Из-за этого есть определенное разочарование и в Hota, и в HD моде, как авторе, который публикует в своей программе ссылку на этот в целом хороший аддон, созданный, к сожалению, не самыми хорошими людьми. Будь они официальными разработчиками я бы их позицию понял. А так получается, что они присвоили игру себе и считают своей, интересно что бы сказали разрабы из 3DO и NWC на этот счет.

В общем, в HotA я разочарован, и именно из-за его авторов. У меня были кое-какие наработки по HotA, если не возражаете, я хочу оставить их здесь.
 Readme
Проведена большая работа над улучшением названий юнитов, заклинаний, строений, а также над названиями городов:
1. Замок -> Гавань, Темница -> Катакомбы, Крепость -> Твердыня
2. Никаких "Ул. <название здания>", продвинутые версии городских жилищ имеют собственные имена.
3. Никаких массовых орков-вождей и медуз-королев, изменения коснулись всех похожих названий. Пример: Медуза-королева -> Медуза-лучница.

Кампании HotA улучшены и адаптированы для усредненного игрока. Например, в задании где необходимо собрать всех существ на острове, теперь их действительно нужно собрать только на острове (за пределами острова жилища существ убраны).

Работает на HotA 1.6.1 (последней версии)

В архив "HotA_lng.lod" добавлены русифицированные и адаптированные к SoD/HotA кампании RoE, но из главного меню их запустить нельзя (не смог это реализовать).

Бонус: Обучающая миссия стала чуть интерснее


Использовать HotA и HD мод желания больше нет, поэтому Героев 3 на некоторое время решил забрость. Извините, за потраченое вами время на плагин. Может быть моя идея пригодится кому-нибудь еще, а может я скоро вернусь к Героям 3 - классическим или на VCMI. С сайта точно не пропадаю. Недавно именно здесь ознакомился с чудесной игрой Kings Bounty, и сильно жалею, что не играл в нее раньше.

P.S: Уверен что такие независимые мододелы-разработчики как вы, когда-нибудь превзойдут успех HotA. Тех кто отказывается двигаться, обогнать легко.
Вложения
HotA+_MOD.ZIP
(8.14 МБ) Скачиваний: 103
Вернуться к началу

offlineIDK  
имя: Икосаэдр
 
Сообщения: 6
Зарегистрирован: 30 дек 2023, 07:20
Пол: Мужчина
Поблагодарили: 0 раз.

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

Сообщение IDK » 30 дек 2023, 07:25

А откуда вы вообще берете все вот эти адреса, где что заменять, куда какой хук делать? Типа 0x4C80F4 или 0x63EA2C?
Вернуться к началу

offlineАватара пользователя
void_17  
имя: DM
Ветеран
Ветеран
 
Сообщения: 537
Зарегистрирован: 25 апр 2021, 15:05
Откуда: Оттуда
Пол: Мужчина
Поблагодарили: 122 раз.

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

Сообщение void_17 » 30 дек 2023, 14:49

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

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

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

Сообщение AlexSpl » 30 дек 2023, 15:54

Цитата:
А откуда вы вообще берете все вот эти адреса, где что заменять, куда какой хук делать? Типа 0x4C80F4 или 0x63EA2C?

Сейчас в открытом доступе есть несколько баз данных кода игры. Я лично пользуюсь только базой от void17 в последнее время (ссылка в сообщении выше). В разобранной базе данных кода игры можно вообще искать то, что нужно, по названиям классов и методов. Самая первая из известных мне баз данных IDA - это воговская база. До неё приходилось самому анализировать код на ассемблере, ставить брейкпоинты в окрестностях интересующих участков кода и сидеть с дебаггером, чтобы понять, что именно делает код (да, тогда даже декомпиляторов не было).
Вернуться к началу

offlineIDK  
имя: Икосаэдр
 
Сообщения: 6
Зарегистрирован: 30 дек 2023, 07:20
Пол: Мужчина
Поблагодарили: 0 раз.

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

Сообщение IDK » 31 дек 2023, 07:09

спасибо большое, щас буду разбираться
Вернуться к началу

offlineIDK  
имя: Икосаэдр
 
Сообщения: 6
Зарегистрирован: 30 дек 2023, 07:20
Пол: Мужчина
Поблагодарили: 0 раз.

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

Сообщение IDK » 31 дек 2023, 07:26

Вот такой получился плагин для рандомизации стоимости героев в таверне каждый день игры. Однако, если выйти из игры и зайти в нее снова, плагин перезапускается и снова рандомизирует стоимость, что позволяет немного читерить. Как решить эту проблему? Нужен какой-то хук, чтобы запускался в самом начале игры и больше никогда, чтобы менять стоимость героя не при запуске плагина и потом каждый день, а именно в начале игры а потом каждый день.
 
#include "addrnames.hpp"
Patcher* _P;
PatcherInstance* _PI;
int _OnNextDay = 0x4C80F4;
int _HeroCost = 0x0067814C;
int __stdcall TestLoHook(LoHook* h, HookContext* c)
{

_PI->WriteByte(_HeroCost, rand() % (3500 - 1500 + 1) + 3500);
return EXEC_DEFAULT;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
static bool plugin_On = false;

if (DLL_PROCESS_ATTACH == ul_reason_for_call)
{
if (!plugin_On)
{
srand(time(0));
plugin_On = true;
_P = GetPatcher();
_PI = _P->CreateInstance((char*)"HD.Plugin.TestPlugin");
_PI->WriteByte(_HeroCost, rand() % (3500 - 1500 + 1) + 3500);
_PI->WriteLoHook(_OnNextDay, TestLoHook);
}
}
return TRUE;
}
Вернуться к началу

offlineIDK  
имя: Икосаэдр
 
Сообщения: 6
Зарегистрирован: 30 дек 2023, 07:20
Пол: Мужчина
Поблагодарили: 0 раз.

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

Сообщение IDK » 31 дек 2023, 08:37

И еще, как тут работать со спрайтами? Где они вообще хранятся в файлах?
Вернуться к началу

offlineIDK  
имя: Икосаэдр
 
Сообщения: 6
Зарегистрирован: 30 дек 2023, 07:20
Пол: Мужчина
Поблагодарили: 0 раз.

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

Сообщение IDK » 31 дек 2023, 16:23

Войд, твоя БД не хочет открываться ни в IDA 7.6 (бесплатная версия 64 бит), ни в Visual Studio, ни в браузере. Где его открыть?
Вернуться к началу

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

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

Сообщение AlexSpl » 02 янв 2024, 00:00

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

Я обычно ставлю _PI->WriteLoHook(0x4EE1C1, afterInit); Это сразу после инициализации ресурсов.

Цитата:
И еще, как тут работать со спрайтами? Где они вообще хранятся в файлах?

Посмотрите H3API от RoseKavalier. Хранятся в *.LOD.

Цитата:
Где его открыть?

Требуется 7.7. Должна открываться и в последней (8.3).
Вернуться к началу

Пред.След.

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

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

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