Гайд Простая cfg система (csgosimple)

  • Автор темы Автор темы DerLi
  • Дата начала Дата начала
RIP 1.06.2020
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
19 Апр 2019
Сообщения
860
Реакции
152
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну так как мне нехер делать, сделаю пару гайдов для csgosimple (не бейте, если все хуева)
Там где у вас файлы Options.hpp, Config.hpp
Создаем ещё Options.cpp, Config.cpp
Заходим в Options.hpp и в инклуды #include <map>, также находим
C++:
Expand Collapse Copy
template <typename T = bool>
class Var {
public:
    std::string name;
    std::shared_ptr<T> value;
    int32_t size;
    Var(std::string name, T v) : name(name) {
        value = std::make_shared<T>(v);
        size = sizeof(T);
    }
    operator T() { return *value; }
    operator T*() { return &*value; }
    operator T() const { return *value; }
    //operator T*() const { return value; }
};
и удаляем его (а зачем он нам?))
Там же ищем #define OPTION(type, var, val) Var<type> var = {A(var), val}
и заменяем его на
C++:
Expand Collapse Copy
#define OPTION(type, var, val) type var = val
Заходим в файл Options.cpp, и вставляем
C++:
Expand Collapse Copy
#include "Options.hpp"
#include "../Valve_sdk/Misc/Enums.hpp"

std::map<int, const char*> K_weapon_names =
{
{ 1, "Desert Eagle" },
{ 2, "Dual Berettas" },
{ 3, "Five-SeveN" },
{ 4, "Glock-18" },
{ 7, "AK-47" },
{ 8, "AUG" },
{ 9, "AWP" },
{ 10, "FAMAS" },
{ 11, "G3SG1" },
{ 13, "Galil AR" },
{ 14, "M249" },
{ 16, "M4A4" },
{ 17, "MAC-10" },
{ 19, "P90" },
{ 23, "MP5" },
{ 24, "UMP-45" },
{ 25, "XM1014" },
{ 26, "PP-Bizon" },
{ 27, "MAG-7" },
{ 28, "Negev" },
{ 29, "Sawed-Off" },
{ 30, "Tec-9" },
{ 32, "P2000" },
{ 33, "MP7" },
{ 34, "MP9" },
{ 35, "Nova" },
{ 36, "P250" },
{ 38, "SCAR-20" },
{ 39, "SG 553" },
{ 40, "SSG 08" },
{ 60, "M4A1-S" },
{ 61, "USP-S" },
{ 63, "CZ75 Auto" },
{ 64, "R8 Revolver" },
};

Options g_Options;
bool   g_Unload = false;
Идем в файл Options.hpp и после
C++:
Expand Collapse Copy
#define OPTION(type, var, val) type var = val
Вставляем
C++:
Expand Collapse Copy
extern std::map<int, const char*> K_weapon_names;
Идем в Options.hpp и находим
Где у нас сохраняются цвета: Пример:
Пожалуйста, авторизуйтесь для просмотра ссылки.

И заменяем на Float, Пример:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Дальше: Спускаемся в самый конец и находим
inline Options g_Options;
inline bool g_Unload;
и заменяем на
extern Options g_Options;
extern bool g_Unload;
Заходим в файл Config.hpp и все содержимое заменяем на
C++:
Expand Collapse Copy
#pragma once
#include "../helpers/math.hpp"
#include "../helpers/utils.hpp"
#include "../menu.hpp"
#include "../helpers/input.hpp"

template< typename T >
class ConfigItem
{
    std::string category, name;
    T* value;
public:
    ConfigItem(std::string category, std::string name, T* value)
    {
        this->category = category;
        this->name = name;
        this->value = value;
    }
};

template< typename T >
class ConfigValue
{
public:
    ConfigValue(std::string category_, std::string name_, T* value_, const T& def)
    {
        category = category_;
        name = name_;
        value = value_;
        default_value = def;
    }

    std::string category, name;
    T* value;
    T default_value;
};

class CConfig
{
protected:
    std::vector< ConfigValue< int >* > ints;
    std::vector< ConfigValue< char >* > chars;
    std::vector< ConfigValue< bool >* > bools;
    std::vector< ConfigValue< float >* > floats;
private:
    void SetupValue(int&, int, std::string, std::string);
    void SetupValue(char * value, char * def, std::string category, std::string name);
    void SetupValue(bool&, bool, std::string, std::string);
    void SetupValue(float&, float, std::string, std::string);
    void SetupColor(float value[4], std::string name);
    void SetupVisuals();
    void SetupMisc();
    void SetupColors();
public:
    CConfig()
    {
    }
    void Setup();

    void Load(const std::string& name);
    void Save(const std::string& name);

};

extern CConfig* Config;
Уже почти все)
Заходим в файл Config.cpp и все содержимое заменяем на
C++:
Expand Collapse Copy
#include "Config.hpp"
#include "Options.hpp"

#include "../Helpers/Math.hpp"
#include "../Helpers/Utils.hpp"
#include "../Helpers/Input.hpp"
#include "../Menu.hpp"

void CConfig::SetupValue(int& value, int def, std::string category, std::string name) { value = def; ints.push_back(new ConfigValue< int >(category, name, &value, def)); }
void CConfig::SetupValue(char* value, char* def, std::string category, std::string name) { value = def; chars.push_back(new ConfigValue< char >(category, name, value, *def)); }
void CConfig::SetupValue(float& value, float def, std::string category, std::string name) { value = def; floats.push_back(new ConfigValue< float >(category, name, &value, def)); }
void CConfig::SetupValue(bool& value, bool def, std::string category, std::string name) { value = def; bools.push_back(new ConfigValue< bool >(category, name, &value, def)); }
void CConfig::SetupColor(float value[4], std::string name)
{
    SetupValue(value[0], value[0], ("colors"), name + "_r");
    SetupValue(value[1], value[1], ("colors"), name + "_g");
    SetupValue(value[2], value[2], ("colors"), name + "_b");
    SetupValue(value[3], value[3], ("colors"), name + "_a");
}

void CConfig::SetupVisuals()
{

}

void CConfig::SetupMisc()
{

}

void CConfig::SetupColors()
{

}

void CConfig::Setup() {

    CConfig::SetupVisuals();
    CConfig::SetupMisc();
    CConfig::SetupColors();
}

void CConfig::Save(const std::string& name) {
    if (name.empty())
        return;

    CreateDirectoryA(u8"C:\\Elium\\Configs\\", NULL); //Тут название папки где будут кфг ( \\ нужны обязательно )
    std::string file = u8"C:\\Elium\\Configs\\" + name; //Тут название папки где будут кфг ( \\ нужны обязательно )

    for (auto value : ints) {
        WritePrivateProfileStringA(value->category.c_str(), value->name.c_str(), std::to_string(*value->value).c_str(), file.c_str());
    }

    for (auto value : floats) WritePrivateProfileStringA(value->category.c_str(), value->name.c_str(), std::to_string(*value->value).c_str(), file.c_str());
    for (auto value : bools) WritePrivateProfileStringA(value->category.c_str(), value->name.c_str(), *value->value ? "true" : "false", file.c_str());
}

void CConfig::Load(const std::string& name) {
    if (name.empty())
        return;

    g_ClientState->ForceFullUpdate();

    CreateDirectoryA(u8"C:\\Elium\\Configs\\", NULL); //Тут название папки где будут кфг ( \\ нужны обязательно )
    std::string file = u8"C:\\Elium\\Configs\\" + name; //Тут название папки где будут кфг ( \\ нужны обязательно )

    char value_l[32] = { '\0' };
    for (auto value : ints) {
        GetPrivateProfileStringA(value->category.c_str(), value->name.c_str(), "0", value_l, 32, file.c_str()); *value->value = atoi(value_l);
    }

    for (auto value : floats) {
        GetPrivateProfileStringA(value->category.c_str(), value->name.c_str(), "0.0f", value_l, 32, file.c_str()); *value->value = atof(value_l);
    }

    for (auto value : bools) {
        GetPrivateProfileStringA(value->category.c_str(), value->name.c_str(), "false", value_l, 32, file.c_str()); *value->value = !strcmp(value_l, "true");
    }
}

CConfig* Config = new CConfig();
Тут где прописан
void CConfig::SetupVisuals() и другие
Нужно вставлять функцию, Пример: SetupValue(g_Options.esp_enabled, false, ("Esp"), ("Enabled"));
Где void CConfig::SetupColors(), Пример: SetupColor(g_Options.color_esp_ally_visible, "Esp team Visible color");
Все это берем с Options.hpp
Идем в Menu.cpp и везде где вот такая ошибка:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Добавляем перед g_Options, &. Пример:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Где у нас выбор цвета ака ImGuiEx::ColorEdit3 заменяем на ImGui::ColorEdit3
В Menu.cpp где у вас Рендер конфиг таба (все содержимое заменяем на):
C++:
Expand Collapse Copy
    static std::vector<std::string> configs;

    static auto load_configs = []() {
        std::vector<std::string> items = {};

        std::string path("C:\\Elium\\Configs"); // Тут изменяем ( \\ после текста нинада)
        if (!fs::is_directory(path))
            fs::create_directories(path);

        for (auto& p : fs::directory_iterator(path))
            items.push_back(p.path().string().substr(path.length() + 1));

        return items;
    };

    static auto is_configs_loaded = false;
    if (!is_configs_loaded) {
        is_configs_loaded = true;
        configs = load_configs();
    }

    static std::string current_config;

    static char config_name[32];

    ImGui::InputText("##config_name", config_name, sizeof(config_name));
    ImGui::SameLine();
    if (ImGui::Button("Create")) {
        current_config = std::string(config_name);

        Config->Save(current_config + ".ini");
        is_configs_loaded = false;
        memset(config_name, 0, 32);
    }

    ImGui::ListBoxHeader("##configs");
    {
        for (auto& config : configs) {
            if (ImGui::Selectable(config.c_str(), config == current_config)) {
                current_config = config;
            }
        }
    }
    ImGui::ListBoxFooter();

    if (!current_config.empty()) {

        if (ImGui::Button("Load"))
            Config->Load(current_config);
        ImGui::SameLine();

        if (ImGui::Button("Save"))
            Config->Save(current_config);
        ImGui::SameLine();

        if (ImGui::Button("Delete") && fs::remove("C:\\Elium\\Configs\\" + current_config)) { //Тут также изменяем на ваше, \\ обязательно
            current_config.clear();
            is_configs_loaded = false;
        }
        ImGui::SameLine();
    }
    if (ImGui::Button("Refresh"))
        is_configs_loaded = false;
Дальше идем в Main.cpp И в инклуды добавляем #include "Config.hpp"
Потом вставляем Config->Setup(); Как на скрине:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Так забыл...
Заходим в Chams.cpp и ищем строку с цветом
Пожалуйста, авторизуйтесь для просмотра ссылки.
и где clr_back заменяем на
Пожалуйста, авторизуйтесь для просмотра ссылки.
(дальше в чамсах аналогично)
Идем в Glow.cpp И ищем строку color = g_Options.color_glow_c4_carrier; Заменяем на color = Color(g_Options.color_glow_c4_carrier); (Дальше аналогично)
Идем в Visuals.cpp
И так же ищем строки с цветами (в которых ошибка) Пример: ctx.clr = ctx.is_enemy ? (ctx.is_visible ? g_Options.color_esp_enemy_visible : g_Options.color_esp_enemy_occluded) : (ctx.is_visible ? g_Options.color_esp_ally_visible : g_Options.color_esp_ally_occluded); Заменяем на:
ctx.clr = ctx.is_enemy ?
(ctx.is_visible ? Color(g_Options.color_esp_enemy_visible) : Color(g_Options.color_esp_enemy_occluded)) :
(ctx.is_visible ? Color(g_Options.color_esp_ally_visible) : Color(g_Options.color_esp_ally_occluded));
А дальше опять аналогично ))))))
Ну вроде все XDDD На очереди аимботе
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ток после этого придется все переписывать что связано с кфг системой...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
У меня в чистом исходнике не открывается меню, что делать?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну так как мне нехер делать, сделаю пару гайдов для csgosimple (не бейте, если все хуева)
Там где у вас файлы Options.hpp, Config.hpp
Создаем ещё Options.cpp, Config.cpp
Заходим в Options.hpp и в инклуды #include <map>, также находим
C++:
Expand Collapse Copy
template <typename T = bool>
class Var {
public:
    std::string name;
    std::shared_ptr<T> value;
    int32_t size;
    Var(std::string name, T v) : name(name) {
        value = std::make_shared<T>(v);
        size = sizeof(T);
    }
    operator T() { return *value; }
    operator T*() { return &*value; }
    operator T() const { return *value; }
    //operator T*() const { return value; }
};
и удаляем его (а зачем он нам?))
Там же ищем #define OPTION(type, var, val) Var<type> var = {A(var), val}
и заменяем его на
C++:
Expand Collapse Copy
#define OPTION(type, var, val) type var = val
Заходим в файл Options.cpp, и вставляем
C++:
Expand Collapse Copy
#include "Options.hpp"
#include "../Valve_sdk/Misc/Enums.hpp"

std::map<int, const char*> K_weapon_names =
{
{ 1, "Desert Eagle" },
{ 2, "Dual Berettas" },
{ 3, "Five-SeveN" },
{ 4, "Glock-18" },
{ 7, "AK-47" },
{ 8, "AUG" },
{ 9, "AWP" },
{ 10, "FAMAS" },
{ 11, "G3SG1" },
{ 13, "Galil AR" },
{ 14, "M249" },
{ 16, "M4A4" },
{ 17, "MAC-10" },
{ 19, "P90" },
{ 23, "MP5" },
{ 24, "UMP-45" },
{ 25, "XM1014" },
{ 26, "PP-Bizon" },
{ 27, "MAG-7" },
{ 28, "Negev" },
{ 29, "Sawed-Off" },
{ 30, "Tec-9" },
{ 32, "P2000" },
{ 33, "MP7" },
{ 34, "MP9" },
{ 35, "Nova" },
{ 36, "P250" },
{ 38, "SCAR-20" },
{ 39, "SG 553" },
{ 40, "SSG 08" },
{ 60, "M4A1-S" },
{ 61, "USP-S" },
{ 63, "CZ75 Auto" },
{ 64, "R8 Revolver" },
};

Options g_Options;
bool   g_Unload = false;
Идем в файл Options.hpp и после
C++:
Expand Collapse Copy
#define OPTION(type, var, val) type var = val
Вставляем
C++:
Expand Collapse Copy
extern std::map<int, const char*> K_weapon_names;
Идем в Options.hpp и находим
Где у нас сохраняются цвета: Пример:
Пожалуйста, авторизуйтесь для просмотра ссылки.

И заменяем на Float, Пример:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Дальше: Спускаемся в самый конец и находим
inline Options g_Options;
inline bool g_Unload;
и заменяем на
extern Options g_Options;
extern bool g_Unload;
Заходим в файл Config.hpp и все содержимое заменяем на
C++:
Expand Collapse Copy
#pragma once
#include "../helpers/math.hpp"
#include "../helpers/utils.hpp"
#include "../menu.hpp"
#include "../helpers/input.hpp"

template< typename T >
class ConfigItem
{
    std::string category, name;
    T* value;
public:
    ConfigItem(std::string category, std::string name, T* value)
    {
        this->category = category;
        this->name = name;
        this->value = value;
    }
};

template< typename T >
class ConfigValue
{
public:
    ConfigValue(std::string category_, std::string name_, T* value_, const T& def)
    {
        category = category_;
        name = name_;
        value = value_;
        default_value = def;
    }

    std::string category, name;
    T* value;
    T default_value;
};

class CConfig
{
protected:
    std::vector< ConfigValue< int >* > ints;
    std::vector< ConfigValue< char >* > chars;
    std::vector< ConfigValue< bool >* > bools;
    std::vector< ConfigValue< float >* > floats;
private:
    void SetupValue(int&, int, std::string, std::string);
    void SetupValue(char * value, char * def, std::string category, std::string name);
    void SetupValue(bool&, bool, std::string, std::string);
    void SetupValue(float&, float, std::string, std::string);
    void SetupColor(float value[4], std::string name);
    void SetupVisuals();
    void SetupMisc();
    void SetupColors();
public:
    CConfig()
    {
    }
    void Setup();

    void Load(const std::string& name);
    void Save(const std::string& name);

};

extern CConfig* Config;
Уже почти все)
Заходим в файл Config.cpp и все содержимое заменяем на
C++:
Expand Collapse Copy
#include "Config.hpp"
#include "Options.hpp"

#include "../Helpers/Math.hpp"
#include "../Helpers/Utils.hpp"
#include "../Helpers/Input.hpp"
#include "../Menu.hpp"

void CConfig::SetupValue(int& value, int def, std::string category, std::string name) { value = def; ints.push_back(new ConfigValue< int >(category, name, &value, def)); }
void CConfig::SetupValue(char* value, char* def, std::string category, std::string name) { value = def; chars.push_back(new ConfigValue< char >(category, name, value, *def)); }
void CConfig::SetupValue(float& value, float def, std::string category, std::string name) { value = def; floats.push_back(new ConfigValue< float >(category, name, &value, def)); }
void CConfig::SetupValue(bool& value, bool def, std::string category, std::string name) { value = def; bools.push_back(new ConfigValue< bool >(category, name, &value, def)); }
void CConfig::SetupColor(float value[4], std::string name)
{
    SetupValue(value[0], value[0], ("colors"), name + "_r");
    SetupValue(value[1], value[1], ("colors"), name + "_g");
    SetupValue(value[2], value[2], ("colors"), name + "_b");
    SetupValue(value[3], value[3], ("colors"), name + "_a");
}

void CConfig::SetupVisuals()
{

}

void CConfig::SetupMisc()
{

}

void CConfig::SetupColors()
{

}

void CConfig::Setup() {

    CConfig::SetupVisuals();
    CConfig::SetupMisc();
    CConfig::SetupColors();
}

void CConfig::Save(const std::string& name) {
    if (name.empty())
        return;

    CreateDirectoryA(u8"C:\\Elium\\Configs\\", NULL); //Тут название папки где будут кфг ( \\ нужны обязательно )
    std::string file = u8"C:\\Elium\\Configs\\" + name; //Тут название папки где будут кфг ( \\ нужны обязательно )

    for (auto value : ints) {
        WritePrivateProfileStringA(value->category.c_str(), value->name.c_str(), std::to_string(*value->value).c_str(), file.c_str());
    }

    for (auto value : floats) WritePrivateProfileStringA(value->category.c_str(), value->name.c_str(), std::to_string(*value->value).c_str(), file.c_str());
    for (auto value : bools) WritePrivateProfileStringA(value->category.c_str(), value->name.c_str(), *value->value ? "true" : "false", file.c_str());
}

void CConfig::Load(const std::string& name) {
    if (name.empty())
        return;

    g_ClientState->ForceFullUpdate();

    CreateDirectoryA(u8"C:\\Elium\\Configs\\", NULL); //Тут название папки где будут кфг ( \\ нужны обязательно )
    std::string file = u8"C:\\Elium\\Configs\\" + name; //Тут название папки где будут кфг ( \\ нужны обязательно )

    char value_l[32] = { '\0' };
    for (auto value : ints) {
        GetPrivateProfileStringA(value->category.c_str(), value->name.c_str(), "0", value_l, 32, file.c_str()); *value->value = atoi(value_l);
    }

    for (auto value : floats) {
        GetPrivateProfileStringA(value->category.c_str(), value->name.c_str(), "0.0f", value_l, 32, file.c_str()); *value->value = atof(value_l);
    }

    for (auto value : bools) {
        GetPrivateProfileStringA(value->category.c_str(), value->name.c_str(), "false", value_l, 32, file.c_str()); *value->value = !strcmp(value_l, "true");
    }
}

CConfig* Config = new CConfig();
Тут где прописан
void CConfig::SetupVisuals() и другие
Нужно вставлять функцию, Пример: SetupValue(g_Options.esp_enabled, false, ("Esp"), ("Enabled"));
Где void CConfig::SetupColors(), Пример: SetupColor(g_Options.color_esp_ally_visible, "Esp team Visible color");
Все это берем с Options.hpp
Идем в Menu.cpp и везде где вот такая ошибка:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Добавляем перед g_Options, &. Пример:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Где у нас выбор цвета ака ImGuiEx::ColorEdit3 заменяем на ImGui::ColorEdit3
В Menu.cpp где у вас Рендер конфиг таба (все содержимое заменяем на):
C++:
Expand Collapse Copy
    static std::vector<std::string> configs;

    static auto load_configs = []() {
        std::vector<std::string> items = {};

        std::string path("C:\\Elium\\Configs"); // Тут изменяем ( \\ после текста нинада)
        if (!fs::is_directory(path))
            fs::create_directories(path);

        for (auto& p : fs::directory_iterator(path))
            items.push_back(p.path().string().substr(path.length() + 1));

        return items;
    };

    static auto is_configs_loaded = false;
    if (!is_configs_loaded) {
        is_configs_loaded = true;
        configs = load_configs();
    }

    static std::string current_config;

    static char config_name[32];

    ImGui::InputText("##config_name", config_name, sizeof(config_name));
    ImGui::SameLine();
    if (ImGui::Button("Create")) {
        current_config = std::string(config_name);

        Config->Save(current_config + ".ini");
        is_configs_loaded = false;
        memset(config_name, 0, 32);
    }

    ImGui::ListBoxHeader("##configs");
    {
        for (auto& config : configs) {
            if (ImGui::Selectable(config.c_str(), config == current_config)) {
                current_config = config;
            }
        }
    }
    ImGui::ListBoxFooter();

    if (!current_config.empty()) {

        if (ImGui::Button("Load"))
            Config->Load(current_config);
        ImGui::SameLine();

        if (ImGui::Button("Save"))
            Config->Save(current_config);
        ImGui::SameLine();

        if (ImGui::Button("Delete") && fs::remove("C:\\Elium\\Configs\\" + current_config)) { //Тут также изменяем на ваше, \\ обязательно
            current_config.clear();
            is_configs_loaded = false;
        }
        ImGui::SameLine();
    }
    if (ImGui::Button("Refresh"))
        is_configs_loaded = false;
Дальше идем в Main.cpp И в инклуды добавляем #include "Config.hpp"
Потом вставляем Config->Setup(); Как на скрине:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Так забыл...
Заходим в Chams.cpp и ищем строку с цветом
Пожалуйста, авторизуйтесь для просмотра ссылки.
и где clr_back заменяем на
Пожалуйста, авторизуйтесь для просмотра ссылки.
(дальше в чамсах аналогично)
Идем в Glow.cpp И ищем строку color = g_Options.color_glow_c4_carrier; Заменяем на color = Color(g_Options.color_glow_c4_carrier); (Дальше аналогично)
Идем в Visuals.cpp
И так же ищем строки с цветами (в которых ошибка) Пример: ctx.clr = ctx.is_enemy ? (ctx.is_visible ? g_Options.color_esp_enemy_visible : g_Options.color_esp_enemy_occluded) : (ctx.is_visible ? g_Options.color_esp_ally_visible : g_Options.color_esp_ally_occluded); Заменяем на:
ctx.clr = ctx.is_enemy ?
(ctx.is_visible ? Color(g_Options.color_esp_enemy_visible) : Color(g_Options.color_esp_enemy_occluded)) :
(ctx.is_visible ? Color(g_Options.color_esp_ally_visible) : Color(g_Options.color_esp_ally_occluded));
А дальше опять аналогично ))))))
Ну вроде все XDDD На очереди аимботе
Давай делай аимбот, ато старый гайд уже не робит(
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
в релизе не инжектится :/
зато в дебаге всё норм
чё за хрень?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
дал другу дллку у него пишет типо нет библеотеки X_Input4 че делать?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу