lamalamaz Опубликовано 6 ноября, 2014 Поделиться Опубликовано 6 ноября, 2014 Здравствуйте Геймхаклаберы! Есть такая инструкцияmov edx,[ecx+000002D4] (срабатывает только когда наносится урон)Где edx - количество жизней после урона[ecx+000002D4] - количество жизней после урона. Значения верные смотрел из инструкции которая пишет mov [ebp+000002D4],eax(не взял ее потому что часто обращается даже когда урон не наносится) eax=edx,[ecx+000002D4]=[ebp+000002D4]. все значения целое 4 байта Суть в том что хочу высчитать сам урон.написал вот что:pushadmov eax,edx //кол-во после урона сохраняем в eaxmov ebx,[ecx+000002D4] //кол-во до сохраняем в ebxsub ebx,eax //до урона-после урона=сам уронsub [ecx+000002D4],ebx // от жизней отнимаем сам уронpopadmov edx,[ecx+000002D4] //оригинальная инструкцияjmp returnhereСуть в том что не работает, мобы умирают с одной тычки. Подскажите правильно ли вообще так обсчитывать? И как вычислить урон иным методом если тут написание не верно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 6 ноября, 2014 Поделиться Опубликовано 6 ноября, 2014 Не задавался таким вопросом, но попробую...) Где edx - количество жизней после урона[ecx+000002D4] - количество жизней после урона.Мне одному кажется странным, что "количество жизней после урона" - в двух регистрах содержится? По-моему, использование команды pushad здесь не уместно (хотя может у меня ошибочное мнение на его счет).Если все же представить, что:ebx - "прошлое" значение здоровья[ecx+000002D4] - количество здоровья после получения уронаТо я бы написал как-нибудь так:push ebpmov dword ptr ebp,edx // устанавливаем текущее значение в ebpsub dword ptr ebp,[ecx+000002D4] // отнимаем остаток здоровья от "прошлого" значения здоровья, и в ebp получаем уронpop ebpА дальше, чтобы проверить, правильно-ли подсчитано количество урона, то можно зарегистрировать метку (4 байта), и установить в нее значение ebp, затем добавить в таблицу имя метки, и смотреть ее значение.Пример:Далее - в СЕ клацаем на кнопку "Добавить адрес", ставим тип: 4 байта, а в качестве адреса вводим: damageНажимаем "OK", включаем скрипт, получаем урон, смотрим на значение метки damage (в таблице)P.S.И да - пользуемся тегом [code ] (без пробелов). Надоедает посты править уже...P.S. #2А вообще, должна быть инструкция, которая отнимает из здоровья нужное количество единиц урона, посмотри выше по коду в отладчике.[ENABLE]label(newmem,2048)label(returnhere)label(damage)registersymbol(damage)newmem:push ebpmov dword ptr ebp,edx // устанавливаем текущее значение в ebpsub dword ptr ebp,[ecx+000002D4] // отнимаем остаток здоровья от "прошлого" значения здоровья, и в ebp получаем уронmov dword ptr [damage],ebp // записываем в метку damage количество урона// дальше выполняем оригинальный кодdamage:dd 0// инструкция[DISABLE]unregistersymbol(damage)dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 6 ноября, 2014 Автор Поделиться Опубликовано 6 ноября, 2014 (изменено) Не задавался таким вопросом, но попробую...) Мне одному кажется странным, что "количество жизней после урона" - в двух регистрах содержится? По-моему, использование команды pushad здесь не уместно (хотя может у меня ошибочное мнение на его счет).Если все же представить, что:ebx - "прошлое" значение здоровья[ecx+000002D4] - количество здоровья после получения уронаТо я бы написал как-нибудь так:push ebpmov dword ptr ebp,edx // устанавливаем текущее значение в ebpsub dword ptr ebp,[ecx+000002D4] // отнимаем остаток здоровья от "прошлого" значения здоровья, и в ebp получаем уронpop ebpА дальше, чтобы проверить, правильно-ли подсчитано количество урона, то можно зарегистрировать метку (4 байта), и установить в нее значение ebp, затем добавить в таблицу имя метки, и смотреть ее значение.Пример:Далее - в СЕ клацаем на кнопку "Добавить адрес", ставим тип: 4 байта, а в качестве адреса вводим: damageНажимаем "OK", включаем скрипт, получаем урон, смотрим на значение метки damage (в таблице)P.S.И да - пользуемся тегом [code ] (без пробелов). Надоедает посты править уже...P.S. #2А вообще, должна быть инструкция, которая отнимает из здоровья нужное количество единиц урона, посмотри выше по коду в отладчике. Спасибо NullAlex!Вроде разобрался что к чему.Теперь по мне бьют в 4 раза меньше, а я луплю по врагам в 3 раза сильнее . А то Onehit и God уж очень портят впечатления, а так вроде как повысил дамаг и дефенс играть куда интереснее [ENABLE]label(newmem,2048)label(returnhere)label(damage)registersymbol(damage)newmem:push ebpmov dword ptr ebp,edx // устанавливаем текущее значение в ebpsub dword ptr ebp,[ecx+000002D4] // отнимаем остаток здоровья от "прошлого" значения здоровья, и в ebp получаем уронmov dword ptr [damage],ebp // записываем в метку damage количество урона// дальше выполняем оригинальный кодdamage:dd 0// инструкция[DISABLE]unregistersymbol(damage)dealloc(newmem) Изменено 6 ноября, 2014 пользователем lamalamaz Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения