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

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
Может есть у кого-нибудь адрес RakPeer::Send для 0.3.7-R1? Можете дать?
CRakPeer::Send(BitStream, ...) - 0x307F0
CRakPeer::Send2(char* data...) - 0x307A0
Это перегруженная функция, поэтому 2 адреса. Можешь вызывать какой тебе удобно.
 

legendabrn

Известный
Проверенный
122
173
как для имгуя можно использовать кириллицу без u8?
в переменной хранится текст
Код:
ImGui::Text(u8"%s", text);
пытался так, но не получалось
 

sc6ut

неизвестный
Модератор
382
1,075
как для имгуя можно использовать кириллицу без u8?
в переменной хранится текст
Код:
ImGui::Text(u8"%s", text);
пытался так, но не получалось
чтобы использовать переменную text в imgui, тебе надо сначало пеконвертировать её из cp1251 в utf8. вот функция, что делает это к примеру:
C++:
std::string CP1251_to_UTF8(const char* str)
{
    std::string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u) { return 0; }
    wchar_t* ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(65001, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char* cres = new char[result_c];
    if (!WideCharToMultiByte(65001, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}
 
  • Нравится
Реакции: legendabrn

legendabrn

Известный
Проверенный
122
173
блокировка управления игроком (lockPlayerControl - lua), для плюсов есть адрес?
 

Compich

Известный
236
43
Как выбрать определенный пункт диалога (DIALOG_STYLE_LIST), нажать первую кнопку, ввести значение в поле диалога (DIALOG_STYLE_INPUT) и опять нажать первую кнопку? (SAMPFUNCS)
 

sc6ut

неизвестный
Модератор
382
1,075
Как выбрать определенный пункт диалога (DIALOG_STYLE_LIST), нажать первую кнопку, ввести значение в поле диалога (DIALOG_STYLE_INPUT) и опять нажать первую кнопку? (SAMPFUNCS)
для начала узнаешь айди обоих диалогов
предположим ты узнал и айди первого равен 2011, а айди второго - 2012
C++:
// затем, вставляешь код функцию которая отправляет ответ диалогу
void send_dialog_responce(unsigned short id, unsigned char responce, unsigned short list_item, const char *text) {
    BitStream bs;
    bs.ResetWritePointer();
    bs.Write(id);
    bs.Write(responce);
    bs.Write(list_item);
    bs.Write(static_cast<unsigned char>(strlen(text)));
    bs.Write(text, strlen(text));
    SF->getRakNet()->SendRPC(RPC_DialogResponse, &bs);
}

// создаешь переменную отвечающую за этап работы плагина, у нее будет значение 1 или 2
static uint8_t stage = 1;

// регистрируешь колбэк на приходящии RPC в mainloop
SF->getRakNet()->registerRakNetCallback(RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);

bool __stdcall incomingRPC(stRakNetHookParams *params) {
    // проверяем айди RPC
    if (params->packetId == RPC_ScrShowDialog) {
        // читаем данные диалога, нам нужен только айди
        uint16_t dialogID;
     
        params->bitStream->ResetReadPointer();
        params->bitStream->Read(dialogID);
     
        // проверяем айди диалога и этап
        if (dialogID == /* айди первого диалога */ 2011 && stage == 1) {
            // меняешь этап на 2
            stage = 2;
            // отправляешь нажатие 1 кнопки
            send_dialog_responce(dialogID, 1, 0, "");
            // по желанию отключаешь показ диалога
            return false;
        } else if (dialogID == /* айди второго диалога */ 2012 && stage == 2) {
            // меняешь этап на 1
            stage = 1;
            // отправляешь нажатие 1 кнопки и нужный текст, к примеру "test"
            send_dialog_responce(dialogID, 1, 0, "test");
            // по желанию отключаешь показ диалога
            return false;
        }
    }
    return true;
}
 
Последнее редактирование: