Объявления

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

Улучшение ИИ

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

Re: Улучшение ИИ

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

У меня функция sub_0052C0B0 имеет 5 параметров, это правильно? Какие из них навыки a4, a5?
Код: Выделить всё
int __userpurge sub_0052C0B0@<eax>(int a1@<edx>, int a2@<ecx>, double a3@<st0>, int a4, int a5)


Сам алгоритм выбора и грамотной прокачки сделал, всего несколько строк, но какой будет эффект!
Осталось только разобраться с синтаксисом HiHook.
Последний раз редактировалось as239 04 май 2020, 12:33, всего редактировалось 1 раз.
Вернуться к началу

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

Re: Улучшение ИИ

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

AlexSpl писал(а):

Цитата:
Вижу что ИИ берет сундук, делаю сейв, смотрю а у него 62 опыта.

Может, в сундуке арт был?

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

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

Re: Улучшение ИИ

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

Что не так с хайком, получаю вылет:
Код: Выделить всё
int __stdcall LevelUP(HiHook* hook, int a1, int a2, int a3, int a4, int a5)
{
   return THISCALL_5(int, hook->GetDefaultFunc(), a1, a2, a3, a4, a5);
   
}
   _PI->WriteHiHook(0x52C0B0, SPLICE_, EXTENDED_, THISCALL_, LevelUP);
Вернуться к началу

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: Улучшение ИИ

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

Прототип этой функции int __stdcall AIGetSecSkill(int leftSkill, int rightSkill);

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

Попробуйте так:
Код: Выделить всё
int __stdcall AIGetSecSkill(HiHook* h, int leftSkill, int rightSkill)
{
   return CALL_2(int, __stdcall, h->GetDefaultFunc(), leftSkill, rightSkill);
}

...

_PI->WriteHiHook(0x52C0B0, SPLICE_, EXTENDED_, STDCALL_, AIGetSecSkill);


Поправил. Пропустил __stdcall.
Последний раз редактировалось AlexSpl 04 май 2020, 14:01, всего редактировалось 4 раз(а).
Вернуться к началу

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

Re: Улучшение ИИ

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

AlexSpl писал(а):

Прототип этой функции int __stdcall GetSecSkill(int leftSkill, int rightSkill);

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


Вот это тоже вылетает:
Код: Выделить всё
int __stdcall LevelUP(HiHook* hook, int a1, int a2)
{
   return THISCALL_2(int, hook->GetDefaultFunc(), a1, a2);
   
}
   _PI->WriteHiHook(0x52C0B0, SPLICE_, EXTENDED_, THISCALL_, LevelUP);
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 04 май 2020, 13:56

Анатолий, написал в личку, посмотри, пожалуйста.
Вернуться к началу

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

Re: Улучшение ИИ

Сообщение Ben80 » 04 май 2020, 14:02

А хайхук всегда пишется как __stdcall, независимо от оригинальной функции ? (которая может быть THISCALL, FASTCALL и тд)
Вернуться к началу

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: Улучшение ИИ

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

Хотя в ecx, скорее всего, передаётся герой. Тогда должен быть __thiscall.

Цитата:
А хайхук всегда пишется как __stdcall, независимо от оригинальной функции ? (которая может быть THISCALL, FASTCALL и тд)

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

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

Re: Улучшение ИИ

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

Так тоже вылет:
Код: Выделить всё
int __stdcall LevelUP(HiHook* h, int a1, int a2)
{

   return STDCALL_2(int, h->GetDefaultFunc(), a1, a2);
   
}
   _PI->WriteHiHook(0x52C0B0, SPLICE_, EXTENDED_, STDCALL_, LevelUP);
Вернуться к началу

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: Улучшение ИИ

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

А так?

Код: Выделить всё
int __stdcall LevelUP(HiHook* h, _Hero_* hero, int a1, int a2)
{

   return CALL_3(int, __fastcall, h->GetDefaultFunc(), hero, a1, a2);
   
}

...

_PI->WriteHiHook(0x52C0B0, SPLICE_, EXTENDED_, FASTCALL_, LevelUP);


Это, походу, __thiscall, заменённый компилятором на __fastcall. Такое бывает.

Пропустил героя.

* * *
Посмотрю позже, почему в стек помещается три аргумента, а функция чистит за собой только 2. Пока понятно, что в ecx - герой, в edx - первый навык, в стеке - второй.
Последний раз редактировалось AlexSpl 04 май 2020, 14:32, всего редактировалось 1 раз.
Вернуться к началу

Пред.След.

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

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

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