Синтаксис и команды
-
Синтаксис и команды скриптов в Cheat Engine.
Скриптовой язык в Cheat Engine в основном позволяет создавать и внедрять в игру ассемблерный код на ходу, и выгружать его из игры восстанавливая оригинальный код.
Окно скриптинга может быть открыто через окно отладчика, или сочетанием клавиш
Ctrl+A
в этом окне:После открытия вы увидите следующее окно:
В нём можно написать скрипт и нажать кнопку
Execute
что позволит выполнить скрипт. Что бы добавить скрипт в таблицу и сохранить его, вам сначала нужно добавить в него определённые команды, а именно две команды обозначающие разделы, которые будут выполняться при включении и выключении скрипта[ENABLE]
[DISABLE]
:Эти команды обозначают правила для включения и выключения скрипта. После их добавления можно добавить скрипт в таблицу с помощью контекстного меню:
Если всё сделано верно, скрипт появится в таблице и окно редактора можно закрыть:
Теперь вы можете снова открыть редактор, но уже для конкретно этого скрипта в таблице. Для этого дважды кликните по нему в графе
Value
, или откройте редактор через контекстное меню:Откроется редактор для конкретно этого скрипта, вы можете сохранить изменённый скрипт нажав кнопочку
OK
:Основные команды которые могут пригодиться:
Запись данных по адресу, необходимо указывать размерность:
//db - byte //dw - word //dd - dword //dq - qword (Адрес): db/dw/dd/dq(размерность) (число) //Пример, записать по адресу 0087745A подряд 12 байт, сначала 0, дальше 5, потом 7. 0087745A: dd 0 5 7 //Пример, записать по адресу метки label подряд 4 байта 1, 7, 10, 2 label: db 1 7 A 2
Каждая метка обозначает после себя регион памяти все метки в котором будут относиться к ней, если они уже не определены в другом месте, или не являются настоящим адресом.
//По адресу 0087745A располагается метка label, метка label нигде не определена, //значит она определяется и обозначается как место в скрипте после добавления. //Таким образом в данном примере label идёт в зоне 0087745A, сразу после него и указывает на тоже самое место, //то есть далее использовать label будет тоже самое что указать 0087745A: 0087745A: label: dd 0 //В следующем примере, указано что после 0087745A выделено 4 байта со значением 0, //зарезервировано командой dd 0, получается, метка будет указывать на следующие 4 байта после первых идущих в 0087745A: 0087745A: dd 0 label: dd 0
Метка может быть зарегистрирована в текущем скрипте, или даже объявлена глобально для использования из других скриптов.
label(lack)
зарегистрировать метку lack для текущего скрипта.
registersymbol(lack)
зарегистрировать метку lack глобально.
unregistersymbol(lack)
снять регистрацию с метки lack, обычно используется в секции[DISABLE]
.Пример скрипта, который записывает при включении по адресу 0087745A число float 4 байта 5, а при выключении int32 0:
С помощью скрипта вы можете легко выделить память и записать в неё значения. Выделяется память с помощью команды
alloc(newmem, 1000)
, эта команда выделяет новую память как минимум размером 1000 и создаёт для неё метку newmem, которая аналогична адресу выделенной памяти.Пример скрипта в котором выделяется новая память и в неё записывается значение, после выключения скрипта память освобождается командой
dealloc(newmem)
:Мы можем зарегистрировать newmem что бы получить возможность добавить эту метку как адрес в таблицу и увидеть значение:
Добавьте адрес newmem в таблицу, нажав на кнопку
Add Address Manually
:Включите скрипт нажав на квадратик слева от него, если всё сделано верно вы увидите значение записанное в память, не забудьте что Cheat Engine должен быть подключён к какому то процессу:
Значение float, измените его тип дважды кликнув на
4 Bytes
в столбикеType
что бы оно отображалось корректно:Более продвинутые команды и примеры скриптов рассмотрены в следующих статьях.