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


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

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

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

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

Сообщение AlexSpl » 29 май 2020, 11:35

Пример использования:

Код: Выделить всё
char* buffer = new char[1024];
char* s = " - is a very-very large string...";
   
strcpy(buffer, *(char**)(0x678420 + 0x24 + 69 * 0x28));
strcat(buffer, s);
*(int*)(0x678420 + 0x24 + 69 * 0x28) = (int)buffer;
Вернуться к началу

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

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

Сообщение as239 » 29 май 2020, 12:51

Не работает:
Код: Выделить всё
   char *strSpec = *(char**)(0x678420 + 0x24 + 69 * 0x28);
//меняю strSpec, в отладчике вижу что поменялась как надо
   *(int*)(0x678420 + 0x24 + 69 * 0x28) = (int)strSpec;//Эта строка скорее всего не требуется, изменение описания усилителя работает и без нее

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

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

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

Сообщение AlexSpl » 29 май 2020, 13:03

Я тоже правым. Может, Вы хук рановато ставите?

Цитата:
//Эта строка скорее всего не требуется, изменение описания усилителя работает и без нее

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

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

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

Сообщение as239 » 29 май 2020, 13:05

Цитата:
Я тоже правым. Может, Вы хук рановато ставите?

Вот здесь при старте новой игры, по идее уже все должно быть давным давно загружено.
Код: Выделить всё
   _PI->WriteLoHook(0x4BFB30, NewGame);
Вернуться к началу

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

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

Сообщение AlexSpl » 29 май 2020, 13:09

С хуком всё в порядке.

Изображение
Вернуться к началу

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

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

Сообщение as239 » 29 май 2020, 13:16

Оказывается на Исре работает, а на Видомине нет :smile5: я на ней тестировал.
Вернуться к началу

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

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

Сообщение AlexSpl » 29 май 2020, 14:16

Что-то подозрительно число 69 похоже на порядковый номер Исры :smile1:
Вернуться к началу

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

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

Сообщение as239 » 29 май 2020, 14:25

Точно! И видно же что в файле 2-е строки.
А строки идут по id героям.
Теперь все ок.
Вот что получилось по итогу, технически все работает:
Код: Выделить всё
const float NecroSpecKt = 0.010000001;
const float NecromancyAmplifierKt = 0.02;

void ReplaceChars(char *Str, char *StrSearch, char *StrReplace){
   
   char *p = strstr(Str, StrSearch);
   if (!p) return;

   int Delta = strlen(StrSearch) - strlen(StrReplace);
   memmove(p, p + Delta, strlen(p + Delta) + 1);

   for (int i = 0; i < strlen(StrReplace); i++) {
      *(p + i) = StrReplace[i];
   }

}

void SetNecromancyKt(){

   char *strNA = *(char**)(0x6A7874 + 48 * 4);
   char *strSpec = *(char**)(0x678420 + 0x24 + 69 * 0x28);//69

   int NecromancyAmplifierKtAdress, NecroSpecKtAdress;
   if (HWRulesOn && GamePlayChangesOn){
      NecromancyAmplifierKtAdress = (int)&NecromancyAmplifierKt;
      NecroSpecKtAdress = (int)&NecroSpecKt;

      ReplaceChars(strNA, "10%.", "2%.");
      ReplaceChars(strSpec, "5%", "1%");
   }
   else
   {
      NecromancyAmplifierKtAdress = 0x63B8D0;
      NecroSpecKtAdress = 0x63EAE4;

      ReplaceChars(strNA, "2%.", "10%.");
      ReplaceChars(strSpec, "1%", "5%");
   }

   *(int*)(0x678420 + 0x24 + 78 * 0x28) = (int)strSpec;
   _PI->WriteDword(0x4E40FE + 2, NecromancyAmplifierKtAdress);
   _PI->WriteDword(0x4E3F90 + 2, NecroSpecKtAdress);

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

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

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

Сообщение AlexSpl » 29 май 2020, 14:42

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

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

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

Сообщение as239 » 29 май 2020, 16:28

Как можно сгенерить заданного героя?
В таверне или стартовым.
Вернуться к началу

Пред.След.

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

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

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