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

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

  1. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    Замени g_dwSAMP на SF->getSAMP()->dwSAMPaddr.
    Как то так, я уже точно не помню , порыскай.

    Проверяй всё ли правильно получает , если все там нормально. Проблема в нажатии клавиши.
     
    #2381 iAmerican, 29 апр 2018
    Последнее редактирование модератором: 15 май 2018
  2. Ed1k

    Ed1k Пользователь

    Регистрация:
    29 апр 2018
    Сообщения:
    7
    Симпатии:
    0
    Может SF->getSAMP()->getSAMPAddr()?
     
  3. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    Да , оно самое.
     
    Ed1k нравится это.
  4. AndreyS

    AndreyS Известный пользователь

    Регистрация:
    27 май 2016
    Сообщения:
    68
    Симпатии:
    12
    Где там нажатие клавиши?
     
  5. Ed1k

    Ed1k Пользователь

    Регистрация:
    29 апр 2018
    Сообщения:
    7
    Симпатии:
    0
    Как получить список всех игроков, кто рядом?
     
  6. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    DWORD lol = 0xB73458;
                lol=lol + 34;
                int temp = 255;
                WriteProcessMemory(pwHandle, (LPVOID)lol, &temp, 4, 0);
     for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            if (SF->getSAMP()->getPlayers()->iIsListed[i] != 1)
                continue;
            if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == NULL)
                continue;
    
            if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData == NULL || SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL)
                continue;
    // i - переменная с игроками.
    
    }
    
     
    #2386 iAmerican, 29 апр 2018
    Последнее редактирование модератором: 15 май 2018
  7. Ed1k

    Ed1k Пользователь

    Регистрация:
    29 апр 2018
    Сообщения:
    7
    Симпатии:
    0
    1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegCloseKey@4 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
    1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegOpenKeyExA@20 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
    1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__RegQueryValueExA@24 в функции "bool __cdecl GetPlayerAccess(void)" (?GetPlayerAccess@@YA_NXZ)
    В чём проблема?
     
  8. BlackKnigga

    Друг

    Регистрация:
    10 янв 2016
    Сообщения:
    894
    Симпатии:
    430
    Либу не подключил
     
    Ed1k нравится это.
  9. AndreyS

    AndreyS Известный пользователь

    Регистрация:
    27 май 2016
    Сообщения:
    68
    Симпатии:
    12
    спасибо
     
  10. Ed1k

    Ed1k Пользователь

    Регистрация:
    29 апр 2018
    Сообщения:
    7
    Симпатии:
    0
    Как можно узнать скорость машины, в которой сидит игрок?

    Погуглил, не нашёл информации о библиотеке и как её подключить.
     
    #2390 Ed1k, 30 апр 2018
    Последнее редактирование модератором: 1 май 2018
  11. BlackKnigga

    Друг

    Регистрация:
    10 янв 2016
    Сообщения:
    894
    Симпатии:
    430
    #pragma comment(lib, "advapi32")
     
  12. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26 окт 2013
    Сообщения:
    2.980
    Симпатии:
    2.786
    через #pragma не надо. Ее только cl поддерживает
     
  13. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    Ed1k нравится это.
  14. _Vine_

    _Vine_ Известный пользователь

    Регистрация:
    6 янв 2016
    Сообщения:
    83
    Симпатии:
    8
    Немного некорректный вопрос, но по другому не знаю как его задать.
    Сделал хук Present и Reset через таблицу виртуальных методов. Адрес таблицы получаю создавая второй D3DDevice, получаю адрес его виртуальной таблицы, получаю адрес методов, перехватываю их через MinHook, а после выгружаю из памяти D3DDevice.
    Все почти идеально, работает, почти никаких проблем нет.
    Суть самой проблемы проста: у некоторых людей это не работает вовсе.. то есть я скидываю asi плагин, который человек должен будет закинуть в корень гта и зайти в игру, а в игре должно отрисоваться тестовое окошко ImGui, но у 3 человек этого окошка нет, не рисует(крашей и т.д. нет, просто не рисует).
    С чем это может быть связано, может быть, кто нибудь уже сталкивался с такой проблемой(не очень хочу устанавливать этим людям TeamViewer и проверять через откладчик в чем же там проблема)?
     
    #2394 _Vine_, 30 апр 2018
    Последнее редактирование: 30 апр 2018
  15. CleanLegend

    CleanLegend Известный пользователь

    Регистрация:
    28 мар 2013
    Сообщения:
    80
    Симпатии:
    71
    Возможно конфликты с чем - то, пусть попробуют на чистой гта
     
  16. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26 окт 2013
    Сообщения:
    2.980
    Симпатии:
    2.786
    Почему бы не юзать хук из соба? Если принципиально использовать уникальный метод поиска оригинальной таблицы, то в сети есть метод ее нахождения паттерном.
     
  17. _Vine_

    _Vine_ Известный пользователь

    Регистрация:
    6 янв 2016
    Сообщения:
    83
    Симпатии:
    8
    Так же использовал приложение D3D9 Test, которое создает свой девайс и рисует текст в окне, а так же подгружает автоматически frm.dll, которое находится в папке с ним.
    Frm.dll это и есть мой хук, я скидывал программу и Длл людям, и у них так же не рисовало окошко.
    Так же, заметил только вчера, у некоторых из тех людей хук заработал на пару часов(и в гта, и в D3D9 Test), а потом чудом опять работать перестал(Frm.dll был один и тот же).
    Магия..
    DWORD dwVTablePattern = FindPattern(hD3D9, "\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
    Оно?
     
  18. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26 окт 2013
    Сообщения:
    2.980
    Симпатии:
    2.786
    Похоже на него. Возможно оно и есть
     
  19. _Vine_

    _Vine_ Известный пользователь

    Регистрация:
    6 янв 2016
    Сообщения:
    83
    Симпатии:
    8
    Ок, попробую поиск таблицы через паттерн или в собе хук поищу.
     
  20. Ed1k

    Ed1k Пользователь

    Регистрация:
    29 апр 2018
    Сообщения:
    7
    Симпатии:
    0
    а как тогда? Если можно пример, буду благодарен.
     
  21. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26 окт 2013
    Сообщения:
    2.980
    Симпатии:
    2.786
    В свойствах проекта
     
    Ed1k нравится это.
  22. _Vine_

    _Vine_ Известный пользователь

    Регистрация:
    6 янв 2016
    Сообщения:
    83
    Симпатии:
    8
    Проверил хук VMT, найденной через паттерн, результат тот же, что и был(тестировал в d3d9 test).
     
  23. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    Без кода , это тоже самое что иголку в стоге сена искать.
     
  24. Apolo11

    Apolo11 Известный пользователь

    Регистрация:
    17 янв 2016
    Сообщения:
    53
    Симпатии:
    13
    По какой причине колоредитор может не отображать выбираемый цвет в имгуи? Именно сам квадрат белый всегда.
     
  25. Bazzl

    Bazzl Известный пользователь

    Регистрация:
    13 фев 2016
    Сообщения:
    74
    Симпатии:
    5
    Вообщем, проблема такая. RegEx не может найти ник в чате. Что не так?
    std::string chatm = msg;
            std::smatch chatres;
            std::regex poisk(R"(Samuel_Revalto)");
            if (std::regex_match(chatm, chatres, poisk))
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Найдено");
            SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", poisk);
    Пробовал даже выводить его в AddChatMessage, на что я получал это:
    [​IMG]

    Пример сообщения:
    Администратор Samuel_Revalto[235] для Paolo_Boone[133]: Транслит офф
     
    Kleves нравится это.
  26. Dark_Knight

    Dark_Knight Nine...s...
    Друг

    Регистрация:
    18 мар 2013
    Сообщения:
    3.101
    Симпатии:
    1.463
    Дай всю строку.
     
    #2406 Dark_Knight, 8 май 2018
    Последнее редактирование: 8 май 2018
  27. Vlad Horii

    Проверенный

    Регистрация:
    16 июл 2017
    Сообщения:
    296
    Симпатии:
    190
    regex_search
     
  28. Bazzl

    Bazzl Известный пользователь

    Регистрация:
    13 фев 2016
    Сообщения:
    74
    Симпатии:
    5
    Спасибо, я забыл, что создавал подобную тему в SF API, вы мне тогда ответили, все прекрасно работает!
    #include <regex>
    #include <string>
    using namespace std;
    
    bool CALLBACK incomingRPC(stRakNetHookParams *params) {
        if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage) {
            DWORD        len, color;
            char        msg[144];
            BitStream *bs = params->bitStream;
            bs->Read(color);
            bs->Read(len);
            bs->Read(msg, len);
            msg[len] = '\0';
            string str = msg;
            try {
                if (color == 0xFF5030AA &&
                    regex_search(msg, res, regex(R"(Администратор (.*) выдал бан чата игроку)"))){
                    SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", res[1].str().c_str());
                }
            }
            catch (const exceptions &e){
                SF->Log("%s | %s", __FUCTION__, e.what());
            }
        };
        return true; // успешно завершаем обработку RPC.
    };
    Уже нашел ответ...
     
  29. _Vine_

    _Vine_ Известный пользователь

    Регистрация:
    6 янв 2016
    Сообщения:
    83
    Симпатии:
    8
    В чем тут проблема?
    При нажатии клавиши "1", "2" или "3" должна эмулироватся игровая клавиша под номером "1", которая заставляет игрока бежать вперед/назад.
    Писал код на CLEO - все работает безупречно, персонаж бежит.
    Писал код на SF API, используя SF->getGame()->emulGTAKey() - персонаж не бежит
    Писал код на SF API, используя SF->getCLEO()->callOpcode() - персонаж не бежит

    Проверял, что функции SF API вызываются, выводя в чат сообщение перед и после их вызова - сообщения в чат выводились, но игрок так же не бежал.
    Код CLEO:
    while true
    wait 0
    key_down 49
    jf continue
    0B56: set_game_key 1 state -128
    end
    Код SF API:
    
    void CALLBACK mainloop()
    {
        static bool init = false;
        if (init)
        {
            if (SF->getGame()->isKeyDown(50))
                SF->getGame()->emulateGTAKey(1, -128);
            if (SF->getGame()->isKeyDown(51))
                SF->getCLEO()->callOpcode("0B56: set_game_key 1 state -128");
            return;
        }
        if (!init)
        {
            if (GAME == nullptr || GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME || !SF->getSAMP()->IsInitialized())
                return;
            init = true;
        }
    }
    
     
  30. ๖ۣۣۜШурик

    ๖ۣۣۜШурик Известный пользователь

    Регистрация:
    20 янв 2017
    Сообщения:
    54
    Симпатии:
    2
    Вопрос, почему зависает при использовании рендера у Windows XP? На 7, 8, 10 всё нормально работает, а на XP - зависание.
     
  31. Dark_Knight

    Dark_Knight Nine...s...
    Друг

    Регистрация:
    18 мар 2013
    Сообщения:
    3.101
    Симпатии:
    1.463
    Потому, что ХП - уже мертвая система. Забей на её поддержку.
     
  32. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    Есть у кого функция удаления пикапов?
     
  33. _Vine_

    _Vine_ Известный пользователь

    Регистрация:
    6 янв 2016
    Сообщения:
    83
    Симпатии:
    8
    Эмулируй RPC_DestroyPickup
     
  34. iAmerican

    Проверенный

    Регистрация:
    17 фев 2014
    Сообщения:
    456
    Симпатии:
    133
    Хорошо , скинь мне эмуляцию не на SF.
     
  35. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26 окт 2013
    Сообщения:
    2.980
    Симпатии:
    2.786
    int __thiscall stPickupPool::RemovePickup(stPickupPool *this, signed int id)

    samp.dll+0xFE70
     
    iAmerican нравится это.