JPegCompressScreenToBuffer

Орк

Известный
Автор темы
273
178
Версия MoonLoader
Другое
https://github.com/DK22Pac/plugin-s...lugin_sa/game_sa/JPegCompress.cpp#L18C1-L30C1
C++:
// NOTE: pCamera parameter is not used, game's full screen will be saved in any way
// US-1.00 @ 0x005D0820
// EU-1.00 @ 0x005D0820
void JPegCompressScreenToBuffer(RwCamera * pCamera, char ** pBuffer, unsigned int * pSize) {
    assert(pBuffer && *pBuffer && pSize);
    assert(pCamera == Scene.m_pCamera && "Required due to dirty Rockstar implementation");
    plugin::Call<0x005D0740>(pCamera, pBuffer, pSize);
}

void JPegCompressScreenToBuffer(char ** pBuffer, unsigned int * pSize) {
    JPegCompressScreenToBuffer(Scene.m_pCamera, pBuffer, pSize);
}
Есть такой код, как его использовать в lua? Что такое pBuffer, pSize и как их получать?

Описание: Делает скриншот экрана(не экрана игры). На форуме код гуляет, но в этой теме вроде есть вариант (но оба зачем-то через samp, один два)
Код:
Lua:
function screen(path) -- ffi
    local path = tostring(path)
    local D3D9Device = ffi.cast("void* *", 0xC97C28) --or RwCamera 0xB6F97C or getD3DDevicePtr()
    local TakeScreenshot = ffi.cast("void(__cdecl*)(void *, const char*)", 0x5D0820) -- FUNC_JPegCompressScreenToFile
    TakeScreenshot(D3D9Device, path)
end

function screen(path) -- ffi v2
    local path = tostring(path)
    local TakeScreenshot = ffi.cast("void(__cdecl*)(uintptr_t, const char*)", 0x5D0820) -- FUNC_JPegCompressScreenToFile
    TakeScreenshot(0, path)
end

function screen(path) -- standard funcs
    local path = tostring(path)
    callFunction(0x5D0820, 2, 0, readMemory(0xC97C28 --[[ or RwCamera 0xB6F97C or getD3DDevicePtr() or 0 ]], 4, false), path)
end

Применение:
Lua:
local ppath = getWorkingDirectory() .. "\\screen.jpg"
screen(ppath)
--скриншот будет в этой папке "...\moonloader\screen.jpg"

upd добавил вариант callFunction
upd 2 только что узнал Посмотреть вложение 253146 поэтому добавил ffi v2
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,798
2,659
https://github.com/DK22Pac/plugin-s...lugin_sa/game_sa/JPegCompress.cpp#L18C1-L30C1
C++:
// NOTE: pCamera parameter is not used, game's full screen will be saved in any way
// US-1.00 @ 0x005D0820
// EU-1.00 @ 0x005D0820
void JPegCompressScreenToBuffer(RwCamera * pCamera, char ** pBuffer, unsigned int * pSize) {
    assert(pBuffer && *pBuffer && pSize);
    assert(pCamera == Scene.m_pCamera && "Required due to dirty Rockstar implementation");
    plugin::Call<0x005D0740>(pCamera, pBuffer, pSize);
}

void JPegCompressScreenToBuffer(char ** pBuffer, unsigned int * pSize) {
    JPegCompressScreenToBuffer(Scene.m_pCamera, pBuffer, pSize);
}
Есть такой код, как его использовать в lua? Что такое pBuffer, pSize и как их получать?

возможно, в этот буффер будут помещаться байты скрина
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,798
2,659
Наверное, а как это реализовать?
попробуй так:

Lua:
local ffi = require("ffi")

local pBuffer = ffi.new("char[1][?]", 1024)
local pSize = ffi.new("unsigned int[1]")
local pFunction = ffi.cast("void JPegCompressScreenToBuffer(void* pCamera, char** pBuffer, unsigned int* pSize)")
pFunction(0, pBuffer, pSize)
print(pBuffer, pSize[0])