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


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineBen80  
имя: Сергей
Эксперт
Эксперт
 
Сообщения: 1318
Зарегистрирован: 18 июн 2017, 06:49
Пол: Не указан
Поблагодарили: 336 раз.

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

Сообщение Ben80 » 16 июн 2019, 17:13

Thanks, it is interesting, as always.
However, as I already wrote, I have solved my problem :)

I hoped you will be interested to think about unstability about which I wrote, and how HD mod/patcher works.
Вернуться к началу

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

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

Сообщение Ben80 » 16 июн 2019, 17:55

@RoseKavalier,

a couple of suggestions for translating:
1)
### These options are not modifiable in-game. ###
should be translated
### Эти параметры не вносят изменения в игру. ###

2)
# Fixes the anchor bug: some obstacles have their "anchor" hex drawn outside the obstacle itself, preventing some spells from being cast on that tile even if free.

should be translated

# Исправляет ошибку "опорного" гекса: некоторые боевые препятствия имеют так называемый "опорный" гекс, расположенный рядом, но вне самого препятствия, не позволяя тем самым накладывать некоторые заклинания на, казалось бы, пустой гекс.


Suggestion for "Hireable" option, should be
# Heroes that are not marked as 'Can be hired by' Player X will no longer be available in the Taverns of Player X
# Герои, которые не помечены как 'Может быть нанят' игроком X, больше не будут доступны в тавернах игрока X
Вернуться к началу

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

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

Сообщение as239 » 17 июн 2019, 09:06

А как считать имя шаблона из памяти вывести его в сообщение?
Так не компилируется:
Код: Выделить всё
   string template_name = *(string*)0x54A2D9;
   b_MsgBox(string.c_str(),1);



И еще вопрос, у Olly есть какие-то преимущества в отладке перед IDA?
Последний раз редактировалось as239 17 июн 2019, 14:03, всего редактировалось 1 раз.
Вернуться к началу

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

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

Сообщение as239 » 17 июн 2019, 10:33

Выкладываю протестированную версию "Fresh Mod 3.0".
Если кому-то будет интересно посмотреть или проверить хоть один пункт - буду рад обратной связи.
Особенно важен опыт сетевой игры.

Описание изменений относительно "Fresh Mod 2.0":
1. Дипломатия возвращена в игру, она работает и с установленным флагом "HW rules", но с одним ограничением - не могут присоединяться нейтралы, чье "AI Value" > 25 000, для М и S карт "AI Value" > 8 000, (при помощи igrik, RoseKavalier, Ben80).
2. Уменьшена вероятность блоков вдоль дорог, за счет перестановки охраны и охраняемого объекта (сундук,ресурс,пандорра,артефакт,свиток,ученый,костер) (при помощи RoseKavalier)
3. Нейтралы охряняют объекты вокруг себя (автор igrik)
4. "Орлиный глаз" срабатывает не после битвы, а во время, при первом получении хода своего отряда, можно изучить заклинание, которое до этого сколдовал противник. Убрана зависимость уровня навыка от уровня изучаемого заклинания - теперь и с базовым навыком можно изучить заклинание 5-го уровня.(основа AlexSpl, Ben80; помощь igrik)
5. Изменено "AI Value". Султаны эфриты: 2842 (было 1848). Сказочные драконы: 31 000 (было 19580). Монахи: 565 (было 485).
6. Навык "Первая помощь", дополнительно дает всем живым существам армии +1,+2,+3 к здоровью, на основном, продвинутом, экспертном уровнях (при помощи RoseKavalier)).
7. Расширенное описание заклинаний в книге магии по правому клику на заклинание - урон от стены огня, количество вызываемых элементалей, количество воскрешаемых HP, стоимость TP и DD в MP и т.д. (автор RoseKavalier, источник SOD SP).
8. Можно смотреть расходуемые очки движения зажав клавишу "Alt" (автор RoseKavalier, источник SOD SP).
9. Можно активировать героя через Shift+Левый Клик Мышки (автор AlexSPL)
10. Для заклинания "Силовое поле" выводится тень (автор RoseKavalier, источник SOD SP).
11. На 112 в сетевой чат выводится сообщение о подключении мода (автор Ben80).
12. Мелкие улучшения и исправления.

Огромная благодарность всем за помощь, особенно RoseKavalier :smile27:
Вложения
FreshMod.zip
(10.65 КБ) Скачиваний: 231
Последний раз редактировалось as239 17 июн 2019, 14:43, всего редактировалось 1 раз.
Вернуться к началу

offlineRoseKavalier  
Мастер
Мастер
 
Сообщения: 331
Зарегистрирован: 23 сен 2017, 17:00
Пол: Не указан
Поблагодарили: 234 раз.

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

Сообщение RoseKavalier » 17 июн 2019, 14:33

@Ben80
Thanks for text suggestions, I will look at them!
Regarding the instability, I don't quite understand your comment, language barrier :(

@as239
That code does not seem right. The offset I mentioned was (0x54A2E0 + 1), and is *(char**), not string. The modern definition of string should not be applicable to any existing code, if you want to manipulate heroes3 strings, H3String is a good start.
I've made some changes to SoD_SP and H3API which should affect your plugin.
e.g. Forcefield shadow

IDA vs Olly
Overall IDA is more comprehensive and allows more features.
I personally prefer Olly for debugging one step at a time, but often in conjunction with IDA. Another emerging software is x64dbg / x32dbg, it has a "large" active community, whereas Olly is pretty much abandonned.
Also, for scanning memory CheatEngine is very fast. It's much more stable when placing breakpoints on stack as well (quite useful for RMG).

I have a few things to do but I can give your mod a quick try later today
Вернуться к началу

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

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

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

RoseKavalier писал(а):

@Ben80
Thanks for text suggestions, I will look at them!
Regarding the instability, I don't quite understand your comment, language barrier :(


))

I poorly know English but imho )) I know Russian language very well.

I would like refine concerning my suggestion 1) -
Should be changed both original comment and translation accordingly. Original should be:

"These settings do not change the game"
Вернуться к началу

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

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

Сообщение igrik » 20 июн 2019, 07:19

Если кому интересно, то вот код, запрещающий генерироваться тюрмам с героями выше 1-го уровня только на случайных картах.
Код: Выделить всё
0x53A363 -> JMP 0053A48E


Более подробно:
Код: Выделить всё
// вырезаем генерацию тюрем
JMP отсюда         0x53A317    (5481239)        тюрьмы все
... или ...
JMP отсюда         0x53A363    (5481315)        тюрьмы с опытом >= 5000
... и ...
JMP сюда           0x53A48E    (5481614)        создание объекта с №63
Вернуться к началу

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

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

Сообщение Ben80 » 20 июн 2019, 16:23

Лучше бы показал код для отключения теоретических битв :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 » 20 июн 2019, 17:01

Цитата:
Расскажи детально как ставить hardware breakpoint (на Olly 2.01), на примере: чтение поля selected_hero_id (как я понимаю это свойство o_GameMgr->Player->selected_hero_id).
Вот никогда не умел ставить такие брекпоинты и до сих пор не догоняю как это сделать.

Olly я не пользуюсь, всё делаю в IDA. Но RoseKavalier ответил. В IDA - это брейкпоинт на чтение/запись (Read/Write, Hardware) по заданному адресу. У поля o_GameMgr->Player->selected_hero_id будет фиксированный адрес только в течение одной "игровой сессии", но его можно вычислить, и обычно этого достаточно, чтобы найти нужный участок кода. Далее ставишь обычный брейкпоинт на код. Попробую расписать подробнее позже.

Тут ещё интуиция помогает или метод проб и ошибок. Ты представляешь, как бы ты написал код (какие поля записываются/читаются в каждом конкретном случае). Для упрощения поиска нужного кода/фильтра кандидатов можно ставить флаг Trace и использовать условные брейкпоинты.
Вернуться к началу

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

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

Сообщение igrik » 22 июн 2019, 05:03

Ben80 писал(а):

Лучше бы показал код для отключения теоретических битв :smile1:
И если есть возможность/желание - результаты сравнительного теста раскачки героя с теор. битвами и без.

Я же показывал код на странице SOD_SP. И ты Ben80 его видел.
Код: Выделить всё
// переводим теоретическую битву AI vs AI в быструю
_bool_ isBATTLE_AI_vs_AI = false;
_int_ o_QuickBattle_SaveParam = 0;


// если теоретическая битва, то переводим её в быструю
int __stdcall Y_BattleAIvsAI(LoHook* h, HookContext* c)
{
   isBATTLE_AI_vs_AI = true;
   o_QuickBattle_SaveParam = o_QuickBattle;
   o_QuickBattle = 1;

   c->return_address = 0x4AD39A;
   return NO_EXEC_DEFAULT;
}

// и пропускаем диалог Результатов битвы
int __stdcall Y_Dlg_BattleResults2(LoHook* h, HookContext* c)
{
   if ( isBATTLE_AI_vs_AI )
   {
      c->return_address = 0x477303;
      return NO_EXEC_DEFAULT;
   }
   return EXEC_DEFAULT;
}

// после битвы выключаем переменную о выключении теоретической битвы
int __stdcall Y_AfterBattle(LoHook* h, HookContext* c)
{
   if ( isBATTLE_AI_vs_AI )
   {
      o_QuickBattle = o_QuickBattle_SaveParam;
      isBATTLE_AI_vs_AI = false;
   }
   return EXEC_DEFAULT;
}

// ###########################################################
_PI->WriteLoHook(0x4AD284, Y_BattleAIvsAI);
_PI->WriteLoHook(0x47729D, Y_Dlg_BattleResults2);
_PI->WriteLoHook(0x4B0B0F, Y_AfterBattle);
Последний раз редактировалось igrik 05 июл 2019, 12:28, всего редактировалось 2 раз(а).
Вернуться к началу

Пред.След.

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

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

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