Нужна помощь с подключенной функцией (.uc)

  • Автор темы Автор темы Candice
  • Дата начала Дата начала

Candice

Интересующийся
Местный
Сообщения
91
Розыгрыши
0
Решения
3
Репутация
100
Реакции
29
Баллы
368
Запрещено публиковать исходный код без BB-кода — CODE
Я пытаюсь получить объект Player из перехваченной функции.

Перехват вызывается, указатели передаются правильно, но при вызове GetPlayer из .uc игра зависает (без сбоя)

Что я делаю не так?
У меня есть подозрение, что .uc не принимает класс из самого Engine и его нужно как-то сериализовать?


void hookEngine()
{
auto hEngine = GetModuleHandleA("Engine.dll");
if (hEngine)
{
auto targetFunction = reinterpret_cast<LPVOID>(GetProcAddress(hEngine, "?SetPlayer@APlayerController@@QAEXPAVUPlayer@@@Z"));
if (targetFunction)
{
if (MH_Initialize() == MH_OK)
{
if (MH_CreateHook(targetFunction, reinterpret_cast<LPVOID>(&HookedSetPlayer), reinterpret_cast<LPVOID *>(&OriginalSetPlayer)) == MH_OK)
{
MH_EnableHook(targetFunction);
}
}
}
}
}


int __fastcall HookedSetPlayer(UObject *thisPtr, void *unused, UObject *a2)
{
char message[256];
sprintf_s(message, sizeof(message), "SetPlayer called with this: %p, NewPlayer: %p", thisPtr, a2);
MessageBoxA(NULL, message, "SetPlayer Hook", MB_OK | MB_ICONINFORMATION);
LastSetPlayer = a2;

return OriginalSetPlayer(thisPtr, a2);
}

void __stdcall GetPlayer(FFrame &Stack, void *Result)
{
if (!LastSetActor)
{
*((UObject **)Result) = nullptr;
return;
}

*((UObject **)Result) = LastSetPlayer;
}
 
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…