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


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

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

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
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 » 31 окт 2020, 15:05

В свойствах не знаю, есть ли. Но размер bool - implementation defined и может отличаться от 1. Попробуйте в каком-нибудь работающем плагине в sprintf() вывести строку с sizeof(bool). Как вариант, замените везде bool на char, true на 1, а false - на 0.

А какая у Вас версия игры? Может быть конфликт со встроенными патчами.

Ещё можете скинуть Вашу dll, и я посмотрю, в чём там дело.
Вернуться к началу

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

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

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

AlexSpl писал(а):

В свойствах не знаю, есть ли. Но размер bool - implementation defined и может отличаться от 1. Попробуйте в каком-нибудь работающем плагине в sprintf() вывести строку с sizeof(bool). Как вариант, замените везде bool на char, true на 1, а false - на 0.

Проверил, проблема не в bool. Заменял bool на char и значения на 0 и 1. Все без изменений.

AlexSpl писал(а):

Ещё можете скинуть Вашу dll, и я посмотрю, в чём там дело.

https://drive.google.com/file/d/1hQM2g2 ... sp=sharing
Вернуться к началу

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 » 31 окт 2020, 16:28

Цитата:
Проверил, проблема не в bool. Заменял bool на char и значения на 0 и 1. Все без изменений.

Да, здесь он не виноват. Был просто случай с разницей в размере между С++ и C#.
Вернуться к началу

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 » 31 окт 2020, 17:18

Посмотрел. Ещё раз проверьте, установлено ли у Вас выравнивание членов структур в 1 байт (делать это нужно для каждого плагина и для каждой конфигурации). Проверьте также, чему равна константа HSS_FIRST_AID (наведите на неё курсор, должна быть 27). В Вашем плагине уровень навыка читается не по смещению 0xE4, а по смещению 0xF3.
Вернуться к началу

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

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

Сообщение Rolex » 31 окт 2020, 17:32

AlexSpl писал(а):

Посмотрел. Ещё раз проверьте, установлено ли у Вас выравнивание членов структур в 1 байт (делать это нужно для каждого плагина и для каждой конфигурации). Проверьте также, чему равна константа HSS_FIRST_AID (наведите на неё курсор, должна быть 27). В Вашем плагине уровень навыка читается не по смещению 0xE4, а по смещению 0xF3.

Я выравнивание членов структур в 1 байт ставлю всегда первым делом для каждого создаваемого плагина. Все стоит. HSS_FIRST_AID = 27.
Вернуться к началу

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 » 31 окт 2020, 17:38

Тогда мистика какая-то. Ваша версия превращает вот это:

hero->second_skill[HSS_FIRST_AID]

Код: Выделить всё
mov     ebp, [edx+ecx*4+53CCh]
test    ebp, ebp
jz      loc_741C1151
cmp     byte ptr [ebp+0E4h], 0

в вот это:

Код: Выделить всё
mov     edi, [eax+ecx*4+53CCh]
test    edi, edi
jz      loc_74C511BD
cmp     byte ptr [edi+0F3h], 0

Налицо неправильное смещение.
Вернуться к началу

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

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

Сообщение Rolex » 31 окт 2020, 17:42

Может какие-то особенности в работе студий. Поставьте себе ту версию среды разработки, которая стоит у меня сейчас и попробуйте собрать ваш код в ней. Кроме того, что вы описали в первом сообщении этой темы (выравнивание структур и Release) я больше ничего не менял. Все настройки по умолчанию. Вот ссылка на мою Visual Studio 2015:
http://nnmclub.to/forum/viewtopic.php?t=961357
Вернуться к началу

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 » 31 окт 2020, 17:47

Есть же бесплатные версии. Даже 2019 Community Edition. А для плагинов отлично подходит 2008 Express Edition, которая не лезет в Интернет и очень быстрая.

Тут два варианта: установить другую версию студии (но я не думаю, что проблема в ней всё-таки) либо переписать строчку выше без использования структуры из homm3.h (потому что, я посмотрел, все остальные смещения в порядке).
Вернуться к началу

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

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

Сообщение Rolex » 31 окт 2020, 17:50

Там готовый серийник в комплекте. 2008, по-моему, уже явно устаревшая.

Цитата:
либо переписать строчку выше без использования структуры из homm3.h

Вероятно, это будет быстрее.
Вернуться к началу

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 » 31 окт 2020, 17:52

Цитата:
2008 по-моему уже явно устаревшая.

Смотря для каких целей Вы её используете.

Давайте попробуем переписать строчку. Замените везде hero->second_skill[HSS_FIRST_AID] на *(char*)((int)hero + 201 + 27)
Вернуться к началу

Пред.След.

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

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

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

cron