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

Шурик

Активный
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

https://t.me/anwublog
Всефорумный модератор
4,709
5,254
Есть ли возможность менять шрифт текста для 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,179
как применить стиль в имгуи?
 

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