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

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

Показывать буду на примере всеми любимого A5/TGF.
Итак,начнем.
Первое,что мы сделаем - это зададим пространство имен (не обязательно) и объявим класс,в котором будут храниться наши переменные (текст,цвет) и пропишем конструктор и деструктор для данного класса,естественно ,не забывая нормально инициализировать переменные.​
Код:
Expand Collapse Copy
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 )) и создаем вектор с нашим классом.
Код:
Expand Collapse Copy
std::vector< p_info::draw_string > info_text;
После этого мы будем заполнять наш вектор текстом при включенных переменных
Код:
Expand Collapse Copy
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()));
После создаем цикл ,который будет рендерить (рисовать) наш текст :
Код:
Expand Collapse Copy
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;
    }
Ну и очищаем наш вектор :
Код:
Expand Collapse Copy
 info_text.clear();

Результат :
-nnimAtKkf4.jpg

Дополнительно :
  • Функция для определения размера строки.
Код:
Expand Collapse Copy
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;
}

  • Подробнее про класс вектора :
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    (не реклама)
 
Назад
Сверху Снизу