Встроенная библиотека для работы с памятью. Включает базовый набор функций для прямого чтения и записи данных в память игры, а так же несколько вспомогательных функций.
Добавлена в v.018.
int value = memory.read(int address, uint size, [bool unprotect=false])
Читает целочисленное значение указанного размера (от 1 до 4) по адресу.
memory.write(int address, int value, uint size, [bool unprotect=false])
Записывает целочисленное значение указанного размера (от 1 до 4) по адресу.
int value = memory.getint8(int address, [bool unprotect=false])
Читает целочисленное значение размером 1 байт по адресу.
bool result = memory.setint8(int address, int byte, [bool unprotect=false])
Записывает целочисленное значение размером 1 байт по адресу.
int value = memory.getint16(int address, [bool unprotect=false])
Читает целочисленное значение размером 2 байта по адресу.
bool result = memory.setint16(int address, int word, [bool unprotect=false])
Записывает целочисленное значение размером 2 байта по адресу.
int value = memory.getint32(int address, [bool unprotect=false])
Читает целочисленное значение размером 4 байта по адресу.
bool result = memory.setint32(int address, int dword, [bool unprotect=false])
Записывает целочисленное значение размером 4 байта по адресу.
double value = memory.getint64(int address, [bool unprotect=false])
Записывает целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
bool result = memory.setint64(int address, double qword, [bool unprotect=false])
Записывает целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
int value = memory.getuint8(int address, [bool unprotect=false])
Читает беззнаковое целочисленное значение размером 1 байт по адресу.
bool result = memory.setuint8(int address, int byte, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 1 байт по адресу.
int value = memory.getuint16(int address, [bool unprotect=false])
Читает беззнаковое целочисленное значение размером 2 байта по адресу.
bool result = memory.setuint16(int address, int word, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 2 байта по адресу.
int value = memory.getuint32(int address, [bool unprotect=false])
Читает беззнаковое целочисленное значение размером 4 байта по адресу.
bool result = memory.setuint32(int address, int dword, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 4 байта по адресу.
double value = memory.getuint64(int address, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
bool result = memory.setuint64(int address, double qword, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
float value = memory.getfloat(int address, [bool unprotect=false])
Читает число с плавающей запятой по адресу (4 байта).
bool result = memory.setfloat(int address, float value, [bool unprotect=false])
Записывает число с плавающей запятой по адресу (4 байта).
double value = memory.getdouble(int address, [bool unprotect=false])
Читает число двойной точности по адресу (8 байт).
bool result = memory.setdouble(int address, double value, [bool unprotect=false])
Записывает число двойной точности по адресу (8 байт).
int oldProtection = memory.unprotect(int address, uint size)
Снимает протекцию с указанной области памяти и возвращает значение, которое было до изменения.
int oldProtection = memory.protect(int address, uint size, int newProtection)
Устанавливает протекцию указанной области памяти и возвращает значение, которое было до изменения.
memory.copy(int destAddress, int srcAddress, uint size, [bool unprotect=false])
Копирует участок памяти заданного размера в другую область памяти по указанному адресу. Области не должны пересекаться.
bool result = memory.compare(int address1, int address2, uint size, [bool unprotect=false])
Сравнивает один участок памяти с другим.
string str = memory.tostring(int address, [uint size], [bool unprotect=false])
Читает строку из памяти по указанному адресу и с определённым размером. Если размер не указан, то строка будет прочитана до нуль-символа.
string hexstr = memory.tohex(int address, uint size, [bool unprotect=false])
Читает участок памяти указанного размера и возвращает его в виде строки в шестнадцатиричном представлении.
memory.fill(int address, int value, uint size, [bool unprotect=false])
Заполняет область памяти указанного размера однобайтным значением.
string bin = memory.hex2bin(string hex)
bool result = memory.hex2bin(string hex, uint dstAddress, uint size)
Преобразует hex-последовательность из строки в бинарные данные. Первый вариант возвращает данные в виде строки, второй вариант записывает результат в буфер по указанному адресу, возвращает результат записи.
uint address = memory.strptr(string str)
Возвращает адрес памяти текста Lua-строки. Пример применения: загрузка каких-либо бинарных данных по адресу, находящихся в lua-скрипте в виде строки.
Используйте полученный адрес только для чтения и всегда учитывайте, что адреса временных строк ненадёжны.
local mem = require "memory" function main() while not isPlayerPlaying(playerHandle) do wait(100) end local wut = mem.tostring(0x969110) print(wut) while true do wait(10) if testCheat("MONEY") then local money = mem.getint32(0xB7CE50) print("Current money: " .. money) -- добавить $250.000 mem.setint32(0xB7CE50, money + 250000) end end end