Объявления

Форум о Героях Меча и Магии и King's Bounty. Если Вы любите эти игры, мы будем рады видеть Вас в наших рядах. :smile2:
Для активации Вашей учетной записи необходимо написать письмо на почтовый ящик dumai-spb@mail.ru или vdv_forever@bk.ru с указанием зарегистрированного Вами ника

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

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

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

Сообщение AlexSpl » 05 авг 2017, 12:19

Тогда действительно странно. Посмотрю, в чём там дело.
Вернуться к началу

offlineBen80
Мастер
Мастер
 
Сообщения: 453
Зарегистрирован: 18 июн 2017, 06:49
Поблагодарили: 74 раз.

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

Сообщение Ben80 » 05 авг 2017, 12:20

AlexSpl писал(а):

А как проверяете? Считает множитель для Интеллекта ведь верно: 1 + k * (1 + 0.02 * N).

Цитата:
*(int*)0x4E3F92 = 0x63AC60; //Necromancy
*(int*)0x4E4F1E = 0x63AC60; //Logistic
*(int*)0x4E4569 = 0x63AC60; //Attack
*(int*)0x4E45C9 = 0x63AC60; //Defence

Так работать точно не будет. В данном случае это не адреса процесса.


Ну таким образом, как я понимаю по адресу 0x4E4F1E будет записано 0x63AC60, а вернее 0x0063AC60,
4 байта, как для int, начиная с 60.
Операнд ведь в данном случае - это и есть просто адрес. И достаточно просто изменить его, как обычное HEX число.
Последний раз редактировалось Ben80 05 авг 2017, 12:25, всего редактировалось 1 раз.
Вернуться к началу

offlineBen80
Мастер
Мастер
 
Сообщения: 453
Зарегистрирован: 18 июн 2017, 06:49
Поблагодарили: 74 раз.

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

Сообщение Ben80 » 05 авг 2017, 12:23

Тут вот MasterOfPuppets http://forum.df2.ru/index.php?showtopic=36506
тоже, как я понимаю, меняет только операнд для 1 инструкции, и считает, что все будет работать.

Так я еще более удивлен :)
Вернуться к началу

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

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

Сообщение AlexSpl » 05 авг 2017, 13:29

Цитата:
Тут вот MasterOfPuppets ... тоже, как я понимаю, меняет только операнд для 1 инструкции, и считает, что все будет работать.

Там речь идёт о патче исполняемого файла на диске вручную.

patcher_x86 патчит образ, загруженный в оперативную память. Патч нужно создать и применить с помощью API патчера. Пытаться писать что-либо напрямую в секцию кода игры из кода плагина (DLL) бесполезно. В тонкостях работы патчера не разбирался, но проверьте сами, открыв память процесса в шестнадцатеричном редакторе, что в результате выполнения команды *(int*)0x4E3F92 = 0x63AC60; число 0x63AC60 не будет записано по адресу 0x4E3F92.
Вернуться к началу

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

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

Сообщение AlexSpl » 05 авг 2017, 14:21

Цитата:
Так оно тоже не работает. Вы могли бы проверить не адрес, а результат ?
Для Интеллекта легче всего:
_PI->WriteDword(0x4E4B69, 0x63AC60);


Вот тут у Вас ошибка. Нужно _PI->WriteDword(0x4E20EC, 0x63AC60);

Elleshar 5-го уровня (Знания = 4) с Expert Intelligence: 84 маны.

Проверяем: 4 * 10 * (1 + 1 * (1 + 0.02 * 5)) = 40 * 2.10 = 84
При 5% было бы: 4 * 10 * (1 + 1 * (1 + 0.05 * 5)) = 40 * 2.25 = 90

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

offlineBen80
Мастер
Мастер
 
Сообщения: 453
Зарегистрирован: 18 июн 2017, 06:49
Поблагодарили: 74 раз.

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

Сообщение Ben80 » 05 авг 2017, 14:49

AlexSpl писал(а):

Цитата:
Так оно тоже не работает. Вы могли бы проверить не адрес, а результат ?
Для Интеллекта легче всего:
_PI->WriteDword(0x4E4B69, 0x63AC60);


Вот тут у Вас ошибка. Нужно _PI->WriteDword(0x4E20EC, 0x63AC60);

Elleshar 5-го уровня (Знания = 4) с Expert Intelligence: 84 маны.

Проверяем: 4 * 10 * (1 + 1 * (1 + 0.02 * 5)) = 40 * 2.10 = 84
При 5% было бы: 4 * 10 * (1 + 1 * (1 + 0.05 * 5)) = 40 * 2.25 = 90

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


Сейчас буду проверять.
0x4E20EC - это в процедуре DlgHeroInfo_Update

Возможно, нужно сделать подмену адреса и по адресу 0x4E20EC, и по всем другим адресам - которые отдельно для каждой специализации.
Вернуться к началу

offlineBen80
Мастер
Мастер
 
Сообщения: 453
Зарегистрирован: 18 июн 2017, 06:49
Поблагодарили: 74 раз.

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

Сообщение Ben80 » 05 авг 2017, 15:03

Да, оказывается и впрямь нужно сделать подмену для адреса 0x4E20EC,
и для каждого адреса уже по специализациям.

Наверно, это только для специализаций по втор. навыкам. Надеюсь, по крайней мере :smile1:
Проверю.
Вернуться к началу

offlineBen80
Мастер
Мастер
 
Сообщения: 453
Зарегистрирован: 18 июн 2017, 06:49
Поблагодарили: 74 раз.

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

Сообщение Ben80 » 05 авг 2017, 15:08

А так оно и впрямь не работает, вы правы.

*(int*)0x4E3F92 = 0x63AC60; //Necromancy
*(int*)0x4E4F1E = 0x63AC60; //Logistic
*(int*)0x4E4569 = 0x63AC60; //Attack
*(int*)0x4E45C9 = 0x63AC60; //Defence
Вернуться к началу

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

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

Сообщение AlexSpl » 05 авг 2017, 15:09

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

offlineBen80
Мастер
Мастер
 
Сообщения: 453
Зарегистрирован: 18 июн 2017, 06:49
Поблагодарили: 74 раз.

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

Сообщение Ben80 » 05 авг 2017, 15:13

AlexSpl писал(а):

Цитата:
Тут вот MasterOfPuppets ... тоже, как я понимаю, меняет только операнд для 1 инструкции, и считает, что все будет работать.

Там речь идёт о патче исполняемого файла на диске вручную.

patcher_x86 патчит образ, загруженный в оперативную память. Патч нужно создать и применить с помощью API патчера. Пытаться писать что-либо напрямую в секцию кода игры из кода плагина (DLL) бесполезно. В тонкостях работы патчера не разбирался, но проверьте сами, открыв память процесса в шестнадцатеричном редакторе, что в результате выполнения команды *(int*)0x4E3F92 = 0x63AC60; число 0x63AC60 не будет записано по адресу 0x4E3F92.


На диске вручную имею опыт редактирования, пробовал.
Значит, получается, все редактирование мы можем делать только через API (процедуры) патчера ?
(если мы правим не экзешник)

То, что патчер работает с данными в памяти, а не на винте, это я прекрасно понимаю...
Вернуться к началу

Пред.След.

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

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

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