Перевод функции из C++ в Lua

Startracker983274

Известный
Автор темы
46
127
Версия MoonLoader
.026-beta
Всем привет.
Как можно это переделать из С++ на Lua?

C++:
playa->m_pIntelligence->m_TaskMgr.SetTaskSecondary(new CTaskComplexPlayHandSignalAnim(animationId, 4.0f), 4);

Пробовал так:

Lua:
local ffi = require("ffi")
local CTaskManager__SetTaskSecondary = ffi.cast("void(__thiscall *)(uintptr_t*, void*, uint32_t)", 0x681B60)
local CTaskComplexPlayHandSignalAnim__CTaskComplexPlayHandSignalAnim = ffi.cast("void(__thiscall *)(int, float)", 0x61B2B0)

local char_pointer = getCharPointer(PLAYER_PED)
char_pointer = char_pointer + 0x47C -- m_pIntelligence
char_pointer = readMemory(char_pointer, 4, false)
char_pointer = char_pointer + 0x4 -- m_TaskMgr
CTaskManager__SetTaskSecondary(ffi.cast("uintptr_t*", char_pointer), ffi.cast("void*", CTaskComplexPlayHandSignalAnim__CTaskComplexPlayHandSignalAnim(320, 4.0)), 4)

Крашит. Что-то не так передаю, но что? В плюсах не шарю совсем.
 

Tema05

Известный
1,651
560
Всем привет.
Как можно это переделать из С++ на Lua?

C++:
playa->m_pIntelligence->m_TaskMgr.SetTaskSecondary(new CTaskComplexPlayHandSignalAnim(animationId, 4.0f), 4);

Пробовал так:

Lua:
local ffi = require("ffi")
local CTaskManager__SetTaskSecondary = ffi.cast("void(__thiscall *)(uintptr_t*, void*, uint32_t)", 0x681B60)
local CTaskComplexPlayHandSignalAnim__CTaskComplexPlayHandSignalAnim = ffi.cast("void(__thiscall *)(int, float)", 0x61B2B0)

local char_pointer = getCharPointer(PLAYER_PED)
char_pointer = char_pointer + 0x47C -- m_pIntelligence
char_pointer = readMemory(char_pointer, 4, false)
char_pointer = char_pointer + 0x4 -- m_TaskMgr
CTaskManager__SetTaskSecondary(ffi.cast("uintptr_t*", char_pointer), ffi.cast("void*", CTaskComplexPlayHandSignalAnim__CTaskComplexPlayHandSignalAnim(320, 4.0)), 4)

Крашит. Что-то не так передаю, но что? В плюсах не шарю совсем.
Чел, ну это конечно всё хорошо, но что ты ожидал. Тебе придётся хоть как-то шарить в плюсах если ты хочешь понять, что тебе нужно делать.

Так навскидку почему у тебя readMemory стоит false? Наоборот же нужно снимать защиту памяти. Ну и ты конечно не показал краш
 

#Northn

Известный
Всефорумный модератор
2,662
2,633
ffi.cast("void*", CTaskComplexPlayHandSignalAnim__CTaskComplexPlayHandSignalAnim(320, 4.0)
конструктор не возвращает ничего сам, тебе нужно выделить память из пула тасков и положить первым аргументом этой вот функции
Так навскидку почему у тебя readMemory стоит false? Наоборот же нужно снимать защиту памяти
не нужно
 
  • Нравится
Реакции: Tema05