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

Тема в разделе "C/C++", создана пользователем Jesik, 10 май 2013.

  1. GovnocodeLua

    GovnocodeLua Знающий

    Регистрация:
    24 июн 2018
    Сообщения:
    214
    Симпатии:
    17
    Не работает upload_2019-1-8_19-25-40.png
    Код:
    HWND hWnd = FindWindow(0, "Calculator");
     
  2. iAmerican

    Друг

    Регистрация:
    17 фев 2014
    Сообщения:
    565
    Симпатии:
    228
    многобайтовую кодировку поставь.
     
  3. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
    в имгуи можно как то сменить цвет этих стрелочек на затрагивая цвет текста?
    это в функции BeginMenu

    upload_2019-1-9_8-13-19.png
     
  4. F11GAR0.

    F11GAR0. Постоянный участник

    Регистрация:
    8 июн 2017
    Сообщения:
    88
    Симпатии:
    88
    upload_2019-1-9_14-26-40.png upload_2019-1-9_14-27-1.png upload_2019-1-9_14-27-18.png
    один хуй недопустимый тип операнда, чё делать?
     
  5. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    Хз почему, но в студии нельзя сделать jmp адрес.
    Записывай адрес в какой-либо регистр. Ну или закрой asm вставку и запиши static uint32_t addr =адрес, и в jmp юзать его.
     
  6. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
    можно)

     
  7. F11GAR0.

    F11GAR0. Постоянный участник

    Регистрация:
    8 июн 2017
    Сообщения:
    88
    Симпатии:
    88
    кароче там немного в другом был прикол, я переписывал fixdist от сртима, и долго думал чё там хук на хук стоит, кароче это были джампы внутри области этой хексовой, я тупо метки ебанул и заработало норм upload_2019-1-9_17-40-59.png
     
  8. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
     
  9. SiTrak

    SiTrak Интересующийся

    Регистрация:
    14 янв 2018
    Сообщения:
    137
    Симпатии:
    40
    Как получить координату кости?
     
  10. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    143
    Симпатии:
    67
    Пример получения кости игрока и отрисовка их. ID костей находятся в CPed.h

    #pragma region DrawBones
                        if (enableDrawBones) {
                            actor_info *actorInfo = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped;
                            CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);
    
                            float posX[15], posY[15];
                            int counter = 0;
                            CVector vPos[15];
    
                            for (int i = 1; i <= 53; i++)
                            {
                                switch (i)
                                {
                                case 1:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 3:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 4:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
    
                                    counter++;
                                    break;
                                case 5:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 6:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 22:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 23:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 25:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 32:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 33:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 35:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 42:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 43:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 52:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
                                case 53:
                                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                    counter++;
                                    break;
    
                                }
    
                            }
    
                            for (int i = 0; i <= 14; i++) SF->getGame()->convert3DCoordsToScreen(vPos[i].fX, vPos[i].fY, vPos[i].fZ, &posX[i], &posY[i]);
    
                            SF->getRender()->DrawLine(posX[0], posY[0], posX[1], posY[1], 1, 0xFFFFFFFF);
                            SF->getRender()->DrawLine(posX[0], posY[0], posX[11], posY[11], 1, 0xFFFFFFFF);
                            SF->getRender()->DrawLine(posX[0], posY[0], posX[13], posY[13], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[1], posY[1], posX[2], posY[2], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[2], posY[2], posX[5], posY[5], 1, 0xFFFFFFFF);
                            SF->getRender()->DrawLine(posX[2], posY[2], posX[8], posY[8], 1, 0xFFFFFFFF);
                            SF->getRender()->DrawLine(posX[2], posY[2], posX[3], posY[3], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[3], posY[3], posX[4], posY[4], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[5], posY[5], posX[6], posY[6], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[6], posY[6], posX[7], posY[7], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[8], posY[8], posX[9], posY[9], 1, 0xFFFFFFFF);
    
                            SF->getRender()->DrawLine(posX[9], posY[9], posX[10], posY[10], 1, 0xFFFFFFFF);
                        }
    #pragma endregion DrawBones  
     
    SiTrak нравится это.
  11. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
    кто тебя учил плюсам?
     
    imring нравится это.
  12. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    Че за ...?
    Перечисляй так:
    
    case 1: case 3: case 4: case 5: case 6: case 22: // ...
    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
    counter++;
    break;
    
     
  13. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    143
    Симпатии:
    67
  14. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    228
    Симпатии:
    21
    Вынес за блок init, но уведомляет об оружии в руке только при загрузке скрипта. Почему лишь при загрузке?
    void CALLBACK mainloop()
    {  
        static bool init = false;
        if (!init)
        {
            if (GAME == nullptr)
                return;
            if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                return;
            if (!SF->getSAMP()->IsInitialized())
                return;
            SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}Loaded.");
            init = true;  
        }
    
        // Уведомляет только 1 раз, держа оружие в руке при подгрузке скрипта. без использования static флудит в чат, пытался исправить установкой 0 значения - сразу же заменяет, return'нить - не помогло.
        static int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
        if (current_weapon == 31)
        {
            SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1 at your right hand.");
            current_weapon = 0;
        }
    }
     
  15. Romelo

    Romelo dev.
    Проверенный

    Регистрация:
    21 ноя 2014
    Сообщения:
    305
    Симпатии:
    260
    статик это круто
     
    Harryss и Rjx13 нравится это.
  16. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
    нахуя здесь свитч обьясните, если можно сразу вызвать функу какую он хочет перед этим поставив проверку на число
     
  17. Soreso

    Soreso Новичок

    Регистрация:
    3 янв 2019
    Сообщения:
    4
    Симпатии:
    0
    Попытался сделать получение координат кости и рисовать на них, но чё то не то

    #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
    #include <windows.h>
    #include <string>
    #include <assert.h>
    #include <process.h>
    #define FUNC_IsVisible 0x536BC0
    #include "SAMPFUNCS_API.h"
    #include "game_api\game_api.h"
    SAMPFUNCS *SF = new SAMPFUNCS();
    
    
    bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
    {
        if (SUCCEEDED(SF->getRender()->BeginRender())) // если рендерер готов к рисованию
        {
            for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
            {
                actor_info *actorInfo = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped;
                CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);
    
                float posX[15], posY[15];
                int counter = 0;
    
                CVector vPos[15];
    
                for (int i = 1; i <= 53; i++)
                {
                    switch (i)
                    {
                    case 1:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 3:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 4:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 5:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 6:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 22:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 23:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 25:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 32:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 33:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 35:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 42:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 43:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 52:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    case 53:
                        Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                        counter++;
                    }
    
                }
                if (Ped->IsOnScreen())
                {
                    for (int i = 0; i <= 14; i++) SF->getGame()->convert3DCoordsToScreen(vPos[i].fX, vPos[i].fY, vPos[i].fZ, &posX[i], &posY[i]);
    
                    SF->getRender()->DrawLine(posX[0], posY[0], posX[1], posY[1], 2, 0xFFFFFFFF);
                    SF->getRender()->DrawLine(posX[0], posY[0], posX[11], posY[11], 2, 0xFFFFFFFF);
                    SF->getRender()->DrawLine(posX[0], posY[0], posX[13], posY[13], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[1], posY[1], posX[2], posY[2], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[2], posY[2], posX[5], posY[5], 2, 0xFFFFFFFF);
                    SF->getRender()->DrawLine(posX[2], posY[2], posX[8], posY[8], 2, 0xFFFFFFFF);
                    SF->getRender()->DrawLine(posX[2], posY[2], posX[3], posY[3], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[3], posY[3], posX[4], posY[4], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[5], posY[5], posX[6], posY[6], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[6], posY[6], posX[7], posY[7], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[8], posY[8], posX[9], posY[9], 2, 0xFFFFFFFF);
    
                    SF->getRender()->DrawLine(posX[9], posY[9], posX[10], posY[10], 2, 0xFFFFFFFF);
                }
    
                SF->getRender()->EndRender(); // завершаем рисование
            }
        };
        return true; // возвращаем положительный результат
    };
    
    void CALLBACK mainloop()
    {
        static bool init = false;
        if (!init)
        {
            if (GAME == nullptr)
                return;
            if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                return;
    
            if (!SF->getSAMP()->IsInitialized())
                return;
            //SF->getSAMP()->registerChatCommand("stillobj", sasas);
            init = true;
        }
    }
    
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
    {
        switch (dwReasonForCall)
        {
        case DLL_PROCESS_ATTACH:
            SF->initPlugin(mainloop, hModule);
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
    В чём ошибка?
     
  18. Rjx13

    Rjx13 Интересующийся

    Регистрация:
    2 июн 2018
    Сообщения:
    143
    Симпатии:
    67
    
                for (int i = 0; i < SAMP_MAX_PLAYERS; i++) // перебор всех игроков
                {
    #pragma region ValidPlayer
                    // провер¤ем каждого игрока на валидность, зону стрима
                    if (SF->getSAMP()->getPlayers()->iIsListed[i] != 1) continue;
                    if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == NULL) continue;
                    if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData == NULL) continue;
                    if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL) continue;
                    if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL) continue;
                    // Если игрок не существует или не в зоне стрима, то пропускаем
    #pragma endregion ValidPlayer
    
    Регистрация callback"а в mainloop для кого?
    SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
     
  19. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    228
    Симпатии:
    21
    Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
    void gun_func(void)
    {
        int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
        if (current_weapon == 31)
        {
            SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
        }
    }
    
    void CALLBACK mainloop()
    {
        static bool init = false;
        if (!init)
        {
            if (GAME == nullptr)
                return;
            if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                return;
            if (!SF->getSAMP()->IsInitialized())
                return;
            init = true;   
        }
        gun_func();
    }
     
    #3309 Harryss, 12 янв 2019
    Последнее редактирование: 12 янв 2019
  20. iAmerican

    Друг

    Регистрация:
    17 фев 2014
    Сообщения:
    565
    Симпатии:
    228
    Как то так вроде. Не проверял
     
    Harryss нравится это.
  21. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    168
    Симпатии:
    63
    Попробуй вот так, не самый лудший вариант, можеш еще задержку(GetTickCount) поставить на gun_func().
    void gun_func(void)
        {
            static unsigned char current_weapon = -1;
            if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon != current_weapon){
                if (current_weapon == 31) SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
                current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
            }
        }
    
        void CALLBACK mainloop()
        {
            static bool init = false;
            if (!init)
            {
                if (GAME == nullptr)
                    return;
                if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                    return;
                if (!SF->getSAMP()->IsInitialized())
                    return;
                init = true;
            }
            gun_func();
        }
    Подскажите, для чего нужен #pragma region, и что он делает?
     
    Harryss нравится это.
  22. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    Stiopko нравится это.
  23. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    168
    Симпатии:
    63
  24. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    Да
     
    Stiopko нравится это.
  25. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
    @FYP
    в собе не срабатывает деструктор, в связи с этим появляются краши при /q
    знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

    то что ниже, это не то
    #define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
    #define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32
     
    #3315 Jenecheque, 14 янв 2019
    Последнее редактирование: 14 янв 2019
  26. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    В смысле не верные? Эти адреса подходят для SAMP 0.3.7 R1, только что проверил.
     
  27. Jenecheque

    Jenecheque Интересующийся

    Регистрация:
    12 окт 2014
    Сообщения:
    153
    Симпатии:
    76
    поставил на них хук и вывожу там сообщение в чат, итог такой что они постоянно флудят, как будто это Present а не деструктор )
     
  28. woksonal

    Проверенный

    Регистрация:
    31 май 2013
    Сообщения:
    255
    Симпатии:
    192
    00823bdb 212 _doexit
     
  29. LUCHARE

    LUCHARE BH Team
    Друг

    Регистрация:
    23 май 2017
    Сообщения:
    531
    Симпатии:
    619
    это действительно так, если не продолжить выполнение оригинального кода после хука (деструктор будет вызваться до тех пор, пока значение глобального объекта CNetGame не станет равно нулю)
     
  30. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    228
    Симпатии:
    21
    Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?
     
  31. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    Смотря как сделаешь, можно как и с директории windows грузить, так и в сам плагин запихать шрифт.
     
  32. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    228
    Симпатии:
    21
    Есть вариации работы с JSON? Создание, запись, чтение. Иль же на худой конец INI. Находил на форуме FileMan от SR_Team, но ссылка устарела, больше ничего не накопал.
     
  33. ALF

    ALF
    Проверенный

    Регистрация:
    14 ноя 2017
    Сообщения:
    123
    Симпатии:
    139
    Harryss нравится это.
  34. Roger571

    Roger571 Активный участник

    Регистрация:
    22 июл 2015
    Сообщения:
    31
    Симпатии:
    8
  35. Rinat_Namazov

    Rinat_Namazov ( ͡° ͜ʖ ͡°)
    Друг

    Регистрация:
    9 авг 2015
    Сообщения:
    1.124
    Симпатии:
    554
    Если нужна библиотека с фишками C++ 11/14, то лучший выбор это: nlohmann/json(https://github.com/nlohmann/json)
    Небольшое введение на русском: Как могла бы выглядеть поддержка JSON в современном С++(https://habr.com/ru/company/infopulse/blog/254075/)
     
    Harryss нравится это.