• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Исходник ⁠onetap.su v1 watermark, binds, spectators list

купить дизайн: yougame.biz/threads/155999
Дизайнер
Дизайнер
Статус
Оффлайн
Регистрация
19 Сен 2018
Сообщения
791
Реакции
1,375
Меня зовут slave бумага, okay maggots i wanna see 6 hot loads, и представляете, это мой первый dick, ха-ха погнали!

Код максимально flexible (в плане, что его можно стастить куда угодно, и реализовать с помощью него много всяких вижуальных features).
Комментариев тоже много, так что пожалуйста, читайте комменты, прежде чем писать что-либо в лс..........................................
От идеи до воплощения 1 день, так что код стайл может переходить от уровня линея до уровня дукари..

Color mode static:
xs6mT6i.png


Color mode rainbow:
B4psZgy.gif


Color mode gradient:
L9o89td.gif


C++:
Expand Collapse Copy
create_font(font::tahoma_8, XOR("Tahoma"), 12, 100, NONE);
C++:
Expand Collapse Copy
#include "hud.h"

void c_hud::update_accent_color() {
    const auto freq = 1.f; /// Gradient speed (curr: 100%)

    const auto real_time = interfaces::globals->m_real_time * freq;

    switch (m_style.m_col_mode) {
        case STATIC: {
            m_style.m_col_accent[0] = m_style.m_col_fallback;
            m_style.m_col_accent[1] = m_style.m_col_fallback;

            break;
        }
        case RAINBOW: {
            /// Looks like pasted from fatality lua, but it isn't (no lie)
            const auto r = math::floor(math::sin(real_time + 0.f) * 127.f + 128.f);
            const auto g = math::floor(math::sin(real_time + 2.f) * 127.f + 128.f);
            const auto b = math::floor(math::sin(real_time + 4.f) * 127.f + 128.f);

            m_style.m_col_accent[0] = color(r, g, b, 200);
            m_style.m_col_accent[1] = color(r, g, b, 200);
            break;
        }
        case GRADIENT: {
            /// Looks like pasted from fatality lua, but it isn't (no lie)
            const auto r = math::floor(math::sin(real_time + 0.f) * 127.f + 128.f);
            const auto g = math::floor(math::sin(real_time + 2.f) * 127.f + 128.f);
            const auto b = math::floor(math::sin(real_time + 4.f) * 127.f + 128.f);

            m_style.m_col_accent[0] = color(b, g, r, 200);
            m_style.m_col_accent[1] = color(r, g, b, 200);
            break;
        }
    };
}

void c_hud::draw_watermark(uint8_t options) {
    /// Watermark text string stuff.
    auto text = string("figma.com");

    if (options & USER) {
        text += " | sove";
    }

    const auto net_channel = interfaces::engine->get_net_channel_info();

    /// Are net channel ptr is valid and we in game.
    if (net_channel && interfaces::engine->is_in_game()) {
        if (options & INCOMING) {
            /// Get incoming latency in milliseconds.
            const auto incoming_latency = std::max(0, static_cast<int>(std::round(net_channel->get_avg_latency(FLOW_INCOMING) * 1000.f)));

            text += " | incoming: " + std::to_string(incoming_latency) + "ms";
        }
        if (options & OUTGOING) {
            /// Get outgoing latency in milliseconds.
            const auto outgoing_latency = std::max(0, static_cast<int>(std::round(net_channel->get_avg_latency(FLOW_OUTGOING) * 1000.f)));

            text += " | outgoing: " + std::to_string(outgoing_latency) + "ms";
        }
    }
    if (options & TIME) {
        /// Get time.
        auto time = std::time(nullptr); 
        std::ostringstream time_ss;
        /// Format: 12:59:09.
        time_ss << std::put_time(std::localtime(&time), " | %H:%M:%S");

        text += time_ss.str().data();
    }

    /// Render stuff.

    /// Measures of string, that's will be rendered.
    const auto text_size = render::measure_text(font::tahoma_8, text);

    /// We ain't about this white text on yellow bg life.
    auto text_color = color(255, 255, 255);
    auto text_color_inverted = false; /// Useful for text shadow render.
    {
        const auto hue = m_style.m_col_accent[0].hue();

        if ((hue >= 0.2f) && (hue <= 0.6f)) {
            text_color = color(0, 0, 0);
            text_color_inverted = true;
        }
    }

    /// Background measures.
    const auto pos = vec2(render::m_screen_size.x - m_style.m_watermark_margins.x - (m_style.m_watermark_paddings.x * 2) - text_size.x, m_style.m_watermark_margins.y);
    const auto size = text_size + m_style.m_watermark_paddings * 2;

    const auto text_pos = pos + m_style.m_watermark_paddings;

    render::gradient(pos.x, pos.y, size.x, size.y, m_style.m_col_accent[0], m_style.m_col_accent[1]);

    /// Text shadow (if text isn't black).
    if (!text_color_inverted)
        render::text(text_pos.x + 1, text_pos.y + 1, font::tahoma_8, text, color(0, 0, 0, 200));
        /// 1 - shadow offset.

    render::text(text_pos.x, text_pos.y, font::tahoma_8, text, text_color);
}

void c_hud::draw_frame(const vec2& pos, const wstring& name, const std::vector<wstring>& first_column, const std::vector<wstring>& second_column) {
    /// Header label.
    auto text = name + L" (" + std::to_wstring(first_column.size()) + L")";

    /// Aayyaya initialization of variable, y value will be adjusted to all elements size.
            auto size = vec2(220, 0);

            auto line_pos = vec2(pos.x + m_style.m_pad_header_sides, pos.y + m_style.m_pad_header_top);
    const auto line_size = vec2(size.x - (m_style.m_pad_header_sides * 2), 4);

    const auto text_pos = vec2(line_pos.x + (line_size.x * 0.5f), line_pos.y);
    const auto text_size = render::measure_text(font::tahoma_8, text.c_str());

    const auto pad_text_line = text_size.y + 2;

    /// Adding little bit padding.
    line_pos.y += pad_text_line;

            auto base_pos = vec2(line_pos.x, line_pos.y + line_size.y + m_style.m_pad_header_bottom);
            auto base_size = vec2(line_size.x, (m_style.m_line_height * first_column.size()) + (m_style.m_pad_base * 2));

    /// Adjusted height of our crap.
    size.y += text_size.y + pad_text_line + line_size.y + m_style.m_pad_header_bottom + base_size.y;

    /// Outline measures.
    const auto outline_pos = pos - m_style.m_outline_size;
    const auto outline_size = size + (m_style.m_outline_size * 2);

    /// Outline.
    render::rect(outline_pos.x, outline_pos.y, outline_size.x, outline_size.y, m_style.m_col_outline);

    /// Beside outline.
    {
        /// Outer.
        render::outline(outline_pos.x - 1, outline_pos.y - 1, outline_size.x + 2, outline_size.y + 2, m_style.m_col_outer_outline);

        /// Inner.
        render::outline(outline_pos.x, outline_pos.y, outline_size.x, outline_size.y, m_style.m_col_inner_outline);
    }

    /// Inside outline.
    {
        const auto this_pos = outline_pos + m_style.m_outline_size;
        const auto this_size = outline_size - (m_style.m_outline_size * 2);

        /// Outer (also closet to base background, so render like it is).
        render::rect(this_pos.x, this_pos.y, this_size.x, this_size.y, m_style.m_col_outer_outline);

        /// Inner.
        render::outline(this_pos.x + 1, this_pos.y + 1, this_size.x - 2, this_size.y - 2, m_style.m_col_inner_outline);
    }

    /// Header.
    {
        /// Label shadow.
        render::text(text_pos.x + 1, text_pos.y + 1, font::tahoma_8, text.c_str(), color(0, 0, 0, 200), ALIGN_CENTER_X);

        /// Label.
        render::text(text_pos.x, text_pos.y, font::tahoma_8, text.c_str(), color(255, 255, 255, 200), ALIGN_CENTER_X);

        /// Base accent line.
        render::gradient(line_pos.x, line_pos.y, line_size.x, line_size.y, m_style.m_col_accent[0], m_style.m_col_accent[1]);

        /// Line shade.
        render::rect(line_pos.x, line_pos.y, line_size.x, line_size.y * 0.5f, color(255, 255, 255, 20));
    }

    /// Base.
    {
        /// Background.
        render::rect(base_pos.x, base_pos.y, base_size.x, base_size.y, m_style.m_col_base);

        /// Outer outline.
        render::outline(base_pos.x, base_pos.y, base_size.x, base_size.y, m_style.m_col_base_outer_outline);

        /// Inner outline.
        render::outline(base_pos.x + 1, base_pos.y + 1, base_size.x - 2, base_size.y - 2, m_style.m_col_base_inner_outline);

        /// Left column.
        if (!first_column.empty()) {
            /// C'mon, let's go.
            auto builder_pos = base_pos + m_style.m_pad_base;

            /// Ampersand imeni Platina300.
            for (const auto& item : first_column) {
                render::text(builder_pos.x, builder_pos.y, font::tahoma_8, item.c_str(), color(255, 255, 255, 200));

                builder_pos.y += m_style.m_line_height;
            }
        }

        /// Right column.
        if (!second_column.empty()) {
            /// C'mon, let's go.
            auto builder_pos = base_pos + m_style.m_pad_base;

            /// Right aligning text.
            builder_pos.x += base_size.x - (m_style.m_pad_base * 2);

            /// Ampersand imeni Platina300.
            for (const auto& item : second_column) {
                const auto text_size = render::measure_text(font::tahoma_8, item.c_str());

                /// Right aligning text.
                render::text(builder_pos.x - text_size.x, builder_pos.y, font::tahoma_8, item.c_str(), color(255, 255, 255, 200));

                builder_pos.y += m_style.m_line_height;
            }
        }
    }
}

void c_hud::draw_binds(const vec2& pos) {
    std::vector<wstring> binds_name;
    std::vector<wstring> binds_mode;

    if (true) {
        binds_name.emplace_back(L"а я еду suck");
        binds_mode.emplace_back(L"toggled");
    }
    if (true) {
        binds_name.emplace_back(L"suck some dick");
        binds_mode.emplace_back(L"disabled");
    }
    if (true) {
        binds_name.emplace_back(L"вокруг fucking slaves");
        binds_mode.emplace_back(L"fisting");
    }

    draw_frame(pos, L"binds", binds_name, binds_mode);
}

/// Simple spectators list.
void c_hud::draw_spectators(const vec2& pos) {
    if (!globals::local_player->is_alive())
        return;

    std::vector<wstring> spectators_name;

    for (auto i = 1u; i <= interfaces::globals->m_max_players; i++) {
        auto player = static_cast<c_cs_player*>(interfaces::entity_list->get_client_entity(i));
        if (!player)
            continue;

        if (player->m_spectating_target() != globals::local_player)
            continue;

        const auto info = player->get_info();

        //if (info.m_hltv || info.m_fake_player)
        //    continue;

        auto name = convert::to_unicode(info.m_name);

        std::transform(name.begin(), name.end(), name.begin(), towlower);

        spectators_name.emplace_back(name);
    }

    draw_frame(pos, L"spectators", spectators_name);
}

void c_hud::render() {
    /// Updating our accent color.
    update_accent_color();

    /// Change watermark options here.
    draw_watermark(USER | INCOMING | OUTGOING | TIME);

    draw_binds(vec2(1685, 60));

    draw_spectators(vec2(1685, 180));
}
C++:
Expand Collapse Copy
#pragma once
#include "../../globals.h"

class c_hud : public singleton<c_hud> {
private:
    /// Elements accent color mode.
    enum e_color_mode {
        STATIC = 1, /// Just accent color
        RAINBOW,        /// Dynamic color
        GRADIENT    /// Gradient dynamic color
    };

    /// Watermark options to draw.
    enum e_watermark_options {
        NONE        = 0, /// Default argument, only logo will be drawn.
        USER        = (1 << 0), /// User name
        INCOMING = (1 << 1), /// Incoming latency (only in-game)
        OUTGOING = (1 << 2), /// Outgoing latency (only in-game)
        TIME        = (1 << 3)  /// Current Windows time
    };

    /// Color stuff.

    /// <summary> Returns color, based on current style. </summary>
    void update_accent_color();

    struct style_t {
        e_color_mode    m_col_mode = RAINBOW; /// Elements accent color mode.
        color                m_col_fallback = color(210, 150, 20, 200); /// Change your accent color here.
        color                m_col_accent[2]; /// Final color, will be used in elements rendering.

        /// Watermark stuff.
        vec2                m_watermark_paddings = vec2(5, 3);
        vec2                m_watermark_margins  = vec2(10, 10);

        /// Default elements stuff.
        size_t            m_outline_size            = 4; /// Main outline size (in pixels).
        size_t            m_line_height            = render::measure_text(font::tahoma_8, "A").y;

        size_t            m_pad_base                = 5;
        size_t            m_pad_header_top        = 6;
        size_t            m_pad_header_sides    = 6;
        size_t            m_pad_header_bottom    = 7;

        color                m_col_base                        = color(0, 0, 0);
        color                m_col_base_outer_outline    = color(0, 0, 0, 220);
        color                m_col_base_inner_outline    = color(255, 255, 255, 4);

        color                m_col_outline            = color(0, 0, 0, 200);
        color                m_col_outer_outline    = color(0, 0, 0, 220);
        color                m_col_inner_outline    = color(255, 255, 255, 8);
    } m_style;

    /// Elements rendering.

    /// <summary> Usage: draw_watermark(USER | OUTGOING | TIME) for user name, outgoing latency and time rendering. </summary>
    void draw_watermark    (uint8_t options = NONE);

    void draw_frame        (const vec2& pos, const wstring& name, const std::vector<wstring>& first_column, const std::vector<wstring>& second_column = {});
    void draw_binds        (const vec2& pos);
    void draw_spectators    (const vec2& pos);

public:
    /// <summary> Entry function. Should be called in d3dx9 or paint hook. </summary>
    void render();
};


XlTYOgw.png

ueRmsIB.png
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Неплохо сова
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Уфффф.....
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А как сделать итого луашку на никсвар? :roflanEbalo:
 
спасибо safe за этот beautiful stuff буду use его в своем new project для увеличения своих sales надеюсь у меня получится продвинуть свой cheat на big рынок cheats
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
спасибо safe за этот beautiful stuff буду use его в своем new project для увеличения своих sales надеюсь у меня получится продвинуть свой cheat на big рынок cheats
upd. стоить ёр project будет three hundred baks
 
Последнее редактирование:
  • Мне нравится
Реакции: Wine
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Спасибо dungeon master за этот fisting ass expirience, но зачем ты fuck my eyes изменением цвета текста при градиенте с black на white?
 
  • Вау!
Реакции: sove
сова молодец ?
 
Ну кстати забыл добавить - у вас может быть render::rect(вместо render::outline) и render::filled_rect(вместо render::rect).
credits: @L1ney
 
Последнее редактирование:
Ого,ну тут однозначно +rep
 
а как это сделать луашкой на экстрим хак
 
  • Вау!
Реакции: sove
а я думал джс на вантап, уже летел пастить, эхх
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Заебок :roflanEbalo: , кинул бы реакцию но не смогу:roflanBuldiga::roflanBuldiga:
 
  • Мне нравится
Реакции: sove
я литл 15 йо кид, научите впихивать это в мою пасту :roflanBuldiga:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
в в1 биндов не было, только индикаторы такие рект файлды зеленые (
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Выглядит охуенно, за такое и не жалко симпатию поставить.
Только завтра смогу на сегодня лимит по симпатиям исчерпан
 
  • Вау!
Реакции: sove
Назад
Сверху Снизу