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

Receiver

leet-cheats 👑
Проверенный
619
882
C++:
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 проверяет часть строки
И так и так проверял, не работает, он читает другие строки чата, но почему-то не сравнивает.
Это проблема появилась после подключения имгуи к проекту.
Возможно это из-за того что сравнивает с текстом на кириллице.
 
Последнее редактирование:

2Shae

Известный
149
8
Как отобразить курсор при активном меню ImGui и спрятать его, когда оно закрыто?
 

Vandal™

Известный
55
4
Потому что ImGui работает только с UTF-8.
ImGui::Text(u8"Русский язык");
ImGui::Text(u8"Чек-Текст");
ImGui::Button(u8"Закрыть", ImVec2(75, 20)); - не пашет, все равно вопросы вместо текста.

UPD:

C++:
        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);

Есть еще решения проблемы, кроме предложенных?
 
Последнее редактирование:

_Vine_

Активный
154
57
ImGui::Text(u8"Чек-Текст");
ImGui::Button(u8"Закрыть", ImVec2(75, 20)); - не пашет, все равно вопросы вместо текста.

UPD:

C++:
        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);

Есть еще решения проблемы, кроме предложенных?
Должно работать, может, у тебя в коде есть еще загрузки шрифтов, убедись, что этот шрифт загружается последним или что установлен именно этот шрифт.
И попробуй сделать так
C++:
io.FontDefault = io.Fonts->AddFontFromFileTTF(fontPath, 16, &font_config, io.Fonts->GetGlyphRangesCyrillic());
 
  • Нравится
Реакции: Vandal™

astap_

Известный
Всефорумный модератор
626
601
1 - u8"Text" отказывается работать (ImGUI v1.71)
2 - занимает несколько строк при инициализации, но работает. Стало интересно какие еще решения есть
дефолтный шрифт имгуи не поддерживает кириллицу, какие тут ещё могут быть решения?
 

Неадекватная сова

Известный
Проверенный
208
147
ImGui::Text(u8"Чек-Текст");
ImGui::Button(u8"Закрыть", ImVec2(75, 20)); - не пашет, все равно вопросы вместо текста.

UPD:

C++:
        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);

Есть еще решения проблемы, кроме предложенных?
После всех include"ов вставь и глянь:
C++:
#pragma execution_character_set("utf-8")
 
  • Нравится
Реакции: Vandal™

ishi

Известный
493
110
В c++ проекте на linux мне попалась вот такая интересная строка:
C++:
std::string mainXML = #include "Main.xml";
Однако, в винде среда считает её ошибкой. Подскажите, есть вариант в винде так же через дефайн загружать содержимое файла в string, без открытия и чтения?
 

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В c++ проекте на linux мне попалась вот такая интересная строка:
C++:
std::string mainXML = #include "Main.xml";
Однако, в винде среда считает её ошибкой. Подскажите, есть вариант в винде так же через дефайн загружать содержимое файла в string, без открытия и чтения?
Чем тебе с чтением не нравится?
 

_Vine_

Активный
154
57
В c++ проекте на linux мне попалась вот такая интересная строка:
C++:
std::string mainXML = #include "Main.xml";
Однако, в винде среда считает её ошибкой. Подскажите, есть вариант в винде так же через дефайн загружать содержимое файла в string, без открытия и чтения?
file.cpp
C++:
R"(int function(int a , int b){
return a + b;
})"

main.cpp
C++:
int main(){
const char *file = {
#include "file.h"
};
printf("%s\n", file);
system("pause");
return 0;
}
 
  • Нравится
Реакции: ishi

Receiver

leet-cheats 👑
Проверенный
619
882
как эмулировать нажатие клавишы N без зависания игры в mainloop с повторением ?
 

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как эмулировать нажатие клавишы N без зависания игры в mainloop с повторением ?
emulategtakey, синхра, win api функции + timer

как эмулировать нажатие клавишы N без зависания игры в mainloop с повторением ?
C++:
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);
}
Эмуляция с помощью синхры


emulategtakey, синхра, win api функции + timer


C++:
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);
}
Эмуляция с помощью синхры
C++:
static int time=0;

if(GetTickCount() - 1000 > time)
    {
          time = GetTickCount();
          EmulKey(/* id клавиши */);
     }


       
// эмуляция нажатия клавиши 1 раз в секунду
 
  • Нравится
Реакции: Receiver

Receiver

leet-cheats 👑
Проверенный
619
882
emulategtakey, синхра, win api функции + timer


C++:
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);
}
Эмуляция с помощью синхры



C++:
static int time=0;

if(GetTickCount() - 1000 > time)
    {
          time = GetTickCount();
          EmulKey(/* id клавиши */);
     }


       
// эмуляция нажатия клавиши 1 раз в секунду
и какой ид клавиши N ?