Перейти к содержанию

Рекомендуемые сообщения

Здравствуйте Геймхаклаберы!

 

Есть такая инструкция

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
Суть в том что не работает, мобы умирают с одной тычки. Подскажите правильно ли вообще так обсчитывать? И как вычислить урон иным методом если тут написание не верно.
Ссылка на комментарий
Поделиться на другие сайты

Не задавался таким вопросом, но попробую...)

 

Где 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)
Ссылка на комментарий
Поделиться на другие сайты

Не задавался таким вопросом, но попробую...)

 

Мне одному кажется странным, что "количество жизней после урона" - в двух регистрах содержится? ^_^

По-моему, использование команды 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 уж очень портят впечатления, а так вроде как повысил дамаг и дефенс играть куда интереснее :-D

[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
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.