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

Объединение двух рабочих кодов в один.


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

Видать уже парюсь %) , никак не могу объединить два рабочих кода в один.

1.

[ENABLE]alloc(newMem,64)label(returnHere)newMem:mov dword ptr [esi+00000280],(float)100//fstp dword ptr [esi+edi*4+00000200]jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

2.

[ENABLE]alloc(newMem,64)label(returnHere)newMem:mov dword ptr [esi+00000280],(float)0//fstp dword ptr [esi+edi*4+00000200]jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

2 запускаю после выключения 1 (Оба работают: 1 прописывает 100, где мне нужно, 2 - 0.)

Уже по-моему все варианты переходов (прыжков) перепробовал:

В начале сравнивал с 100 (сотней):

[ENABLE]alloc(newMem,64)label(returnHere)label(Razdet)newMem:cmp dword ptr [esi+00000280],(float)100jbe Razdetmov dword ptr [esi+00000280],(float)100 //Эта часть работаетjmp returnHereRazdet:mov dword ptr [esi+00000280],(float)0 //Эта не работаетjmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

Затем попытался с помощью флага, но здесь вообще ничего не получается:

[ENABLE]alloc(newMem, 128)label(returnHere)label(Razdet)label(_Razdet)registersymbol(_Razdet)newMem:cmp [_Razdet],1jne Razdetmov dword ptr [esi+00000280],(float)0mov [_Razdet],0jmp returnHereRazdet:mov dword ptr [esi+00000280],(float)100mov [_Razdet],1jmp returnHere_Razdet:dd 0Fallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]unregistersymbol(_Razdet)dealloc(newMem)

Мастера подскажите пжлста, где ошибаюсь.

Заранее Болшой СПАСЫБ!!!

Ссылка на комментарий
Поделиться на другие сайты

При каком условии должно быть 100 а при каком 0?При срабатывании инструкции чередовать 100 и 0?

 

Да, инструкция разовая - срабатывает, в моём случае когда одеваешь или снимаешь шмотку с героя.

Ссылка на комментарий
Поделиться на другие сайты

Да, инструкция разовая - срабатывает, в моём случае когда одеваешь или снимаешь шмотку с героя.

[ENABLE]alloc(newMem,64)label(returnHere)label(nol)label(sto)label(load)newMem:cmp dword ptr [esi+00000280],(float)100je nolcmp dword ptr [esi+00000280],(float)0je stojmp loadnol:mov dword ptr [esi+00000280],(float)0 jmp returnHeresto:mov dword ptr [esi+00000280],(float)100jmp returnHereload:mov dword ptr [esi+00000280],(float)100jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

Попробуй так

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Видать уже парюсь %) , никак не могу объединить два рабочих кода в один.

1.

[ENABLE]alloc(newMem,64)label(returnHere)newMem:mov dword ptr [esi+00000280],(float)100//fstp dword ptr [esi+edi*4+00000200]jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

2.

[ENABLE]alloc(newMem,64)label(returnHere)newMem:mov dword ptr [esi+00000280],(float)0//fstp dword ptr [esi+edi*4+00000200]jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

2 запускаю после выключения 1 (Оба работают: 1 прописывает 100, где мне нужно, 2 - 0.)

Уже по-моему все варианты переходов (прыжков) перепробовал:

В начале сравнивал с 100 (сотней):

[ENABLE]alloc(newMem,64)label(returnHere)label(Razdet)newMem:cmp dword ptr [esi+00000280],(float)100jbe Razdetmov dword ptr [esi+00000280],(float)100 //Эта часть работаетjmp returnHereRazdet:mov dword ptr [esi+00000280],(float)0 //Эта не работаетjmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

Затем попытался с помощью флага, но здесь вообще ничего не получается:

[ENABLE]alloc(newMem, 128)label(returnHere)label(Razdet)label(_Razdet)registersymbol(_Razdet)newMem:cmp [_Razdet],1jne Razdetmov dword ptr [esi+00000280],(float)0mov [_Razdet],0jmp returnHereRazdet:mov dword ptr [esi+00000280],(float)100mov [_Razdet],1jmp returnHere_Razdet:dd 0Fallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]unregistersymbol(_Razdet)dealloc(newMem)

Мастера подскажите пжлста, где ошибаюсь.

Заранее Болшой СПАСЫБ!!!

 

На этом форуме уже была статья про объединения 2 -х скриптов в один.

Используй поиск по форуму.

 

Тебе ссюда

http://forum.gamehacklab.ru/topic/1972-obedinenie-dvukh-i-bolee-skriptov-v-odin/?hl=объединение

Изменено пользователем Dison
Ссылка на комментарий
Поделиться на другие сайты

[ENABLE]alloc(newMem,64)label(returnHere)label(nol)label(sto)label(load)newMem:cmp dword ptr [esi+00000280],(float)100je nolcmp dword ptr [esi+00000280],(float)0je stojmp loadnol:mov dword ptr [esi+00000280],(float)0 jmp returnHeresto:mov dword ptr [esi+00000280],(float)100jmp returnHereload:mov dword ptr [esi+00000280],(float)100jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)

Попробуй так

 

Не понимаю зачем нужно это:

 

1.

load:

mov dword ptr [esi+00000280],(float)100

jmp returnHere

 

если есть это:

 

sto:

mov dword ptr [esi+00000280],(float)100

jmp returnHere

 

И здесь:

2.

 

cmp dword ptr [esi+00000280],(float)0

 

значение dword ptr [esi+00000280], в игре может быть и выше 0 и при этом не равняться 100.

 

НО идею использовать две метки и два сравнения сейчас попробую. Спасибо.

На этом форуме уже была статья про объединения 2 -х скриптов в один.

Используй поиск по форуму.

 

Тебе ссюда

http://forum.gamehacklab.ru/topic/1972-obedinenie-dvukh-i-bolee-skriptov-v-odin/?hl=объединение

Прежде чем кидаете ссыль, почитайте её сами.

В моём случае от одной инструкции идут два взаимоисключающих кода.

Ссылка на комментарий
Поделиться на другие сайты

Так у тебя же один адрес отвечает за 2 скрипта

Fallout3.exe+36E4E0

Да. И я об этом уже писал.

 

Прежде чем кидаете ссыль, почитайте её сами.

В моём случае от одной инструкции идут два взаимоисключающих кода.

А что, в этом случае нельзя объединить в один код?

 

Главная проблема не в том, что  один адрес отвечает за 2 скрипта, а в том, что тип float.

Если бы были целые, давно бы уже подобрал переходы (прыжки).

Ссылка на комментарий
Поделиться на другие сайты

В общем, если я правильно понял суть скрипта, что он должен делать, то попробуй этот:

[ENABLE]alloc(newMem,64)label(returnHere)label(originalcode) // новая метка. для оригинального кода (в данном случае она нужна, чтобы не дублировать оригинальную инструкцию)label(set_zero) // новая метка. для записи нуля (0)newMem:cmp [esi+00000280],(float)100 // какое условие должно быть - я так и не понял, но раз ты с сотней сравнивал, то сделал именно по такому условиюjne set_zero // прыжок, если не равноmov dword ptr [esi+00000280],(float)100originalcode:fstp dword ptr [esi+edi*4+00000200] // не забываем про оригинальный кодjmp returnHereset_zero: // сюда попадаем, если при сравнении с сотней сработал прыжок "jne"mov dword ptr [esi+00000280],(float)0jmp returnhereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)
Ссылка на комментарий
Поделиться на другие сайты

NullAlex

К сожалению   :closeyes: тоже не работает.

Я уже перепробовал кучу разных прыжков, пока не получается.

В твоём скрипте, даже, если убрать: 

originalcode:

fstp dword ptr [esi+edi*4+00000200] // не забываем про оригинальный код

и добавить в:

cmp........ [esi+00000280],(float)100   -    dword ptr.

всё равно  (float)100 не записывается по нужному адресу.

 

Ссылка на комментарий
Поделиться на другие сайты

Странно, должен был сработать... Ты несколько раз одевал и снимал шмотку в игре? Начальное значение может быть больше 100, а это значит, что первым делом оно установится равным 100, а потом уже - на ноль.

Но на всякий случай, попробуй этот: (только в игре не забудь снять и одеть шмотку несколько (больше одного) раз)

[ENABLE]alloc(newMem,2048)label(returnHere)label(originalcode)newMem:cmp [esi+00000280],(float)100jne @Fmov dword ptr [esi+00000280],(float)0@@:mov dword ptr [esi+00000280],(float)100originalcode:fstp dword ptr [esi+edi*4+00000200]jmp returnHereFallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]dealloc(newMem)
Ссылка на комментарий
Поделиться на другие сайты

NullAlex

Большое спасибо за помощь. Я уже разобрался в чём дело, вот рабочий код (на 100 %). Подробнее опишу в чём дело и выложу уже готовый код

в форуме "скрипты и таблицы" и сюда выложу ссылку.

alloc(newMem, 128)label(returnHere)label(Razdet_1)label(Razdet_2)label(Razdet_3)label(Razdet_4)label(_Razdet)registersymbol(_Razdet)newMem:cmp [_Razdet],3je Razdet_4cmp [_Razdet],2je Razdet_3cmp [_Razdet],1je Razdet_2cmp [_Razdet],0je Razdet_1Razdet_1:mov dword ptr [esi+00000280],(float)100mov [_Razdet],1jmp returnHereRazdet_2:mov [_Razdet],2jmp returnHereRazdet_3:mov dword ptr [esi+00000280],(float)0mov [_Razdet],3jmp returnHereRazdet_4:mov [_Razdet],0jmp returnHere_Razdet:dd 0Fallout3.exe+36E4E0:jmp newMemnopnopreturnHere:[DISABLE]Fallout3.exe+36E4E0:fstp dword ptr [esi+edi*4+00000200]unregistersymbol(_Razdet)dealloc(newMem)
Ссылка на комментарий
Поделиться на другие сайты

Для тех, кто читал:

Решение проблемы и полный рабочий скрипт выложен в форуме "Скрипты и таблицы":

http://forum.gamehacklab.ru/topic/3010-skripty-dlia-fallout-3-ot-garik66/?p=20478

 

Эту тему можно закрыть.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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