Вызов ивента из клиента(актуал мейн)

mouzy724

Путник
Пользователь
Сообщения
17
Розыгрыши
0
Решения
1
Репутация
0
Реакции
0
Баллы
83
Господа, подскажите плиз, что нужно для того что бы звать из клиента нужный ивент? Интересует именно игровые функции уже когда клиент запущен. Т.е. найти нужные адреса и передать параметры. Помогите разобраться с этим. К примеру хочу вызвать кнопку релога на выбор персонажа.
 
может кто то подсказать как нативными функциями игры вызвать либо кнопку либо ивент вызвать?
 
О чем вообще речь, типа свой екст бахнуть, которьій бует условньій OnClickButton(btnName) в определенном классе делать? Для такого сдк лучших вьібор, как по мне. )
 
О чем вообще речь, типа свой екст бахнуть, которьій бует условньій OnClickButton(btnName) в определенном классе делать? Для такого сдк лучших вьібор, как по мне. )
нужно вызвать нажатие на кнопку используя внутренние функции самого движка. 1760123649539.webp
типа такого
 
Тогда Вам скорее что-то типа такого. )
Код:
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, &params);

    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, &params);

    fn->FunctionFlags = flags;
}
а можно с тобой в тг связатся? у меня вроде +- похожая логика, но окно просто закрывается без краша
 
mouzy724, лучше покажите здесь, что делаете/делали (код, как и откуда вьізьіваете, что успевает вьіполнится до того как клиент закроется, етк), у меня времени мало сейчас, в тг висит столько сообщений, что я буду пол месяца отвечать. :loltt0: А здесь еще кто-то может подсказать, да и другие увидят инфу, мало кому полезно будет из потомков.
 
:Mg: тут обсуждали набор аргументов, которые есть в функциях. Может вы не полностью функцию описали, которую хукаете? (там FString забыли указать в аргументах или вообще не описали его)
 
MrKirill1232, не, єто ж наоборот бьіло с интерфейса в длл, а в єтой теме речь о вьізове функций интерфейса с дллки. )
 
MrKirill1232, не, єто ж наоборот бьіло с интерфейса в длл, а в єтой теме речь о вьізове функций интерфейса с дллки. )
так он же прикладывает примеры нативных функций, которые в ДЛЛ.

В любом случае - ему нужно хукнуть функцию, которая с ДЛЛ в Интерфейс отправляет команду. А там как раз сигнатура в виде FFrame и тд...

C:
// Export UUIScript::execExecRestart(FFrame&, void* const)
native final function ExecRestart();
 
Последнее редактирование:
Оверпостинг
Чем дефолтная кнопка релога не устраивает или вы в окне Charselect Хотите вызвать кнопку?)
дело не в том устраивает или нет. Дело вообще в возможности вызвать ее из dll. Я разные функции пробовал просмотреть, и там везде длинная зависимость между вызовами, где нужно колупать параметры по цепочке, что долго и неудобно реверсить.

так он же прикладывает примеры нативных функций, которые в ДЛЛ.

В любом случае - ему нужно хукнуть функцию, которая с ДЛЛ в Интерфейс отправляет команду. А там как раз сигнатура в виде FFrame и тд...

C:
// Export UUIScript::execExecRestart(FFrame&, void* const)
native final function ExecRestart();
да, но FFrame там передается по длинной цепочке. Я вышел по этой цепоке на ProcessEvent. Видимо нужно пробовать дернуть ивент как роло описал. И при разном вызове в FFrame как я заметил меняются параметры. И искать по цепочке как они генерятся очень геморно
 
дело не в том устраивает или нет. Дело вообще в возможности вызвать ее из dll. Я разные функции пробовал просмотреть, и там везде длинная зависимость между вызовами, где нужно колупать параметры по цепочке, что долго и неудобно реверсить.
Почитай
 
Интереса ради сейчас решил посмотреть у себя в клиенте. Протокол 439
Сначала работа с FFrame, затем скрытие диалога? Выделил желтым, а далее вызов рестарта - FUN_1084bec0.
По обработчику ошибок в конце FUN_1084bec0 видно, что это действительно NConsoleWnd::RequestRestart

Теперь глянем как она вызывается внутри execExecRestart:
1760343781849.webp
Видно что сначала пушится какой-то аргумент, затем в ECX регистр помещается значение из глобальной переменной. Очевидно что это экземпляр NConsoleWnd, т.к. NConsoleWnd::RequestRestart - это __thiscall вызов, для которого в ecx должен находиться this. В принципе ничего сложного.

Простой пример как можно вызвать из своей dll:
C++:
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); // вызов рестарта
    }
}

Потестил, работает.
 
Назад
Сверху