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

manukhov

Известный
122
129
Wndproc хук на экстернале работает? Я вроде все правильно сделал, и нихера не работает.
wndProc:
WNDPROC        g_origWndProc = NULL;



LRESULT CALLBACK WndProcHook(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    std::cout << "kek" << "\n";
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
            case VK_SHIFT:
            {
                std::cout << "Here. This phrase is the best debugger";
                break;
            }
            }
        }
    }
    return CallWindowProc(g_origWndProc, hwnd, uMsg, wParam, lParam);
}



g_origWndProc = (WNDPROC)SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, (LONG)WndProcHook);

Даже kek не выводит. Тыкните где ошибка. Запускаю от имени одмена
Нет. Тебе нужно перехватывать события клавиатуры. Когда твоё окно не в фокусе винда не будет реагировать на его события.
 
Последнее редактирование:

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,759
4,891
Опять я со своими тупыми вопросами. Можно ли через память сделать гидравлику машине? По идее же игра хранит где-то информацию о наличии гидравлики у машины
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,759
4,891
gtamodding.ru поищи там
Полностью облазил пункты cVehicle и cAutomobile в адресах памяти, Пробовал через поиск по странице разные упоминания тюнинга/гидравлики. Нашел upgrade[15], но как работает так и не понял. Адреса памяти функций тоже облазил полностью, там такого тоже нет. В клео есть такой опкод, но на радмир клео не совсем нормально работает.
UPD: Порывшись в обычной гта, выяснил, что когда ставишь собейтом гидравлику, в upgrade[0](cVehicle + 0x43A) записывается 1087. Но когда вручную туда записываешь 1087, гидравлика не появляется, а при добавлении ее через собейт, 1087 записывается в следующую ячейку(upgrade[1])
UPD2: В исходниках собейта нашел такую штуку
call FUNC_cVehcile_AddVehicleUpgrade
как я понял эта функция задейфайнена как адрес в памяти. Найти бы теперь его еще :D
UPD3:
Нашел адрес функции, осталось только найти способ выполнять ASM внутри другого процесса.
 
Последнее редактирование:

Dark_Knight

Me, me and me.
Друг
4,080
2,112
Plugin SDK смотрел? И зачем юзать АСМ, если можно спокойно вызвать функцию и без него.
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,759
4,891
Plugin SDK смотрел? И зачем юзать АСМ, если можно спокойно вызвать функцию и без него.
Не знал даже о такой штуке лол. Потом гляну.
Насчет вызова. Как можно в External вызвать функцию?
 

trefa

3d print
Всефорумный модератор
2,140
1,338
Как получить угол поворота машины, через квантарион пробывал - не оч.
 

Musaigen

ihatemyself
Проверенный
1,709
1,601
Как получить угол поворота машины, через квантарион пробывал - не оч.
C++:
// Вроде так.
void CPlaceable::SetHeading(float fHeading)
{
    reinterpret_cast<void(__thiscall*)(CPlaceable*, float)>(0x43E0C0)(this, fHeading);
}

float CPlaceable::GetHeading()
{
    return reinterpret_cast<float(__thiscall*)(CPlaceable*)>(0x441DB0)(this);
}
 

_!danek!_

Новичок
9
3
всем привет есть 2 вопроса:
1. как узнать ид/имя текущей анимации (не нашел этого на сайте с адресами)
2. возможно ли как то узнать отключить определенные анимации (к примеру cowboy или DAM_armL_frmFT).
Вроде так можно узнать ид анимации.
C++:
int animationid = SF->getSAMP()->getPlayers()->pLocalPlayer->sCurrentAnimID;
SF->getSAMP()->getChat()->AddChatMessage(-1, "AnimationID: %d", animationid);
 

loganhackerdff

Известный
867
521
Как "скачать" сайт если он под защитой от ддос( типо подождать 5секунд )
 

traceattack

Известный
218
118
Есть ли у кого адрес указателя на угол трастеров гидры. Ну или название функи в SF, я чет не нашел 😢(Доступа к нормальному компу пока нет, а если на данном ведре запущу CE и запущу скан, хорошо будет если он хотя бы не расплавится)
 
Последнее редактирование:

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,759
4,891
Назрело у меня пару вопросов
Первое:
Структура SAMP R3 Выглядит следующим образом:
1594506376030.png
Каким образом в ulPort попадает порт, у которого оффсет 1388?

Второе:
Как на хукнутом RakClientInterface реализовать перехват входящих RPC как в s0beit'е. Т.е. условно если сервер пытается сетнуть мне хп, у меня в чат вывелось, что сервер мне пытается поставить мне хп. Или например нопить входящие RPC.

Третье:
Почему-то при вызове addChatMessage в основном потоке, работает, а при вызове этой же функции в где-нибудь в другом месте крашит.
Потоки:
void test(char* szParams)
{
    pSAMP->addMessageToChat(0xFFFFFFFF, "addMessageToChat causes exception in gta_sa.exe(samp.dll)");
}

void mainThread(void *pvParams)
{
   
    if (pSAMP)
    {
        while (!pSAMP->tryInit())
        {
            Sleep(100);
        }
        pSAMP->addMessageToChat(0xFFFFFFFF, "addMessageToChatWorks here!");
        pSAMP->addClientCommand("test", test);
    }
}
addMessageToChat:
void SAMPFramework::addMessageToChat(D3DCOLOR cColor, const char* szMsg, ...)
{
    if (g_Chat == nullptr)
        return;

    void(__thiscall * AddToChatWindowBuffer) (const void* _this, int iType, char* szText, char* szPrefix, DWORD cColor, DWORD cPrefixColor) =
        (void(__thiscall*) (const void*, int, char*, char*, DWORD, DWORD)) (dwSAMPAddr + SAMP_FUNC_ADDTOCHATWND);

    if (szMsg == NULL)
        return;

    va_list ap;
    char tmp[512];
    memset(tmp, 0, 512);
    va_start(ap, szMsg);
    vsnprintf(tmp, sizeof(tmp) - 1, szMsg, ap);
    va_end(ap);

    return AddToChatWindowBuffer((void*)g_Chat, 8, tmp, NULL, cColor, 0x00);
}
Само исключение:
Вызвано исключение по адресу 0x0A279392 (samp.dll) в gta_sa.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000007.
Стек вызовов пустой