-
AlexSpl
имя: Александр
- Эксперт
-
- Сообщения: 5587
- Зарегистрирован: 17 сен 2010, 12:58
- Пол:
- Награды: 14
-
-
- Поблагодарили: 2185 раз.
|
AlexSpl » 02 сен 2017, 20:45
Посмотрите условный переход по адресу 56B3B4h. Далее, для порядка стоимость заклинания в MP нужно также изменить по адресам 56B5AAh и 430532h (LoHook, стоимость в eax). Два эквивалентных патча: - Код: Выделить всё
_PI->WriteHexPatch(0x56B3B4, "90 90 90 90 90 90");
- Код: Выделить всё
_PI->WriteHexPatch(0x56B3B4, "EB 04");
И вообще с трудом там разобрался, какой участок кода к какому заклинанию относится. Лично Вы как с этой проблемой справились ? Свич идет по некоему числу, загруженному в ECX: 004446E5 lea ecx, [ebx-1Bh] Что это за число вообще ? Оно не совпадает с обычным ID заклинания. 1Bh = 27 - ID первого заклинания, у которого есть длительность: раунд/сила магии (Shield). Если посмотрите таблицу индексов для этого свитча по адресу 445178, то увидите там много одинаковых байтов (20h), соответствующих индексу по умолчанию (default): - Код: Выделить всё
.text:00445178 db 4, 5, 6, 7 ; indirect table for switch statement .text:00445178 db 20h, 8, 20h, 20h .text:00445178 db 20h, 20h, 9, 0Ah .text:00445178 db 0Bh, 0Ch, 0Dh, 0Eh .text:00445178 db 20h, 0Fh, 10h, 11h .text:00445178 db 12h, 13h, 14h, 15h .text:00445178 db 16h, 17h, 20h, 18h .text:00445178 db 19h, 1Ah, 1Bh, 1Ch .text:00445178 db 20h, 20h, 20h, 20h .text:00445178 db 20h, 20h, 20h, 20h .text:00445178 db 1Dh, 20h, 1Eh, 20h .text:00445178 db 1Fh
В начале этой таблицы (до 4-ки) должно было быть ещё 27 (1Bh) таких индексов (20h), соответствующих заклинаниям с номерами 0 - 26. И код выглядел бы так: - Код: Выделить всё
lea ecx, [ebx]
Либо ID заклинания (ebx) напрямую выступало бы индексом (lea ecx, [ebx] <=> mov ecx, ebx). Но компилятор оптимизирует код, в том числе его размер. Поэтому первые 27 одинаковых индексов он из таблицы выкинул и заменил команду на - Код: Выделить всё
lea ecx, [ebx-27]
|