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

whyega52

Eblang головного мозга
Модератор
2,832
2,743
вроде сделал все по гайду, но чет не изменяется погода
main.cpp:
#include "main.hpp"

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case VK_F10: {
                    *reinterpret_cast<unsigned char*>(0xC81320) += 1;
                    printStringNow("2", 1000, NULL, false);
                    break;                   
                }
                case VK_F2: {
                    *reinterpret_cast<unsigned char*>(0xC81320) -= 1;
                    printStringNow("3", 1000, NULL, false);
                    break;                   
                }
            }               
        }
    }
    return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH: {
            DisableThreadLibraryCalls(hModule);           
            wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
            break;
        }
        case DLL_PROCESS_DETACH: {
            break;
        }
    }
    return TRUE;
}
main.hpp:
#pragma once

#include <windows.h>
#include <process.h>

LONG wHandle;

void printStringNow(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x69F1E0)(text, time, flag, bPreviousBrief);
}
 

ARMOR

Мне кажется, я всё проебал
Модератор
5,021
7,081
вроде сделал все по гайду, но чет не изменяется погода
main.cpp:
#include "main.hpp"

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case VK_F10: {
                    *reinterpret_cast<unsigned char*>(0xC81320) += 1;
                    printStringNow("2", 1000, NULL, false);
                    break;                  
                }
                case VK_F2: {
                    *reinterpret_cast<unsigned char*>(0xC81320) -= 1;
                    printStringNow("3", 1000, NULL, false);
                    break;                  
                }
            }              
        }
    }
    return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH: {
            DisableThreadLibraryCalls(hModule);          
            wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
            break;
        }
        case DLL_PROCESS_DETACH: {
            break;
        }
    }
    return TRUE;
}
main.hpp:
#pragma once

#include <windows.h>
#include <process.h>

LONG wHandle;

void printStringNow(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x69F1E0)(text, time, flag, bPreviousBrief);
}
Там нужно сам плагин подгрузить с помощью pload( команда для консоли sf ), или процесс хакером
 

ARMOR

Мне кажется, я всё проебал
Модератор
5,021
7,081
та я вроде асишник сделал, поидее его аси лоадер должен подгружать
Там wndProc подключается к GTA:SA:MP, а во время окна загрузки игры у окна игры другое название.

дайте адрес конструктора CTaskSimpleRunNamedAnim
0x61A990
Прототип (спиздил с иды) :
C++:
CTaskSimpleRunNamedAnim *__thiscall CTaskSimpleRunNamedAnim::CTaskSimpleRunNamedAnim(CTaskSimpleRunNamedAnim *this, int animName, int fileName, int flags, float frameDelta, int time, char nonInterruptable, char isActiveSequence, char dontLockZ, char a10)
 

whyega52

Eblang головного мозга
Модератор
2,832
2,743
Там wndProc подключается к GTA:SA:MP, а во время окна загрузки игры у окна игры другое название.
не пон, так вродя мне и надо, шоб к уже загруженному сампу регался вндпрок
1670703447019.png
 
  • Эм
  • Bug
Реакции: F0RQU1N and и ARMOR

ARMOR

Мне кажется, я всё проебал
Модератор
5,021
7,081
не пон, так вродя мне и надо, шоб к уже загруженному сампу регался вндпрок
Посмотреть вложение 181235
Плагин загружается к игре моментально после запуска игры. Но когда плагин подключается - игра ещё на загрузочном екране ( Где у тебя идёт полоска и пишет ГТА САН АНДРЕАС МУЛЬТИПЛЕЕР, САМПФУНКС, и прочая херь. ) и у её окна в этот момент другое название. А когдя игра уже загружается( ты появляешься на пляже и подключаешься к серверу ) окно меняет свое название на GTA:SA:MP, но подключение плагина, и самого wndProc'а уже прошло в момент запуска игры.

Название во время загрузочного экрана:
Без імені.png

Название во время уже запущеной игры
5.png
 
  • Нравится
Реакции: whyega52

whyega52

Eblang головного мозга
Модератор
2,832
2,743
Плагин загружается к игре моментально после запуска игры. Но когда плагин подключается - игра ещё на загрузочном екране ( Где у тебя идёт полоска и пишет ГТА САН АНДРЕАС МУЛЬТИПЛЕЕР, САМПФУНКС, и прочая херь. ) и у её окна в этот момент другое название. А когдя игра уже загружается( ты появляешься на пляже и подключаешься к серверу ) окно меняет свое название на GTA:SA:MP, но подключение плагина, и самого wndProc'а уже прошло в момент запуска игры.

Название во время загрузочного экрана:
Посмотреть вложение 181237
Название во время уже запущеной игры
Посмотреть вложение 181238
получается надо регать вндпрок уже после смены названия окна?

Название во время уже запущеной игры
Посмотреть вложение 181238
Да, выгрузил плагин, потом заинжектил, заработало
 

whyega52

Eblang головного мозга
Модератор
2,832
2,743
Как можно заменять asi файл в активной гта, если выходной путь при компиляции это корень сборки?
 

whyega52

Eblang головного мозга
Модератор
2,832
2,743
чистить всё за собой нужно и тогда крашить не будет
де и как правильно почистить тут за собой?
C++:
#include "main.hpp"

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case 0x31: {
                    *reinterpret_cast<unsigned __int16*>(0xC81320) += 1;
                    /*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
                    break;                   
                }
                case 0x32: {
                    *reinterpret_cast<unsigned __int16*>(0xC81320) -= 1;
                    /*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
                    break;                   
                }
            }               
        }
    }
    return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH: {
            DisableThreadLibraryCalls(hModule);           
            wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
            break;
        }
        case DLL_PROCESS_DETACH: {
            break;
        }
    }
    return TRUE;
}
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
334
729
де и как правильно почистить тут за собой?
C++:
#include "main.hpp"

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case 0x31: {
                    *reinterpret_cast<unsigned __int16*>(0xC81320) += 1;
                    /*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
                    break;                 
                }
                case 0x32: {
                    *reinterpret_cast<unsigned __int16*>(0xC81320) -= 1;
                    /*
                        sprintf(buffer, "weatherID: %d", *(unsigned __int16*)0xC81320);
                        printStringNow(buffer, 1000, NULL, false);
                    */
                    break;                 
                }
            }             
        }
    }
    return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH: {
            DisableThreadLibraryCalls(hModule);         
            wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
            break;
        }
        case DLL_PROCESS_DETACH: {
            break;
        }
    }
    return TRUE;
}
юзай хукер, а не эту шляпу, для перехвата wnd proc
 
  • Нравится
  • Клоун
Реакции: Fott, ARMOR и whyega52