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

Шурик

Активный
216
42
Екземпляр класса должен быть глобальным или static
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.
Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).

UPD: Проверил на консольном приложении - успешно (но не в SF).
iSd77Pd.png
 
Последнее редактирование:

Harryss

Участник
233
26
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.
Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).

UPD: Проверил на консольном приложении - успешно (но не в SF).
iSd77Pd.png
Необходимость в парилке с потоком возникла с целью нормально использовать задержку?
 

Harryss

Участник
233
26
Да, но не только из-за задержки.
Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.
C++:
const auto myTask = []()
{
    // Твой код.
    // Можно использовать Sleep и это не будет тормозить игру.
};
std::thread(myTask).detach();  //<--- Сам вызов потока
 
  • Нравится
Реакции: Шурик

Шурик

Активный
216
42
Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.
C++:
const auto myTask = []()
{
    // Твой код.
    // Можно использовать Sleep и это не будет тормозить игру.
};
std::thread(myTask).detach();  //<--- Сам вызов потока
Хм, твой способ не подходит для моей ситуации, но за deatch огромное спасибо. На самом деле это решило мою проблему.
 

AnWu

Guardian of Order
Всефорумный модератор
4,689
5,200
Есть ли возможность менять шрифт текста для ImGui меню?
C++:
            ImGui::CreateContext();
            ImGui_ImplWin32_Init(GetActiveWindow());
            ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());
            ImGuiIO& IO = ImGui::GetIO();
            if (!bChangeFont) {
                ImFontConfig font_config;
                TCHAR path[MAX_PATH];
                HRESULT hr = SHGetFolderPathA(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, path);
                std::string fPath = std::string(path).append("\\arialbd.ttf");
                IO.Fonts->AddFontFromFileTTF(fPath.c_str(), 14.0f, &font_config, IO.Fonts->GetGlyphRangesCyrillic());
                smallFont = IO.Fonts->AddFontFromFileTTF(fPath.c_str(), 12.0f, &font_config, IO.Fonts->GetGlyphRangesCyrillic());
                bChangeFont = true;
            }
            ImGuiStyle* style = &ImGui::GetStyle();
у меня так
 
  • Нравится
Реакции: {cran}

Шурик

Активный
216
42
Возможно ли в registerChatCommand передать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.
 

Harryss

Участник
233
26
Возможно ли в registerChatCommand передать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.
registerChatCommand напрямую с лямбдой не работает, на основе того, что я показал ранее, с cmd работаю так
C++:
void CALLBACK cmdExample(std::string param)
{
    if (param.empty())
        return;

    const auto task = [param]() // Просто добавил param
    {
        // Код, задержки, все дела.
        int my_int = std::stoi(param); // Получение параметра функции
    };
    std::thread(task).detach();
}
 

Шурик

Активный
216
42
registerChatCommand напрямую с лямбдой не работает, на основе того, что я показал ранее, с cmd работаю так
C++:
void CALLBACK cmdExample(std::string param)
{
    if (param.empty())
        return;

    const auto task = [param]() // Просто добавил param
    {
        // Код, задержки, все дела.
        int my_int = std::stoi(param); // Получение параметра функции
    };
    std::thread(task).detach();
}
У меня нет определённой команды.
Я команды создаю уже непосредственно в самой игре и не могу сделать так как у тебя.
 

san0

Известный
Друг
411
267
Не подскажете, какой тип имеет выражение?)
Код:
[](){};
Стандартом не определена однозначность.
Так называемый closure type - prvalue выражение, которое представляет собой уникальную неименованную неагрегированную структуру/класс, которая имеет перегруженный operator(), ну и еще пару методов.
В случае, когда функция не имеет захватов (сaptures), тогда можно неявно преобразовать в указатель на функцию
C++:
#include <iostream>
#include <functional>
#include <type_traits>

auto main(void) -> int {
    void(*dd)() = [] { std::cout << '1'; };
    std::function<void()> pp = [] { std::cout << '2'; };
    // std::function pp = [] { std::cout<<'2'; }; // c++ 17
    auto cc = [] { std::cout << '3'; };
  
    std::cout << pp.target_type().name() << std::endl;
    std::cout << typeid(cc).name() << std::endl;
  
    std::cout << typeid(*cc).name() << std::endl;
    std::cout << typeid(*dd).name() << std::endl;
}
Z4mainEUlvE0_
Z4mainEUlvE1_
FvvE
FvvE
Надеюсь, чуточку прояснил ситуацию, но в любом случае советую посмотреть
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf, 94 страница
 
  • Нравится
Реакции: index

sdfaw

Активный
718
150
дарова, вобщем хочу начать писать sf плагины, можете объяснить в кратце что по чём.
например как пользоваться
SF->тут что-то()->тут что-то()->тут что-то();
или что такое вот это
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2);
где можно найти информацию про это?
где можно найти функции sf api?
 

atizoff

приобретаю кашель за деньги
Проверенный
1,295
1,178
как применить стиль в имгуи?
 

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
как применить стиль в имгуи?
как то так:
C++:
ImGuiStyle& style = ImGui::GetStyle();
        style.Colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 0.93f);
        style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 0.68f);
        style.Colors[ImGuiCol_WindowBg] = ImVec4(0.16f, 0.16f, 0.16f, 0.96f);
        style.Colors[ImGuiCol_PopupBg] = ImVec4(0.10f, 0.10f, 0.10f, 0.94f);
        style.Colors[ImGuiCol_Border] = ImVec4(0.34f, 0.33f, 0.34f, 1.00f);
        style.Colors[ImGuiCol_FrameBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.33f);
        style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.80f, 0.80f, 1.00f, 0.40f);
        style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.50f, 0.58f, 0.85f, 0.65f);
        style.Colors[ImGuiCol_TitleBg] = ImVec4(0.40f, 0.40f, 0.39f, 0.80f);
        style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.22f, 0.39f, 0.73f, 0.52f);
        style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.13f, 0.41f, 0.71f, 1.00f);
        style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.30f, 0.31f, 0.31f, 0.80f);
        style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.20f, 0.25f, 0.30f, 0.00f);
        style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.40f, 0.40f, 0.40f, 0.39f);
        style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.59f);
        style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.50f, 0.50f, 0.50f, 0.72f);
        style.Colors[ImGuiCol_CheckMark] = ImVec4(0.27f, 0.58f, 1.00f, 1.00f);
        style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.20f, 0.57f, 1.00f, 0.84f);
        style.Colors[ImGuiCol_Button] = ImVec4(0.27f, 0.58f, 1.00f, 0.78f);
        style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.37f, 0.64f, 1.00f, 0.94f);
        style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.27f, 0.44f, 1.00f, 1.00f);
        style.Colors[ImGuiCol_Header] = ImVec4(0.49f, 0.49f, 0.49f, 0.46f);
        style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.50f, 0.49f);
        style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.57f, 0.75f);
        style.Colors[ImGuiCol_ColumnHovered] = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
        style.Colors[ImGuiCol_ColumnActive] = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
        style.Colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.47f);
        style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.76f, 1.00f, 1.00f);
        style.Colors[ImGuiCol_CloseButton] = ImVec4(0.50f, 0.50f, 0.50f, 0.89f);
        style.Colors[ImGuiCol_CloseButtonHovered] = ImVec4(0.70f, 0.70f, 0.71f, 0.60f);
        style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.27f, 0.54f, 1.00f, 0.47f);
        style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.24f, 0.58f, 1.00f, 1.00f);
        style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(0.23f, 0.47f, 1.00f, 1.00f);
        style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.16f, 0.37f, 0.98f, 0.75f);
 
  • Нравится
Реакции: atizoff