Я ставил хуки на функции вычисления Fight Value и AI value отрядов и умножал базовые показатели командира на треугольные числа по порядку его уровней. 
Code: 
 proc Учёт_командира_ИИ 
        mov [Temp], 4; AI value 
        jmp Учёт_командира_ИИ3 
endp 
 
proc Учёт_командира_ИИ2 
        sub edx, 1Ch 
        mov [Temp], 0; Fight Value 
endp 
 
proc Учёт_командира_ИИ3; можно использовать EBX, EDI, ESI без сохранения 
        xchg eax, ebx; передать значение в долгосрочный регистр 
        lea esi, [edx-_Hero_.Количество_существ_в_слоте_0]; смещаем до начала структуры героя 
        GetHeroStruc HERO_Макс 
        lea ecx, [eax+156*sizeof._Hero_] 
 .if signed esi >= eax & signed esi < ecx; структура слотов для вычисления лежит в пределах структуры героя 
        stdcall Вычисление_AI_value_командира, esi 
        add ebx, eax 
 .endif 
        xchg eax, ebx; возвратить в eax 
        ret 
endp 
 
proc Вычисление_AI_value_командира 
        push ebx 
        mov ecx, [esp+8] 
        xor ebx, ebx; обнуляем для инициализации 
   .if Option_Commanders; опция "Командиры" включена 
        imul eax, [ecx+_Hero_.Номер], Размер_структуры_командира 
        add eax, Адрес_структуры_командиров 
     .if [eax+_Commander_.Доступность] & ~[eax+_Commander_.Жив_или_мёртв]; командир доступен и жив 
        mov ecx, [eax+_Commander_.Тип] 
        add ecx, CR_Паладин_Атакующий; получить тип монстра 
        imul ecx, sizeof._Creature_ 
        add ecx, [Temp]; Fight Value или AI value 
        mov ecx, [ecx+Адрес_структуры_монстров+_Creature_.Fight_Value]; получить базовое значение из структуры монстра 
        mov eax, [eax+_Commander_.Текущий_уровень]; начинается с нуля 
        mov eax, [eax*4+Треугольные_числа]; получить условный множитель, зависящий от уровня командира 
        imul eax, ecx; умножить на базовое значение 
        add ebx, eax; добавить к общему показателю 
     .endif 
   .endif 
        xchg eax, ebx; вернуть результат функции 
        pop ebx 
        ret 4 
endp 
 
Треугольные_числа: dd 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, 1326, 1378, 1431,1485,1540,1596,1653,1711,1770,1830,1891,1953,2016,2080,2145,2211,2278,2346,2415,2485,2556,2628,2701,2775,2850,2926,3003,3081,3160,3240,3321,3403,3486,3570,3655,3741,3828,3916,4005,4095
  
Правда, я сам так и не понял, помогло ли это. Скорее всего, структура героя в ряде случаев копируется в стек и поэтому код её не ловит, потому что учитывает только основной блок структур героев.
			  
			
			
  
Circle of destruction, hammer comes crushing 
Powerhouse of energy 
Whipping up a fury, dominating flurry 
We create the battery
			
				
(This post was last modified: 07.07.2017 07:56 by MOP.)
 
			 
		 |