void UEventMatchGMWnd::OnClickButtonWithHandle(class FNWindow::UButtonHandle* a_ButtonHandle)
{
static auto fn = FCore::UObject::FindObject<FCore::UFunction>("Function Interface.EventMatchGMWnd.OnClickButtonWithHandle");
UEventMatchGMWnd_OnClickButtonWithHandle_Params params;
params.a_ButtonHandle = a_ButtonHandle;
auto flags = fn->FunctionFlags;
FCore::UObject::ProcessEvent(fn, ¶ms);
fn->FunctionFlags = flags;
}
а можно с тобой в тг связатся? у меня вроде +- похожая логика, но окно просто закрывается без крашаТогда Вам скорее что-то типа такого. )
Код:void UEventMatchGMWnd::OnClickButtonWithHandle(class FNWindow::UButtonHandle* a_ButtonHandle) { static auto fn = FCore::UObject::FindObject<FCore::UFunction>("Function Interface.EventMatchGMWnd.OnClickButtonWithHandle"); UEventMatchGMWnd_OnClickButtonWithHandle_Params params; params.a_ButtonHandle = a_ButtonHandle; auto flags = fn->FunctionFlags; FCore::UObject::ProcessEvent(fn, ¶ms); fn->FunctionFlags = flags; }
// Класс-заглушка
class UObject {};
// Структура кадра стека UnrealScript
struct FFrame {
int* ftable; // Указатель на таблицу функций
void* Node; // Указатель на узел
UObject* Object; // Указатель на объект
BYTE* Code; // Указатель на код
BYTE* Locals; // Указатель на локальные переменные
INT LineNum; // Номер строки
};
// Тип для нативных...
так он же прикладывает примеры нативных функций, которые в ДЛЛ.MrKirill1232, не, єто ж наоборот бьіло с интерфейса в длл, а в єтой теме речь о вьізове функций интерфейса с дллки. )
// Export UUIScript::execExecRestart(FFrame&, void* const)
native final function ExecRestart();
Чем дефолтная кнопка релога не устраивает или вы в окне Charselect Хотите вызвать кнопку?)К примеру хочу вызвать кнопку релога на выбор персонажа.
дело не в том устраивает или нет. Дело вообще в возможности вызвать ее из dll. Я разные функции пробовал просмотреть, и там везде длинная зависимость между вызовами, где нужно колупать параметры по цепочке, что долго и неудобно реверсить.Чем дефолтная кнопка релога не устраивает или вы в окне Charselect Хотите вызвать кнопку?)
да, но FFrame там передается по длинной цепочке. Я вышел по этой цепоке на ProcessEvent. Видимо нужно пробовать дернуть ивент как роло описал. И при разном вызове в FFrame как я заметил меняются параметры. И искать по цепочке как они генерятся очень геморнотак он же прикладывает примеры нативных функций, которые в ДЛЛ.
В любом случае - ему нужно хукнуть функцию, которая с ДЛЛ в Интерфейс отправляет команду. А там как раз сигнатура в виде FFrame и тд...
C:// Export UUIScript::execExecRestart(FFrame&, void* const) native final function ExecRestart();
Почитайдело не в том устраивает или нет. Дело вообще в возможности вызвать ее из dll. Я разные функции пробовал просмотреть, и там везде длинная зависимость между вызовами, где нужно колупать параметры по цепочке, что долго и неудобно реверсить.
Зачем из dll вызывать функцию, которая предназначена для вызова из скриптов? Вызывайте напрямую NConsoleWnd::RequestRestartнужно вызвать нажатие на кнопку используя внутренние функции самого движка. Посмотреть вложение 89221
типа такого
это как то черезЗачем из dll вызывать функцию, которая предназначена для вызова из скриптов? Вызывайте напрямую NConsoleWnd::RequestRestart
Я же не знаю какой у вас клиент. Посмотрите как это реализовано внутри execExecRestartэто как то через
?GL2Console@@3PAVUL2ConsoleWnd@@A
нужно юзать?
Может он хук хочет запилитьЗачем из dll вызывать функцию, которая предназначена для вызова из скриптов? Вызывайте напрямую NConsoleWnd::RequestRestart
хук поставить это не проблема. А вот вызвать то что хочу проблемаМожет он хук хочет запилить
typedef void(__thiscall* ReqRestart)(uintptr_t* NConsoleWnd, int unk); // определение NConsoleWnd::RequestRestart
void TestExecRestart() {
HMODULE hNwindowModule = GetModuleHandleW(L"nwindow.dll");
if (hNwindowModule == nullptr) {
return;
}
uintptr_t nwindowBase = reinterpret_cast<uintptr_t>(hNwindowModule);
ReqRestart fReqRestart = reinterpret_cast<ReqRestart>(nwindowBase + 0x84bec0); // смещение для NConsoleWnd::RequestRestart
uintptr_t* nConsole = *reinterpret_cast<uintptr_t**>(nwindowBase + 0x138c838); // глобальная переменная DAT_1138c838
if (fReqRestart && nConsole) {
fReqRestart(nConsole, 0); // вызов рестарта
}
}
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?