Другое С/С++ Вопрос - Ответ

EclipsedFlow

Известный
Проверенный
1,046
485
Что стало с выгрузкой ASI файлов при выгрузке(иногда даже загрузке)?
Все Visual C++ 2005-2022 установлены.
Раньше стабильно загружал/выгружал через консоль SF (pload, pfree) - сейчас ловлю краш игры.
При попытке отладить стек вызовов направляет на ntdll модуль. При ещё более подробной отладке выяснил что после вызова DLLMain со статусом DLL_PROCESS_DETACH проходит корректно и дальше уходит в dll_main_dispatch и внутрение штуки виндовс.
Данную штуку не проверял на обычной сборке, может вне запуска аризоны через лаунчер работает все корректно.
 

вайега52

Налуашил состояние
Модератор
2,982
3,099
Что стало с выгрузкой ASI файлов при выгрузке(иногда даже загрузке)?
Все Visual C++ 2005-2022 установлены.
Раньше стабильно загружал/выгружал через консоль SF (pload, pfree) - сейчас ловлю краш игры.
При попытке отладить стек вызовов направляет на ntdll модуль. При ещё более подробной отладке выяснил что после вызова DLLMain со статусом DLL_PROCESS_DETACH проходит корректно и дальше уходит в dll_main_dispatch и внутрение штуки виндовс.
Данную штуку не проверял на обычной сборке, может вне запуска аризоны через лаунчер работает все корректно.
а плагин может быть даже пустым и крашить? он точно не оставляет никаких своих следов в игре?
 

EclipsedFlow

Известный
Проверенный
1,046
485
а плагин может быть даже пустым и крашить? он точно не оставляет никаких своих следов в игре?
Решил проблему. Оказалось краш происходил из-за не корректного хука dx9 (present, reset).
Заюзал пример из этого треда и выгрузка работает на УРА.
Линк - LINK
 
  • Нравится
Реакции: вайега52

EclipsedFlow

Известный
Проверенный
1,046
485
Как исправить рендер текста кириллицы из текст_дравов. Шрифт имгуи точно поддерживает кириллицу. При дебаге текст так-же валидный, а на рисовке уже покрывается знаками вопроса.
Юзаю смейк проект, стандарт С++ 20, sampapi
изображение_2024-11-03_222612270.png


1730665614181.png

 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,762
4,891
Как исправить рендер текста кириллицы из текст_дравов. Шрифт имгуи точно поддерживает кириллицу. При дебаге текст так-же валидный, а на рисовке уже покрывается знаками вопроса.
Юзаю смейк проект, стандарт С++ 20, sampapi
Посмотреть вложение 256237

Посмотреть вложение 256238
imgui понимает текст только в utf8, самп - только в cp1251. Конвертируй кодировки
 
  • Нравится
Реакции: EclipsedFlow и ARMOR

EclipsedFlow

Известный
Проверенный
1,046
485
Как корректно получить киррилицу при хуке rpc 134(RPC_ScrShowTextDraw).

1731959236160.png
C++:
rakhook::on_receive_rpc += [](unsigned char& id, RakNet::BitStream* bs) -> bool {
    // Версия сампа R1/R3
    if (id == 134) // RPC_ScrShowTextDraw
    {
        WORD TID, TLen;
        char Text[1024];
        bs->Read(TID);
        bs->IgnoreBits(504);
        bs->Read(TLen);
        bs->Read(Text, TLen);
        bs->ResetReadPointer();
        Text[TLen] = '\0';

        SendChatMessage("[%d]: %s", TID, Text);
    }

    return true;
};
 

вайега52

Налуашил состояние
Модератор
2,982
3,099
Как корректно получить киррилицу при хуке rpc 134(RPC_ScrShowTextDraw).

C++:
rakhook::on_receive_rpc += [](unsigned char& id, RakNet::BitStream* bs) -> bool {
    // Версия сампа R1/R3
    if (id == 134) // RPC_ScrShowTextDraw
    {
        WORD TID, TLen;
        char Text[1024];
        bs->Read(TID);
        bs->IgnoreBits(504);
        bs->Read(TLen);
        bs->Read(Text, TLen);
        bs->ResetReadPointer();
        Text[TLen] = '\0';

        SendChatMessage("[%d]: %s", TID, Text);
    }

    return true;
};
 

EclipsedFlow

Известный
Проверенный
1,046
485
Возникли проблемы с хуком функции для SetGameKeyState(CPad_UpdateKeyStates, вроде так называется). Раньше работала нормально в проекте когда юзал(тогда юзал другой хукер к слову), а сейчас вылетает много исключений и краш. Вот мой хук который я использую. Правильно все с кодом?

C++:
kthook::kthook_simple<BYTE(__thiscall*)(CPad*, int)> hookKeys{};

auto CPad_UpdateKeyGame_HOOK = [](const decltype(hookKeys)& hook, CPad* pPad, int a2) -> BYTE
{
    if (isPluginInitialize)
    {
        // do work...
    }

    return hook.get_trampoline()(pPad, a2);
};

// install
hookKeys.set_cb(CPad_UpdateKeyGame_HOOK);
hookKeys.set_dest(0x541E17);
hookKeys.install();

// remove
hookKeys.remove();
 

EclipsedFlow

Известный
Проверенный
1,046
485
Возникли проблемы с хуком функции для SetGameKeyState(CPad_UpdateKeyStates, вроде так называется). Раньше работала нормально в проекте когда юзал(тогда юзал другой хукер к слову), а сейчас вылетает много исключений и краш. Вот мой хук который я использую. Правильно все с кодом?

C++:
kthook::kthook_simple<BYTE(__thiscall*)(CPad*, int)> hookKeys{};

auto CPad_UpdateKeyGame_HOOK = [](const decltype(hookKeys)& hook, CPad* pPad, int a2) -> BYTE
{
    if (isPluginInitialize)
    {
        // do work...
    }

    return hook.get_trampoline()(pPad, a2);
};

// install
hookKeys.set_cb(CPad_UpdateKeyGame_HOOK);
hookKeys.set_dest(0x541E17);
hookKeys.install();

// remove
hookKeys.remove();
Все ещё актуально, параллельно сам пробую, но если кто-то раньше подскажет - буду благодарен
 

ARMOR

Я креветка
Модератор
5,067
7,373
Все ещё актуально, параллельно сам пробую, но если кто-то раньше подскажет - буду благодарен
Это из-за того что SF тоже хукает CPad::Update(). Пролог метода изменяется на прыжок в функцию SF

Как выглядит стандартный пролог CPad::Update()
Знімок екрана 2024-12-08 004842.png


Пролог CPad::Update() с накатаным SF:
Знімок екрана 2024-12-08 004944.png
 

EclipsedFlow

Известный
Проверенный
1,046
485
Это из-за того что SF тоже хукает CPad::Update(). Пролог метода изменяется на прыжок в функцию SF

Как выглядит стандартный пролог CPad::Update()
Посмотреть вложение 258971

Пролог CPad::Update() с накатаным SF:
Посмотреть вложение 258972
Спасибо за ответ. И каким образом можно перехукать например?