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

maksmanus228

Активный
129
54
добрый день, у меня есть новая функция UpdateNetwork (пока что переписанная с idb сампа) и у меня крашит игра при попытке прописать packet->data
вот код
[/I] void __fastcall SSmpPackets::UpdateNetwork(CNetGame* game, void* edx) { Packet* packet = nullptr; uint8_t* localdata = nullptr; uint8_t state {}; for(packet = game->m_pRakClient->Receive(); packet; packet = game->m_pRakClient->Receive()) { localdata = packet->data; if(*localdata == 40) state = localdata[5]; switch(state) { case 12: game->Packet_AuthKey(packet); break; case 29: { AddDebugMessage("The server didn't respond. Retrying.."); game->m_nGameState = 1; break; } case 31: { AddDebugMessage("The server didn't respond. Retrying.."); break; } case 32: game->Packet_DisconnectionNotification(packet); break; case 33: game->Packet_ConnectionLost(packet); break; case 34: game->Packet_ConnectionSucceeded(packet); break; case 35: AddDebugMessage("Failed to initialize encryption."); break; case 36: AddDebugMessage("You are banned from this server."); break; case 37: { AddDebugMessage("Wrong server password."); game->m_pRakClient->Disconnect(0, 0); break; } case 200: game->Packet_VehicleSync(packet); break; case 203: game->Packet_AimSync(packet); break; case 206: game->Packet_BulletSync(packet); break; case 207: game->Packet_PlayerSync(packet); break; case 208: game->Packet_MarkersSync(packet); break; case 209: game->Packet_UnoccupiedSync(packet); break; case 210: game->Packet_TrailerSync(packet); break; case 211: game->Packet_PassengerSync(packet); break; default: break; } game->m_pRakClient->DeallocatePacket(packet); } } [I]

В чем может быть дело? структура Packet взяты из этого репозитория:

рак нет для сампа

и еще: работает ли правильно структура Packet2 от этого же репозитория
 

EclipsedFlow

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

whyega52

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

EclipsedFlow

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

EclipsedFlow

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


1730665614181.png

 

kin4stat

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

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

EclipsedFlow

Известный
Проверенный
1,047
476
Как корректно получить киррилицу при хуке 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;
};
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,800
2,665
Как корректно получить киррилицу при хуке 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,047
476
Возникли проблемы с хуком функции для 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,047
476
Возникли проблемы с хуком функции для 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

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

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


Пролог CPad::Update() с накатаным SF:
Знімок екрана 2024-12-08 004944.png
 
  • Нравится
Реакции: whyega52 и EclipsedFlow

EclipsedFlow

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

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

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