Модуль memory
Встроенная библиотека для работы с памятью. Включает базовый набор функций для прямого чтения и записи данных в память игры, а так же несколько вспомогательных функций.
Добавлена в v.018.
memory.read
int value = memory.read(int address, uint size, [bool unprotect=false])
Читает целочисленное значение указанного размера (от 1 до 4) по адресу.
memory.write
memory.write(int address, int value, uint size, [bool unprotect=false])
Записывает целочисленное значение указанного размера (от 1 до 4) по адресу.
memory.getint8
int value = memory.getint8(int address, [bool unprotect=false])
Читает целочисленное значение размером 1 байт по адресу.
memory.setint8
bool result = memory.setint8(int address, int byte, [bool unprotect=false])
Записывает целочисленное значение размером 1 байт по адресу.
memory.getint16
int value = memory.getint16(int address, [bool unprotect=false])
Читает целочисленное значение размером 2 байта по адресу.
memory.setint16
bool result = memory.setint16(int address, int word, [bool unprotect=false])
Записывает целочисленное значение размером 2 байта по адресу.
memory.getint32
int value = memory.getint32(int address, [bool unprotect=false])
Читает целочисленное значение размером 4 байта по адресу.
memory.setint32
bool result = memory.setint32(int address, int dword, [bool unprotect=false])
Записывает целочисленное значение размером 4 байта по адресу.
memory.getint64
double value = memory.getint64(int address, [bool unprotect=false])
Записывает целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
memory.setint64
bool result = memory.setint64(int address, double qword, [bool unprotect=false])
Записывает целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
memory.getuint8
int value = memory.getuint8(int address, [bool unprotect=false])
Читает беззнаковое целочисленное значение размером 1 байт по адресу.
memory.setuint8
bool result = memory.setuint8(int address, int byte, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 1 байт по адресу.
memory.getuint16
int value = memory.getuint16(int address, [bool unprotect=false])
Читает беззнаковое целочисленное значение размером 2 байта по адресу.
memory.setuint16
bool result = memory.setuint16(int address, int word, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 2 байта по адресу.
memory.getuint32
int value = memory.getuint32(int address, [bool unprotect=false])
Читает беззнаковое целочисленное значение размером 4 байта по адресу.
memory.setuint32
bool result = memory.setuint32(int address, int dword, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 4 байта по адресу.
memory.getuint64
double value = memory.getuint64(int address, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
memory.setuint64
bool result = memory.setuint64(int address, double qword, [bool unprotect=false])
Записывает беззнаковое целочисленное значение размером 8 байт по адресу. Может иметь небольшую погрешность.
memory.getfloat
float value = memory.getfloat(int address, [bool unprotect=false])
Читает число с плавающей запятой по адресу (4 байта).
memory.setfloat
bool result = memory.setfloat(int address, float value, [bool unprotect=false])
Записывает число с плавающей запятой по адресу (4 байта).
memory.getdouble
double value = memory.getdouble(int address, [bool unprotect=false])
Читает число двойной точности по адресу (8 байт).
memory.setdouble
bool result = memory.setdouble(int address, double value, [bool unprotect=false])
Записывает число двойной точности по адресу (8 байт).
memory.unprotect
int oldProtection = memory.unprotect(int address, uint size)
Снимает протекцию с указанной области памяти и возвращает значение, которое было до изменения.
memory.protect
int oldProtection = memory.protect(int address, uint size, int newProtection)
Устанавливает протекцию указанной области памяти и возвращает значение, которое было до изменения.
memory.copy
memory.copy(int destAddress, int srcAddress, uint size, [bool unprotect=false])
Копирует участок памяти заданного размера в другую область памяти по указанному адресу. Области не должны пересекаться.
memory.compare
bool result = memory.compare(int address1, int address2, uint size, [bool unprotect=false])
Сравнивает один участок памяти с другим.
memory.tostring
string str = memory.tostring(int address, [uint size], [bool unprotect=false])
Читает строку из памяти по указанному адресу и с определённым размером. Если размер не указан, то строка будет прочитана до нуль-символа.
memory.tohex
string hexstr = memory.tohex(int address, uint size, [bool unprotect=false])
Читает участок памяти указанного размера и возвращает его в виде строки в шестнадцатиричном представлении.
memory.fill
memory.fill(int address, int value, uint size, [bool unprotect=false])
Заполняет область памяти указанного размера однобайтным значением.
memory.hex2bin
string bin = memory.hex2bin(string hex)
bool result = memory.hex2bin(string hex, uint dstAddress, uint size)
Преобразует hex-последовательность из строки в бинарные данные. Первый вариант возвращает данные в виде строки, второй вариант записывает результат в буфер по указанному адресу, возвращает результат записи.
memory.strptr
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