Ну что можно сказать!!! 1: Находишь адрес жизней своего юнита допустим, делаешь бряк на запись в этот адрес.2: Создаешь авто-скрипт на ту инструкция которая появиться. Типо такой mov [esi+24C],eaxВот пример, метку exit я убрал, она просто не нужна: [ENABLE]Alloc(newmem,128)Label(returnhere)Label(originalcode) newmem: originalcode:mov [esi+24C],eaxjmp returnhere GAME.EXE+12345678:jmp newmemnopreturnhere: [DISABLE]Dealloc(newmem)GAME.EXE+12345678:mov [esi+24C],eax 3: Находишь адреса 2-3 юнитов врага.Как найти адреса жизней врагов?В отладчике жмёшь правой кнопкой мыши на брякнутую инструкцию и выбираешь:"Найти адреса, получающие доступ к этой инструкции". Появится окошко для адресов.После этого ударь по одному разу 2 врагов. И в этом окошке появиться адреса врагов.Добавьте их в список, двойным нажатием левой кнопки мышки.4: В отладчике жмёшь на "Инструменты > Анализ данных/Структур" появится окно, в этом окнедалее жмёшь "Файл > Добавить новую группу" штуки 2 для врагов, поскольку одна будет уже для тебя. 5: В первую группу вбиваешь свой адрес жизней юнита, типо так 12345678-24C24С - Это смещение в брякнутой инструкции к динамическому адресу.Ну и врагов адреса также делаешь в 2 и 3 группу заносишь.Во второй группе где адрес врага, жмёшь правой кнопки мышки и выбираешь "Изменить группу"далее в новом окошке выбираешь группу номер 3 и подтвердить, то есть адреса 2 врагов будут в одной группе.Потом в окне "Анализ структуры" жмёшь на "Структуры > Определить новую структуру" и жмёшь: "Подтвердить > Да > Подтвердить" после этого появиться смещения, адреса и значения. Находишь одно уникальное смещение, то есть твоё значение например 1, а у врагов должно быть по 0-ям. Рекомендую перезапустить игру и проделать заново анализ данных/структур, чтобы точно найти правильное смещение и значение. Типо так: Анализ структур: Смещение-описание Адрес: Значение Адрес: Значение Адрес: Значениебезымянная структура0260 - 4 Bytes 12345678 : 1 12345678 : 0 12345678 : 0 6: Запоминаем смещение 0260 и значение 1 и дорабатываем наш скрипт. Примечание:Я добавил ещё одну инструкцию в скрипт и изменил на её смещение,которая находится чуть выше над этой mov [esi+24C],eax Типо так, этот образец основан на стратегии Red Alert 2: [ENABLE] // Включение скрипта.Alloc(newmem,128) // Выделенная память пустоты на 128 байт.Label(returnhere) // Обратный прыжок.Label(originalcode) // Метка для оригинального кода.Label(originalcode2) // Добавил новую метку. newmem: // Выделенная памятьcmp byte ptr [esi+260],01 // Сравниваю общий регистр с нашим смещением и значение.je originalcode2 // Если равно, то прыгаю на полу изменённый код.jmp originalcode // Делаю прыжок на оригинальный код. originalcode2: // Метка для нашего кода бессмертия.nop // Здесь затёрли ненужную инструкцию test eax,eaxnopmov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.jmp returnhere // Делаем прыжок обратно. originalcode: // Метка для нашего оригинального кода.test eax,eax // Оригинальная инструкция которая находится над брякнутой.mov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.jmp returnhere // Делаем прыжок обратно. GAME.EXE+87654321: // Это модуль файла игры + смещение.jmp newmem // Делаем прыжок на выделенную память.nop // Здесь затёрли остаток части оригинального кода.nop // Чтобы не нарушать логику кода, а то будет вылет из игры.nopreturnhere: [DISABLE] // Выключение скрипта.Dealloc(newmem) // Высвобождение выделенной памяти (Дабы не засорять память).GAME.EXE+87654321: // Это модуль файла игры + смещение.test eax,eax // Оригинальная инструкция которая находится над брякнутой.mov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк. В игре Red Alert 2 скрипт работал, все твои созданные войска и построенные здания были бессмертными. Хотя можно написать скрипт и по другому, вариантов много, кому как удобно.