Гайд Использование вектора для рендера ESP текста

alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Vector - вещь очень классная и помогает упрощать задачки для программиста.
Сегодня разберем пример упрощенного рендера ESP текста.​

Показывать буду на примере всеми любимого A5/TGF.
Итак,начнем.
Первое,что мы сделаем - это зададим пространство имен (не обязательно) и объявим класс,в котором будут храниться наши переменные (текст,цвет) и пропишем конструктор и деструктор для данного класса,естественно ,не забывая нормально инициализировать переменные.​
Код:
namespace p_info
{
    static class draw_string
    {
    public:
        std::string text = "empty";
        Color color = Color(0,0,0);
        draw_string(string text, Color color) : text(text), color(color) {}
        ~draw_string(){
            text = "empty";
            color = Color(0, 0, 0);
        }
    };
}
Далее ,идем в функцию перебора игроков (void CVisuals::PlayerESP( int index )) и создаем вектор с нашим классом.
Код:
std::vector< p_info::draw_string > info_text;
После этого мы будем заполнять наш вектор текстом при включенных переменных
Код:
if (Vars.Visuals.Info.Name)
        info_text.push_back(p_info::draw_string(Entity->GetName(), Color::Green()));

if (Vars.Visuals.Info.Weapon)
        info_text.push_back(p_info::draw_string(Entity->GetWeapon()->GetWeaponName(), Color::Red()));

if (Vars.Visuals.Info.Flashed && Entity->IsFlashed())
        info_text.push_back(p_info::draw_string(charenc("Flashed!"), Color::LightBlue()));
После создаем цикл ,который будет рендерить (рисовать) наш текст :
Код:
for (auto info_string : info_text)
    {
        RECT nameSize = D::GetTextSize(F::ESP, info_string.text.c_str());
        D::DrawString(F::ESP, top.x, top.y - nameSize.bottom, info_string.color, FONT_CENTER, "%s", info_string.text.c_str());
        top.y += nameSize.bottom;
    }
Ну и очищаем наш вектор :
Код:
 info_text.clear();
Результат :

Дополнительно :
  • Функция для определения размера строки.
Код:
RECT D::GetTextSize(DWORD font, const char* text)
{
    char Buffer[1024] = { '\0' };

    /* set up varargs*/
    va_list Args;

    va_start(Args, text);
    vsprintf_s(Buffer, text, Args);
    va_end(Args);

    size_t Size = strlen(Buffer) + 1;
    wchar_t* WideBuffer = new wchar_t[Size];

    mbstowcs_s(nullptr, WideBuffer, Size, Buffer, Size - 1);

    RECT rect;
    int x, y;
    I::Surface->GetTextSize(font, WideBuffer, x, y);
    rect.left = x;
    rect.bottom = y;
    rect.right = x;
    return rect;
}
  • Подробнее про класс вектора :
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    (не реклама)
 
Сверху Снизу