Цитата(igrik @ 29 Dec 2016, 10:30)

Цитата(DedMorozzz @ 29 Dec 2016, 00:34)

2. сам герой (что бы проверку на тактику добавить)
так же понятнее:
Код
char heroAtt_Tactic = o_BattleMgr->hero[0]->second_skill[HSS_TACTICS];
чем так:
Код
char heroAtt_Tactic = *(char*)(*(int*)(*(int*)0x699420 + 0x53CC) + 201 + 19);
это код навскидку, я его не проверял.Всё накрылось так, если подключил HotA/homm3.h
Код
1>.\dllmain.cpp(391) : error C2227: left of '->ecx' must point to class/struct/union/generic type
1>.\dllmain.cpp(391) : error C2027: use of undefined type 'HookContext'
Всё надо переписывать... Так что пока что отключил
А вот так, спасибо, завелось:
Код
char heroLevel = *(char*)(*(int*)(*(int*)0x699420 + 0x53CC) + 85);
проверял на том что легко отследить, уровень героя
Функа combatMonster_SetUpNewRound вызывается столько раз, сколько юнитов.
Так что как-то по другому надо ловить 1й раунд. Ну или сильно усложнять логику. Аля проверять наличие артов (+скорость) что бы их не отнять
Да и в целом побрутфорсил многие параметры, не подошло под "номер раунда" ничего.
Зато реализовал бонусы к статам от артиллерии и первой помощи в банках. Суммарно функа боя в банке выглядит так:
Код
int __stdcall setBankUnitBonus(LoHook* h, HookContext* c)
{
if ( *(char*)(*(int*)0x699420 + 0x53C5) == 1) { // проверка что бой в банке существ
if(*(int*)(c->ecx + 201 + 19) > 0) { // проверка натиктику
*(int*)(c->esi+80) += 2;
}
if(*(int*)(c->ecx + 201 + 20) > 0) { //проверка на артиллерию
if ( *(int*)(c->ecx + 301 + (13 << 3)) == 4 ) { //13 - слот на кукле для баллисты. 4 - айди баллисты
*(int*)(c->esi + 84) += *(int*)(c->ecx + 201 + 20);
}
}
if(*(int*)(c->ecx + 201 + 27) > 0) { //проверка на палатку
if ( *(int*)(c->ecx + 301 + (15 << 3)) == 6 ) { //15 - слот на кукле для палатки. 6 - айди палатки
*(int*)(c->esi + 88) += *(int*)(c->ecx + 201 + 27) * 2;
}
}
}
return EXEC_DEFAULT;
}
Код
_PI->WriteLoHook(0x4E666A, setBankUnitBonus);
Руководстовался следующей логикой: есть навыки которые дают бонус в бою. Но в банке, в силу определёных обстоятельств этих бонусов нету
Т.о. выдаю альтернативные. Для артилерии +1/2/3 атаки. Для палатки +2/4/6 защиты
А для тактики +1/2/3 скорости. В идеале на 1й раунд только (т.к. тактика в обычном бою действует только в начале). Но пока что всегда +2 сделал
PS: вот тут Феаноровский архив пригодился! Как базу знаний использовал. Повытягивал из него смещения для атаки/защиты монстров. Хоть там и не верные смещения для первичных навыков героя