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

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

  1. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    bool CALLBACK incomingRPC(stRakNetHookParams * params)
    {
        if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage)
        {
            DWORD strlen;
            char string[2048];
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(strlen);
            params->bitStream->Read(string, strlen);
    
            SF->getSAMP()->getChat()->AddChatMessage(-1, "дебаг");
            if (!strcmp(string, "Server closed the connection."))
            {
                SF->getSAMP()->getChat()->AddChatMessage(-1, "Сервер закрыл соединение");
            }
        }
        return true;
    }
    В чат выводит "дебаг", но "Сервер закрыл соединение" - нет. Почему так ?
     
  2. beento

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

    Регистрация:
    17 дек 2017
    Сообщения:
    90
    Симпатии:
    2
    вроде нельзя этот текст хукнуть через raknet

    да в imvec4
     
  3. astap_

    astap_ ой, я ето вслух?
    Проверенный

    Регистрация:
    5 мар 2014
    Сообщения:
    496
    Симпатии:
    366
    отлавливай через структуру чата либо через хук DISCONNECTION_NOTIFICATION
     
  4. Vesca

    Vesca Участник

    Регистрация:
    31 мар 2016
    Сообщения:
    15
    Симпатии:
    0
    How to hook the outcomimg RPC_ServerCommamd?
     
  5. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    Даже если другой текст ввести туда, то всё равно не сравниваются строки

    Как отловить сообщение и сравнить с помощью strcmp ?
     
  6. ALF

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

    Регистрация:
    14 ноя 2017
    Сообщения:
    153
    Симпатии:
    179
    1. не правильно читаешь
    2. Server closed the connection не приходит в RPC_ScrClientMessage
     
  7. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    Без разницы на этот клосед коннекцион, как любое другое сообщение отловить и сравнить ?
     
  8. MasterLight

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

    Регистрация:
    4 сен 2015
    Сообщения:
    32
    Симпатии:
    5
    Всё работает, только есть некоторые проблемы: (к сведению, делается это под МТА)
    1. Скорость пришлось поставить на 0.0001, ибо при 5.0 перекидывало на 50000 метров.
    Всё остальное легче было пихнуть в видео:
    https://youtu.be/0QHm24oULN0
     
  9. ALF

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

    Регистрация:
    14 ноя 2017
    Сообщения:
    153
    Симпатии:
    179
    
    uint strLen, color;
    char szMsg[144];
    
    params->bitStream->ResetReadPointer();
    params->bitStream->Read(color);
    params->bitStream->Read(strLen);
    if (strLen >= sizeof(szMsg)) strLen = sizeof(szMsg) - 1;
    params->bitStream->Read(szMsg, strLen);
    szMsg[strLen] = '\0';
    
    if(strstr(szMsg, "text"))
    {
        // ...
    }
    
     
  10. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    Нужно соблюдать последовательность чтения
     
  11. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    не работает, ничего не происходит
    каллбэк регаю, хз в чём проблема
    SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
     
  12. _=Gigant=_

    _=Gigant=_ Постоянный участник

    Регистрация:
    19 янв 2017
    Сообщения:
    92
    Симпатии:
    72
    http://www.cplusplus.com/reference/cstring/strcmp/
     
  13. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage)
    {
        size_t len;
        DWORD color;
        char message[256];
        params->bitStream->ResetReadPointer();
        params->bitStream->Read(color);
        params->bitStream->Read(len);
        params->bitStream->Read(message, len);
        params->bitStream->ResetReadPointer();
        message[len] = '\0';
    
        if (strcmp(message, "cakebou") == 0)
        {
            SF->getSAMP()->getChat()->AddChatMessage(-1, "Got it!");
        }
    };


    Если что функция strcmp проверяет целую строку, а strstr проверяет часть строки
     
  14. Vesca

    Vesca Участник

    Регистрация:
    31 мар 2016
    Сообщения:
    15
    Симпатии:
    0
    How to hook the outcomimg RPC_ServerCommamd?
     
  15. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    И так и так проверял, не работает, он читает другие строки чата, но почему-то не сравнивает.
    Это проблема появилась после подключения имгуи к проекту.
    Возможно это из-за того что сравнивает с текстом на кириллице.
     
    #3725 Rece1ver, 8 июн 2019
    Последнее редактирование: 8 июн 2019
  16. 2Shae

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

    Регистрация:
    14 май 2014
    Сообщения:
    135
    Симпатии:
    10
    Как отобразить курсор при активном меню ImGui и спрятать его, когда оно закрыто?
     
  17. _=Gigant=_

    _=Gigant=_ Постоянный участник

    Регистрация:
    19 янв 2017
    Сообщения:
    92
    Симпатии:
    72
    static int mouse_imgui_menu = 2;
    
        if (bShow_ImGui_Menu)
        {
            mouse_imgui_menu = 0;
            toggleSAMPCursor(1);
        }
        else
        {
            if (mouse_imgui_menu == 0)
            {
                toggleSAMPCursor(0);
                mouse_imgui_menu++;
            }
        }
     
  18. Vandal™

    Vandal™ Постоянный участник

    Регистрация:
    6 янв 2016
    Сообщения:
    55
    Симпатии:
    5
    ImGui::Text(u8"Чек-Текст");
    ImGui::Button(u8"Закрыть", ImVec2(75, 20)); - не пашет, все равно вопросы вместо текста.

    UPD:

    
            ImFontConfig font_config;
            font_config.OversampleH = 1;
            font_config.OversampleV = 1;
            font_config.PixelSnapH = 1;
    
            static const ImWchar ranges[] =
            {
                0x0020, 0x00FF, // Basic Latin + Latin Supplement
                0x0400, 0x044F, // Cyrillic
                0,
            };
    
            io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Tahoma.ttf", 16.0f, &font_config, ranges);
    Есть еще решения проблемы, кроме предложенных?
     
    #3728 Vandal™, 8 июн 2019
    Последнее редактирование: 9 июн 2019
  19. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    Чем этот не подходит?
     
  20. _Vine_

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

    Регистрация:
    6 янв 2016
    Сообщения:
    134
    Симпатии:
    29
    Должно работать, может, у тебя в коде есть еще загрузки шрифтов, убедись, что этот шрифт загружается последним или что установлен именно этот шрифт.
    И попробуй сделать так
    io.FontDefault = io.Fonts->AddFontFromFileTTF(fontPath, 16, &font_config, io.Fonts->GetGlyphRangesCyrillic());
     
    Vandal™ нравится это.
  21. Vandal™

    Vandal™ Постоянный участник

    Регистрация:
    6 янв 2016
    Сообщения:
    55
    Симпатии:
    5
    1 - u8"Text" отказывается работать (ImGUI v1.71)
    2 - занимает несколько строк при инициализации, но работает. Стало интересно какие еще решения есть
     
  22. astap_

    astap_ ой, я ето вслух?
    Проверенный

    Регистрация:
    5 мар 2014
    Сообщения:
    496
    Симпатии:
    366
    дефолтный шрифт имгуи не поддерживает кириллицу, какие тут ещё могут быть решения?
     
  23. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    u8 не поможет без загрузки шрифта который поддерживает кириллицу.
     
  24. Rjx13

    Проверенный

    Регистрация:
    2 июн 2018
    Сообщения:
    168
    Симпатии:
    94
    После всех include"ов вставь и глянь:
    #pragma execution_character_set("utf-8")
     
    Vandal™ нравится это.
  25. ishi

    ishi Свой человек

    Регистрация:
    17 янв 2014
    Сообщения:
    445
    Симпатии:
    121
    В c++ проекте на linux мне попалась вот такая интересная строка:
    std::string mainXML = #include "Main.xml";
    Однако, в винде среда считает её ошибкой. Подскажите, есть вариант в винде так же через дефайн загружать содержимое файла в string, без открытия и чтения?
     
  26. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    Чем тебе с чтением не нравится?
     
  27. _Vine_

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

    Регистрация:
    6 янв 2016
    Сообщения:
    134
    Симпатии:
    29
    file.cpp
    R"(int function(int a , int b){
    return a + b;
    })"
    main.cpp
    int main(){
    const char *file = {
    #include "file.h"
    };
    printf("%s\n", file);
    system("pause");
    return 0;
    }
     
    ishi нравится это.
  28. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    как эмулировать нажатие клавишы N без зависания игры в mainloop с повторением ?
     
  29. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    emulategtakey, синхра, win api функции + timer

    void EmulKey(int KeyId)
    {
        stOnFootData sync;
        memset(&sync, 0, sizeof(stOnFootData));
        sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
        sync.sKeys = KeyId;
        BitStream bsActorSync;
        bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
        bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
        SF->getRakNet()->SendPacket(&bsActorSync);
    }
    Эмуляция с помощью синхры


    
    static int time=0;
    
    if(GetTickCount() - 1000 > time)
        {
              time = GetTickCount();
              EmulKey(/* id клавиши */);
         }
    
    
           
    // эмуляция нажатия клавиши 1 раз в секунду
    
     
    Rece1ver нравится это.
  30. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    и какой ид клавиши N ?
     
  31. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    Хукай онфут дату (id_player_sync )и выводи значение клавиши .
    , я с телефона щас так бы написал код
     
  32. Rece1ver

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

    Регистрация:
    26 мар 2016
    Сообщения:
    50
    Симпатии:
    1
    не ебу как это сделать, не работал с пакетами, запрашиваю у вас код клавиши
     
  33. Rjx13

    Проверенный

    Регистрация:
    2 июн 2018
    Сообщения:
    168
    Симпатии:
    94
    С твоим "не ебу как сделать", ты ничего не добьешься. Хукай пакет ID_PLAYER_SYNC выводя в чат параметр stKeys
     
  34. ALF

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

    Регистрация:
    14 ноя 2017
    Сообщения:
    153
    Симпатии:
    179
    https://blast.hk/wiki/tutorials:api_lesson_raknet
     
  35. cakebou

    cakebou Знающий

    Регистрация:
    4 апр 2017
    Сообщения:
    284
    Симпатии:
    49
    КАК ТЫ ТОГДА МОЖЕШЬ БОЛЕЕ СЛОЖНЫЕ ПРОЕКТЫ ПИСАТЬ? ЕСЛИ ТЫ ЕБУЧИЙ БС ХУКНУТЬ НЕ МОЖЕШЬ? накипело сори