может возвращать nullptr, поэтому проверяй, что пакет и дата в нем указывают на данныеm_pRakClient->Receive
может возвращать nullptr, поэтому проверяй, что пакет и дата в нем указывают на данныеm_pRakClient->Receive
а плагин может быть даже пустым и крашить? он точно не оставляет никаких своих следов в игре?Что стало с выгрузкой ASI файлов при выгрузке(иногда даже загрузке)?
Все Visual C++ 2005-2022 установлены.
Раньше стабильно загружал/выгружал через консоль SF (pload, pfree) - сейчас ловлю краш игры.
При попытке отладить стек вызовов направляет на ntdll модуль. При ещё более подробной отладке выяснил что после вызова DLLMain со статусом DLL_PROCESS_DETACH проходит корректно и дальше уходит в dll_main_dispatch и внутрение штуки виндовс.
Данную штуку не проверял на обычной сборке, может вне запуска аризоны через лаунчер работает все корректно.
Решил проблему. Оказалось краш происходил из-за не корректного хука dx9 (present, reset).а плагин может быть даже пустым и крашить? он точно не оставляет никаких своих следов в игре?
imgui понимает текст только в utf8, самп - только в cp1251. Конвертируй кодировкиКак исправить рендер текста кириллицы из текст_дравов. Шрифт имгуи точно поддерживает кириллицу. При дебаге текст так-же валидный, а на рисовке уже покрывается знаками вопроса.
Юзаю смейк проект, стандарт С++ 20, sampapi
Посмотреть вложение 256237
Посмотреть вложение 256238
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;
};
Как корректно получить киррилицу при хуке 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; };
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();
Все ещё актуально, параллельно сам пробую, но если кто-то раньше подскажет - буду благодаренВозникли проблемы с хуком функции для 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();
Это из-за того что SF тоже хукает CPad::Update(). Пролог метода изменяется на прыжок в функцию SFВсе ещё актуально, параллельно сам пробую, но если кто-то раньше подскажет - буду благодарен
Спасибо за ответ. И каким образом можно перехукать например?Это из-за того что SF тоже хукает CPad::Update(). Пролог метода изменяется на прыжок в функцию SF
Как выглядит стандартный пролог CPad::Update()
Посмотреть вложение 258971
Пролог CPad::Update() с накатаным SF:
Посмотреть вложение 258972
Почему бы не поставить хук на хукСпасибо за ответ. И каким образом можно перехукать например?