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

Как в Cheat Engine произвести автоматическое нажатие клавиш?


Razi

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

Как через скрипты в Cheat Engine произвести автоматическое нажатие клавиш?
Нужно чтоб при условии (то есть "cmp") , что адрес 00A47010 равен 1 автоматически нажималась клавиша "home" один раз, а если этот адрес равен 0, то нажималась клавиша "end" один раз. Или вместо "home" нажималось ctrl плюс буква, а вместо "end" нажималось ctrl плюс другая буква. Есть ли такие команды в скриптах?

И еще интересует как через скрипт, автоматически (т.е. при таком-то условии) заморозить такой-то адрес находящийся в таблице Cheat Engine? Знаю, что было включение скриптов по имени.

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

  • Ответов 109
  • Создана
  • Последний ответ

Топ авторов темы

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

 

Бывает случай, когда нужен скрипт, в котором несколько условий. Например, одно из них "cmp [адрес метки1], 1", где метка1 зарегистрирована и видна во всех скриптах. Тогда в другом скрипте надо написать запись в эту метку 1 или 0 по горячим клавишам.

 

 

Эти два приема достаточны для большинства читов в играх.

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

чтобы заморозить адрес в таблице достаточно в CE назначить комбинацию горячих клавиш.

Ну это понятно.

 

"cmp [адрес метки1], 1", где метка1 зарегистрирована и видна во всех скриптах. Тогда в другом скрипте надо написать запись в эту метку 1 или 0 по горячим клавишам.

И тогда в данном условии клавиши будут нажиматься сами?

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

И еще интересует как через скрипт, автоматически (т.е. при таком-то условии) заморозить такой-то адрес находящийся в таблице Cheat Engine?

Razi, пока отвечу только на этот вопрос - вариант по названию адреса (в моём скрипте адрес называется Address1) в таблице, условие можешь добавить сам:

Лучше использовать ID записи в таблице.

Тогда скрипт будет выглядеть так:

Как узнать ID -> прочитай это сообщение MasterGH. 

1. По индексу - Index

2. По имени - description

3. По ID - ID

[ENABLE]{$LUA}addresslist = getAddressList()description1= [[Address1]]memoryrec1 = addresslist_getMemoryRecordByDescription(addresslist, description1)memoryrecord_freeze(memoryrec1)  -- заморозка{$ASM}[DISABLE]{$LUA}memoryrecord_unfreeze(memoryrec1) -- разморозка 
[ENABLE]{$LUA}addresslist = getAddressList()memoryrec1 = addresslist_getMemoryRecordByID(addresslist,71) -- ID Address1 равно 71 memoryrecord_freeze(memoryrec1)  -- заморозка{$ASM}[DISABLE]{$LUA}memoryrecord_unfreeze(memoryrec1) -- разморозка 
Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

Типа того что то вроде я так делал на игры проверку нажатия клавиш в игре. Искал адрес в самой игре нажатия клавиши.

К примеру игру которою щас взламывают RE4 на RapidFire. К примеру когда герой встаёт в стойку для атаки из оружия.

Ищу адрес для этой стойки и сравниваю значение по cmp, если равно например 1 в стойке адреса или в регистре, 0 - не стоит в стойке. Ну и записываю в инструкция значение нужное для рапида если равно 1. Скажу сразу это мне нужно было для скрипта ассмемблерного чит-мода к примеру, если не кляпаешь трейнер, а вшиваешь сам скрипт в игру модуль EXE или DLL.

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

К скрипту выше тоже самое, но покороче

{$LUA}memoryrecord1 = getAddressList().getMemoryRecordByDescription('No description')[ENABLE]memoryrecord1.Active = true[DISABLE]memoryrecord1.Active = false
Я вообще не понимаю, зачем нужно симулировать нажатие клавиш изнутри скриптов или изнутри игры. Всегда обходились без этого
Ссылка на комментарий
Поделиться на другие сайты

Razi, по первому вопросу в main LUA, есть что-то

doKeyPress(key) : simulates a key press // имитирует нажатие клавиши

Нужно это теперь в скрипт добавить.

 

На ассемблере тоже можно сделать, но нужно порыться (гуглить).

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

krocki, Благодаря твоей статье узнал, что значения на дисках PS1 в перевернутом виде, и впоследствии хакнул ту игру, сделав ее сложнее.

 

зачем нужно симулировать нажатие клавиш изнутри скриптов или изнутри игры. Всегда обходились без этого

Кстати это не чит код, а улучшение игры. Так я и обходился всегда без этого пройдя игру много раз. Почти не пользовался этим потому что, в игре эта штука очень не удобна. Но, если будут нажиматься кнопки сами, то пользоваться этой штукой в игре будет в сто раз удобнее. Таким образом, мы подключим ту часть игры которой раньше почти не пользовались из-за того что разработчики сделали ее не удобной.

 

Кстати автоматическое нажатие клавиш при разных условиях, раскрывает большие возможности во всех играх. Даже например найдешь байт который активируется при использовании текста в игре, а чтобы его пропустить надо нажать кнопку, а если текста в игре очень много, то кнопку надо нажать 500-7000! раз за игру, что бы этого не делать ставиш скрипт на автонажатие кнопок при условии. Это всего лишь пример.

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

условие можешь добавить сам

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

[ENABLE]aobscan(INJECT,88 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:cmp byte ptr [00A3F3E5],2jne code                          // а дальше что?code:  mov [eax+ecx],bl  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 88 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem)

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

А куда это условие добавлять-то, в какой скрипт?

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

На ассемблер заморозка это просто операнд MOV. Вот здесь я собирал для пользователя 7 вариантов решения заморозки адреса. Можно сделать ещё больше, но проще сделать на ассемблер.

А добавить условие - мы уже с тобой делали в предыдущих скриптах.

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

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

Условие я уже сделал в скрипте, в предыдущем сообщении. А, еще забыл сделать условие на разморозку, в этом же скрипте. Щас перепишу, только надо глянуть в игру, когда лучше размороживать. А как прописать условие, если значение в адресе не  равно 2, то разморозить адрес? Пример:

cmp byte ptr [00A3F3E5], jne      // эта функция и так изначально находится при сравнении если адрес равен 2
Изменено пользователем Razi
Ссылка на комментарий
Поделиться на другие сайты

На самый главный - Что должно замораживаться?

Да, точно, адрес для заморозки: 00A444E8, и заморозить если адрес 00A3F3E5 равен 2, и после нужно разморозить, если адрес 00A3F3E5 не равен 2. Я и сам хочу написать скрипт, но у меня будет куча вопросов.

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

Да, точно, адрес для заморозки: 00A444E8

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

если адрес 00A3F3E5 не равен 2.

то ещё проще:

[ENABLE]aobscan(INJECT,88 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:cmp byte ptr [00A3F3E5],2jne @f                            // а дальше что? А дальше вот это:mov [00A444E8],#100               // замораживаем адрес на нужное значениеjmp code                          // и выполняем код игры.@@:cmp byte ptr [00A3F3E5],1         // допустим ты мне дал условие разморозки.jne code                          // просто выполняем код игры. Строчку можно не писать, написал                                  // чтобы было понятнее.     code:  mov [eax+ecx],bl  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 88 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem) 
[ENABLE]aobscan(INJECT,88 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:cmp byte ptr [00A3F3E5],2jne соde                          // а дальше что? А дальше вот это:mov [00A444E8],#100               // замораживаем адрес на нужное значениеcode:  mov [eax+ecx],bl  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 88 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem)  
Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В данном скрипте адрес 00A444E8 должен заморозиться, если адрес 00A3F3E5 равен 2, а если

адрес 00A3F3E5 не равен 2, то адрес 00A444E8 должен разморозиться? Нужно, чтоб после заморозки адрес 00A444E8 еще и разморозился.

А если нужно, чтоб адрес просто заморозился без указания значения #100 (это в десятичной системе?), то его просто надо убрать из скрипта?

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

Если ты сделал АА скрипт из инструкции работающей с адресом [00A444E8], и [eax+ecx] это и есть адрес [00A444E8], то скрипт будет другим - тебе нужно отключить запись в  [eax+ecx].

[ENABLE]aobscan(INJECT,88 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:cmp byte ptr [00A3F3E5],2jne соde                          // а дальше что? А дальше вот это:jmp @f                            // замораживаем адрес на нужное значение - какое-то игровое                                  // значение - ты сам его знаешь.code:  mov [eax+ecx],bl                // Если в [00A3F3E5] 2, то перепрыгиваем запись.@@:  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 88 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem)   
Ссылка на комментарий
Поделиться на другие сайты

Тогда попробуем на LUA, но как я писал тебе LUA я не знаю, поэтому за правильность написания скрипта не ручаюсь.

[ENABLE]{$LUA}FreezingConditions = readInteger('[00A3F3E5]')if (FreezingConditions == 2) thenmemoryrecord_freeze('[00A444E8]')  -- заморозкаend{$ASM}[DISABLE]{$LUA} 
Ссылка на комментарий
Поделиться на другие сайты

Твой АА скрипт работает. Но это, немного не то, я хотел чтоб он не замораживал значение в 100, а чтоб заморозил, то значение какое там на данный момент(без прописывания вместо 100 на другое). И хотел чтоб появлялась галочка указывающая что адрес заморожен.

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

Ты про какой скрипт сейчас говоришь, он оба АА.

Ладно сделал тебе табличку (табличка удалена - не работает), проверь. 


И хотел чтоб появлялась галочка указывающая что адрес заморожен.

Так уже давал примеры (по ID, по названию). Короче закачай куда-нибудь свою табличку, чтобы я качнул - сделаю тебе то, что нужно.

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

Этот работает, но это, немного не то, я хотел чтоб он не замораживал значение в 100, а чтоб заморозил, то значение какое там на данный момент(без прописывания вместо 100 на другое). И хотел чтоб появлялась галочка указывающая что адрес заморожен.

[ENABLE]aobscan(INJECT,88 1C 08 81 E2 FC FF 1F 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:cmp byte ptr [00A3F3E5],2jne соde                          // а дальше что? А дальше вот это:mov [00A444E8],#100               // замораживаем адрес на нужное значениеcode:  mov [eax+ecx],bl  and edx,001FFFFC  jmp returnINJECT:  jmp newmem  nop  nop  nop  nopreturn:registersymbol(INJECT)[DISABLE]INJECT:  db 88 1C 08 81 E2 FC FF 1F 00unregistersymbol(INJECT)dealloc(newmem)

 

Последний Lua скрипт 18 сообщении не работает.

Тот  по названию твой скрипт в 4 сообщении пробовал и он замораживает адрес, но условие как к нему прилепить я не знаю.

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

Razi, чёй-то ты сегодня притормаживаешь.

Ответь:

1. Ты хочешь скрипт на LUA или на ассемблер.

2. Если на LUA, то дай мне ID адреса (как посмотреть ID я писал уже здесь., либо дай какое-нибудь уникальное название адресу (на английском) и дай мне. тогда напишу скрипт по названию.

3. Если на ассемблер, то сделай АА скрипт из инструкции на чтение на адрес, который нужно заморозить. 

Последний Lua скрипт 18 сообщении не работает.

Как ты его проверял, куда вставлял скрипт?

Лучше качни табличку, выложенную выше и проверь.

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

1) Та на любой

2) По ID щас узнаю

3) Инструкция на чтение на адрес, который нужно заморозить (выбрал ту у которой максимальное количество обращений)

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

Не та инструкция, я уже тоже торможу, нужна именно инструкция на запись. (когда происходит запись в адрес).

А табличку проверил?

Если не сработает,, то без таймера не обойтись, так как проверять чему равно значение в [00A3F3E5] нужно постоянно. 

[ENABLE]{$LUA}addresslist = getAddressList()memoryrec1 = addresslist_getMemoryRecordByID(addresslist,71) -- ID Address1 равно 71 (сюда подставь своё ID)FreezingConditions = readInteger('[00A3F3E5]')if (FreezingConditions == 2) thenmemoryrecord_freeze(memoryrec1)  -- заморозкаend{$ASM}[DISABLE]{$LUA}
Ссылка на комментарий
Поделиться на другие сайты

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

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

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