lua:memory

Модуль memory

Встроенная библиотека для работы с памятью. Включает базовый набор функций для прямого чтения и записи данных в память игры, а так же несколько вспомогательных функций.
Добавлена в 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