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

В Cheat Engine можно сделать так, чтобы значение ходило по определенному кругу?


Razi

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

1) Приведу пример: в адресе мне нужно, чтобы значение  двигалось по кругу, в пределах от 0 до 9.

Если значение = 9 и при нажатии гарячей клавиши, добавляющей 1 к значению, значение становилось 0. И наоборот, если значение = 0, то при нажатии гарячей клавиши,  отнимающей 1 от значения, значение становилось 9.

 

2) Если нельзя сделать вышеуказанный способ, то можно ли хотя бы заморозить значение, чтоб оно могло изменяться только от 0 до 9 и больше никак?

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

1) Приведу пример: в адресе мне нужно, чтобы значение  двигалось по кругу, в пределах от 0 до 9.

Razi, дал бы ссылку на свои скрипты с циклом, но для пользователей пока доступ в раздел "Скрипты" закрыт.

поэтому вот пример:

Razi, если что не понятно, задавай вопросы поясню.

[ENABLE]aobscan(address24, 8D XX XX XX XX XX XX F3 A5 E8 XX XX XX XX FF XX XX XX XX XX XX 8D XX XX XX XX XX XX)alloc(newMem24, 64)label(returnHere24)label(mylabel24)registersymbol(address24)newMem24:lea esi,[eax+edx+00000DB8]repe movsdcmp [eax+550c],18e          // 398 всего 399 предметов от 0 до 398je mylabel24mov [eax+5490],fe           // Повышаем прочность предметаmov [eax+5494],feadd [eax+550c],01           // Просматриваем все предметы в игреjmp returnHere24            // и выбираем нужныйmylabel24:mov [eax+550c],0jmp returnHere24address24:jmp newMem24db 90 90 90 90returnHere24:[DISABLE]address24: {TH.exe+20CB5:}lea esi,[eax+edx+00000DB8]repe movsdunregistersymbol(address24)dealloc(newMem24)  
Ссылка на комментарий
Поделиться на другие сайты

А что это за чит такой, чтобы там нужны были таки условия?

 

Два скрипта. Добавить в таблицу CE и назначить клавиши.

 

Адрес поставить свой или через зарегистрированную метку, или через указатель, или иначе..

 

{$lua}local a = readInteger("test.exe+5B5A4") + 1if(a > 9 ) then a = 0 endwriteInteger("test.exe+5B5A4", a)[Enable][Disable]
{$lua}local a = readInteger("test.exe+5B5A4") - 1if(a < 0 ) then a = 0 endwriteInteger("test.exe+5B5A4", a)[Enable][Disable]
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

А что это за чит такой, чтобы там нужны были таки условия?

Это меняет специальное оружие в Symphony of the Night поэтому нужен переход с последнего оружия на первое и наоборот. Можете описать все действия как для домохозяек, потому что только начал познавать Cheat Engine. Адрес вот 009E3C1C.

Garik66, Просмотрел код, насколько понял

cmp [009E3C1C],10 - в decimal

je mylabel24

если правильно понимаю пишет je - jump if equal, то в моем случае нельзя чтобы значение в адресе становилось 10, нельзя его туда пускать, (даже на доли секунды) потому что вызывает появление глюков, артефактов. Или все же этот код совсем не пускает значение на 10? И с 9 прыгать тоже нельзя. Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

Razi

Не 

cmp [009E3C1C],10 - в decimal

a

cmp [009E3C1C],9 je mylabel

ну и не забывай про

add [009E3C1C],01 jmp returnHere

и

mylabel:mov [009E3C1C],0jmp returnHere

Ну расписывать это долго, потому что работа скрипта будет зависеть от выбранной тобой инструкции и правильности написания скрипта.

Поэтому попробуй, напиши скрипт и, если не сработает, выложи его сюда - поправим.   


ЗЫ: у меня от 0 до 398 (398 в HEX = 18e, если проскочит 399, то у меня будет вылет из игры)

у тебя от 0 до 9

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

Garik66,  Хорошо, буду пробовать.

Наверно, написал много чего лишнего? Работает, но не совсем так как надо. Правда, пару раз игра сначала вылетала, но, путем проб и ошибок, что-то сделал.

И самое главное с 10 на 1 прыгает, а вот в обратную сторону с 0 на 9: нет, и незнаю как это настроить: добавил дополнительно "cmp" и "label2" но, без результата.

 

[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheataobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(mylabel)label(mylabel2)registersymbol(address)newmem:mov [eax+ecx],ebxand edx,001FFFFCcmp [009E3C1C],A          ---> все таки если с 9 на 0 прыгать, то на последнее оружие не переключиться, а оно на 9, но на 10 работаетje mylabel                        ---> если поставить  add [009E3C1C],01   то оружие молниеносно само переключаетсяjmp returnHeremylabel:mov [009E3C1C],1jmp returnHere cmp [009E3C1C],0je mylabel2jmp returnHere mylabel2:mov [009E3C1C],9jmp returnHereaddress:jmp newmemnopnopnopnopreturnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebxand edx,001FFFFCunregistersymbol(address)dealloc(newmem)
Изменено пользователем NullAlex
Ссылка на комментарий
Поделиться на другие сайты

Razi, я выше писал:

 

что работа скрипта будет зависеть от выбранной тобой инструкции

поэтому вначале разберём разницу м/у инструкцией, которую выбрал я, и инструкцией, которую выбрал ты:

 

1. Я выбрал "разовую" инструкцию. ("Разовая"  - одно событие в игре -> одно срабатывание инструкции, у меня событие - нужно положить предмет из рук Героя в инвентарь, при этом происходит обращении инструкции к ID предмета (в дальнейшем будем называть IDi)).

Ты выбрал "постоянно работающую" инструкцию, т.е. инструкция часто читает из адреса ID оружия (в дальнейшем будем называть IDw), поэтому у тебя:

 

если поставить  add [009E3C1C],01   то оружие молниеносно само переключается

 

2. Я выбрал инструкцию, после которой (по-видимому) уже нету записи в IDi ниже по коду игры. поэтому у меня 398.

У тебя же (я так думаю.... :) ) происходит ниже по коду запись в IDw, поэтому у тебя:

 

все таки если с 9 на 0 прыгать, то на последнее оружие не переключиться, а оно на 9, но на 10

 

Как исправить 2. - ты уже сделал (т.е. просто увеличить на 1 ->10). Хотя я думаю это ты сделал ошибку в скрипте, т.к. ты сам прописываешь в 

IDw 9, вот этот участок у тебя в скрипте:

mylabel2:mov [009E3C1C],9

По 1. пункту:

1.1. Можно поискать "разовую" инструкцию к  IDw. Выбрать удобное событие в игре. (Но это будем делать в самом конце, если ничего другого не получиться.)

1.2. Назначить горячую клавишу на инструкцию в инъекции (add [009E3C1C],01). (Это более сложный вариант, я делал подобное в игре один раз, при нажатии на ПКМ (в моём случае горячая клавиша - ПКМ) у меня работал Блинк-телепорт, это вариант будем пробовать, если не сработает третий вариант).

1.3. Сделать доп фильтр (а точнее флаг) на разовое срабатывание  инструкции. Это более простой вариант - с него и будем начинать.

 

Сейчас покурю, подумаю и попробую написать скрипт.

 


Попробуй этот скрипт: Инструкции и пояснения внутри.


На всякий случай сделал тебе табличку. Вдруг ты не всё ещё делал (может Хоткеи не назначал). В табличке "Горячая" клавиша - "Numpad +"

ForRazi.CT

[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheataobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(code)label(flag)registersymbol(flag)registersymbol(address)newmem:mov [eax+ecx],ebx        // Оригинальные инструкции игры.and edx,001FFFFCcmp byte ptr [flag],1    // Если flag не равен 1, то ничего не делаем.jne returnHere           // Возвращаемся в код игры. mov byte ptr [flag],0    // Обнуляем flag, чтобы инъекция сработала один раз.                         // Если flag равен 1, то выполняем нашу инъекцию, т.е. переключаем оружие.cmp [009E3C1C],9         // Всего 10 видов оружия в игре (IDw от 0 до 9)  je code                  // Если IDw равно 9, то прыгаем на метку code, где присвоим IDw 0.     inc [009E3C1C]           // Увеличиваем IDw на 1, т.е. переключаемся на следующий вид оружия.jmp returnHere           // Возвращаемся в код игры.code:                    // Если предыдущий вид оружия был последний (IDw=9), то переключаемся наmov [009E3C1C],0         // первый вид оружия (IDw=0).                            jmp returnHere           // Возвращаемся в код игры. flag:                    // Добавь в таблицу адрес с адресом "Flag" (без кавычек), названиемdb 0                     // "Переключиться на следующий вид оружия", тип "1 байт" и назначь на него                         // удобную "Горячую" клавишу - установить значение 1.address:jmp newmemdb 90 90 90 90returnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebxand edx,001FFFFCunregistersymbol(flag)unregistersymbol(address)dealloc(newmem) 
Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Все хорошо, но оружие переключается с 0,1,2,3...9,0 и т.д., а мне еще дополнительно нужно чтоб переключалось с 9,8,7...3,2,1,0,9. То есть дополнительно на вычитание.

Вот почему пытался впихнуть в код дополнительное сравнение и прыжок на другое значение. В моем коде работает 0,1,2...9,0, а не работает прыжок с 0 на 9 , то есть 9,8...3,2,1,0,9 так прыгать, не хочет.

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

Все хорошо

Т.е. скрипт работает? Отлично.

 

а мне еще дополнительно нужно чтоб переключалось с 9,8,7...3,2,1,0,9. То есть дополнительно на вычитание.

Razi, это не сложно сделать.

Но вначале, не хочешь сам подумать, как это сделать. Ведь интересно же самому додуматься.

 

Давай сделаем так, если у тебя не получиться сделать за день, то завтра напиши мне в ЛС и я тебе помогу тогда.   

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

Я то сделал так уже на своем коде, добавил в таблицу второй скрипт с прыжком с 0 на 9 и все работает в игре, но Cheat Engine включить может два скрипта одновременно, а выключить не может. А в вашем коде, так понимаю нужно добавить второе сравнение если 0 то прыгать на 9, но в моем коде так не получилось. Но помимо этого нужно настроить, чтоб оружие переключалось в обратную сторону дополнительно.

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

Razi, Ну раз невтерпёж.

Сейчас кофе попью, покурю и сделаю. 


Пробуй:

 

В табличке "Горячие" клавиши - "Numpad +" увеличение IDw,  "Numpad -" уменьшение  IDw.

ForRazi.CT

[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheataobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(code)label(code1)label(flag)registersymbol(flag)registersymbol(address)newmem:mov [eax+ecx],ebx        // Оригинальные инструкции игры.and edx,001FFFFCcmp byte ptr [flag],1    // Если flag не равен 1, то ничего не делаем.jne @f                   // Прыгаем на ближайшую метку @@.mov byte ptr [flag],0    // Обнуляем flag, чтобы инъекция сработала один раз.                         // Если flag равен 1, то выполняем нашу инъекцию, т.е. переключаем оружие.cmp [009E3C1C],9         // Всего 10 видов оружия в игре (IDw от 0 до 9)je code                  // Если IDw равно 9, то прыгаем на метку code, где присвоим IDw 0.inc [009E3C1C]           // Увеличиваем IDw на 1, т.е. переключаемся на следующий вид оружия.jmp returnHere           // Возвращаемся в код игры.@@:cmp byte ptr [flag],2    // Если flag не равен 2, то ничего не делаем.jne returnHere           // Возвращаемся в код игры.mov byte ptr [flag],0    // Обнуляем flag, чтобы инъекция сработала один раз.                         // Если flag равен 2, то выполняем нашу инъекцию, т.е. переключаем оружие.cmp [009E3C1C],0         // Всего 10 видов оружия в игре (IDw от 0 до 9)je code1                 // Если IDw равно 0, то прыгаем на метку code1, где присвоим IDw 9.dec [009E3C1C]           // Уменьшаем IDw на 1, т.е. переключаемся на следующий вид оружия.jmp returnHere           // Возвращаемся в код игры.code:                    // Если предыдущий вид оружия был последний (IDw=9), то переключаемся наmov [009E3C1C],0         // первый вид оружия (IDw=0).jmp returnHere           // Возвращаемся в код игры.code1:                   // Если предыдущий вид оружия был первый (IDw=0), то переключаемся наmov [009E3C1C],9         // последний вид оружия (IDw=9).jmp returnHere           // Возвращаемся в код игры.flag:                    // Добавь в таблицу адрес с адресом "Flag" (без кавычек), названиемdb 0                     // "Переключиться на следующий вид оружия (1 +; 2 -)", тип "1 байт" и назначь на него                         // удобную "Горячую" клавишу - установить значение 1.address:jmp newmemdb 90 90 90 90returnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebxand edx,001FFFFCunregistersymbol(flag)unregistersymbol(address)dealloc(newmem) 
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Отлично. Работает. Сам бы, не написал такой код, (он простой, но не для всех) . Для этого нужно больше одного дня.

Почему мой код не заработал? И можно ли на моем коде сделать также, если возможно?

[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat  aobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(mylabel)label(mylabel1)registersymbol(address)newmem:mov [eax+ecx],ebx  and edx,001FFFFCcmp [009E3C1C],Aje mylabeljmp returnHerecmp [009E3C1C],FFje mylabel1jmp returnHeremylabel:mov [009E3C1C],0jmp returnHeremylabel1:mov [009E3C1C],9jmp returnHereaddress:  jmp newmem  nop  nop  nop  nopreturnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebx  and edx,001FFFFCunregistersymbol(address)dealloc(newmem)

 

Гарячие клавиши увеличения и уменьшения, выставлены на самом адресе в таблице.

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

Почему мой код не заработал?

 

И можно ли на моем коде сделать также, если возможно?

Попробую:

Должен сработать, как я понял цикл в игре выполняется автоматически, т.е. тебе не нужно гонять по кругу, а сделать так -> если 9 то 0, если 0 то 9.

Гарячие клавиши увеличения и уменьшения, выставлены на самом адресе в таблице.

Razi, а вот это нужно было бы в самом первом сообщении топика написать. Теперь понятно - как ты выполняешь цикл.

Горячая клавиша а -> увеличить значение в адресе на 1.

Горячая клавиша b -> уменьшить значение в адресе на 1.

 

Но мой способ понадёжнее, не во всех играх ты так легко найдёшь адрес, да и трейнер из моего скрипта проще сделать.

newmem:mov [eax+ecx],ebx  and edx,001FFFFCcmp [009E3C1C],A    // Потому что, после этого сравненияje mylabel          // мы прыгаем либо на метку mylabeljmp returnHere      // либо возвращаемся в код игрыcmp [009E3C1C],FF   // Сюда мы никогда не попадёмje mylabel1jmp returnHeremylabel:mov [009E3C1C],0jmp returnHeremylabel1:           // и соответственно сюда тоже.mov [009E3C1C],9jmp returnHere 
[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat  aobscan(address,89 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(returnHere)label(mylabel)label(mylabel1)registersymbol(address)newmem:mov [eax+ecx],ebx  and edx,001FFFFCcmp [009E3C1C],Aje mylabelcmp [009E3C1C],FFje mylabel1jmp returnHeremylabel:mov [009E3C1C],0jmp returnHeremylabel1:mov [009E3C1C],9jmp returnHereaddress:  jmp newmem  nop  nop  nop  nopreturnHere:[DISABLE]address: {"ePSXe ENG.exe"+5E3C1C}mov [eax+ecx],ebx  and edx,001FFFFCunregistersymbol(address)dealloc(newmem) 
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Замечательно. Все работает.

На самом деле "делать автоматическую замену в адресах" и "чтобы значение имело цикл" я хотел еще пару лет назад, и много чего пробовал, включая разные программы. Даже общался на зарубежных форумах с хакерами.

Добавил плюсы в репутацию.

Трейнер делается с помощью Cheat Engine?

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

Замечательно. Все работает.

Отлично!!!

Razi, возьми в привычку поначалу писать себе кометы в скриптах, наподобие, как я тебе расписывал. Очень помогает в понимании (и запоминании) кода. 

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

Можете описать все действия как для домохозяек, потому что только начал познавать Cheat Engine. Адрес вот 009E3C1C.

1) Подключить процесс

2) Зайти в дизассемблер

3) Создать АА скрипт

4) Написать в нем

 

{$lua}local a = readInteger("009E3C1C") + 1if(a > 9 ) then a = 0 endwriteInteger("009E3C1C", a)[Enable][Disable]

 

Добавить в таблицу

Тоже самое

{$lua}local a = readInteger("009E3C1C") - 1if(a < 0 ) then a = 0 endwriteInteger("009E3C1C", a)[Enable][Disable]

 

Вешаешь горячие клавиши на первый скрипт и на второй через контекстное меню.

Заходишь в игру, нажимаешь и смотришь на изменение.

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

Тоже самое

MasterGH, я не знаю LUA, но мне кажется во втором скрипте ошибка:

 

if(a < 0 ) then a = 0 end

по-моему должно быть:

if(a < 0 ) then a = 9 end
Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Razi, попробуй скрипты MasterGH.

 

Плюсы - на один хоткей меньше, чем в наших скриптах (у MasterGH - 2. у нас - 3 с учётом активирующего скрипта) и ещё проще написать трейнер, если понадобиться.

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

 Попробовал, работает отлично. С самого начала думал, что надо зайти через Show cheat table Lua script и туда вписывать,но ничего не получалось.

 

Создать АА скрипт

 Думал, речь идет о какой-то незнакомой мне терминологии, (уже хотел гуглить) так и надо было сказать , что Auto Assemble скрипт.

Но горячие клавиши ставятся только на "toggle" скрипта, не вредно ли так часто будет делать "toggle" скрипта в программе? Знаю, что по идее не должно.

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

Попробовал, работает отлично

Здорово!!! Всё-таки нужно будет найти время на изучение LUA.

 

не вредно ли так часто будет делать "toggle" скрипта в программе?

Неа - не вредно. Включил/выключил - здесь нет проблем.

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

MasterGH, Спасибо за скрипт.

Garik66,  Спасибо за помощь.

 

А трейнер сложно сделать? Сложная ли технология? Плюсы трейнера в том, что это самостоятельный исполняемый файл?

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

А трейнер сложно сделать?

Не сложно. Для начала - воспользуйся СЕ-ным генератором трейнеров. По СЕ-ному трейнермаркерству, если что обратись к пользователю LIRW, он на них "Собаку съел" и не одну

offtopic.gif Бедные собачки. %) 
 

 

Плюсы трейнера в том, что это самостоятельный исполняемый файл?

Не только. Чаще всего трейнеры юзают, если выкладывают в паблик свою работу. Я лично предпочитаю таблички.

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

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

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

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