C++ The simplest system of records

kitty.
Пользователь
Статус
Оффлайн
Регистрация
17 Окт 2021
Сообщения
282
Реакции[?]
111
Поинты[?]
17K
абалдеть... всем привет, сегодня база мне подогнала такое чудо, простую систему записи рекордов!!! БАЗА КОРМИТ:roflanBuldiga:
C++:
#pragma once

class c_lag_record {
public:
    c_cs_player* m_player;
    int m_index;

    bool is_dormant;
    bool is_immune;

    vec3_t m_origin;
    vec3_t m_abs_origin;

    vec3_t m_velocity;
    vec3_t m_anim_velocity;

    vec3_t m_obb_min;
    vec3_t m_obb_max;

    float m_sim_time;
    float m_duck_amount;
    float m_lby;

    qangle_t m_eye_angles;
    qangle_t m_abs_angles;
    qangle_t m_rotation;

    anim_layers_t m_layers;
    pose_params_t m_poses;

    matrix3x4_t m_bones[128];

    int m_anim_delay;

    bit_flag_t<uint32_t> m_flags;

    c_lag_record(c_cs_player* player) {
        if (!player || !player->is_alive())
            return;

        m_player = player;

        m_index = m_player->get_index();
        m_anim_delay = TIME_TO_TICKS(m_player->get_sim_time() - m_player->get_old_sim_time());

        is_dormant = m_player->is_dormant();
        is_immune = m_player->is_immune();

        m_origin = m_player->get_origin();
        m_abs_origin = m_player->get_abs_origin();

        m_velocity = m_player->get_velocity();

        m_obb_min = m_player->get_collideable()->obb_mins();
        m_obb_max = m_player->get_collideable()->obb_maxs();

        m_sim_time = m_player->get_sim_time();
        m_duck_amount = m_player->get_duck_amount();
        m_lby = m_player->get_lby();

        m_eye_angles = m_player->get_eye_angles();
        m_abs_angles = m_player->get_abs_angles();
        m_rotation = m_player->get_rotation();

        m_flags = m_player->get_flags();

        memcpy(m_layers.data(), m_player->get_anim_layers().data(), sizeof(anim_layer_t) * 15);
        memcpy(m_poses.data(), m_player->get_pose_params().data(), sizeof(float) * 24);

        memcpy(m_bones, m_player->get_bone_cache()->m_cached_bones, sizeof(matrix3x4_t) * m_player->get_bone_cache()->m_cached_bones_count); // снеси эту хуйню либо добавь в проверку и сторь уже адекватно ребилднутый кости в ребилднутом setup_bones((((
    }
};

class c_record_system : public c_singleton<c_record_system> {
public:
    void on_frame_stage(e_client_frame_stage stage);

    void update_animations(c_lag_record* record);
};

extern std::array<std::deque<c_lag_record>, 64u> m_records;

#define record_system c_record_system::instance()

C++:
#include "../features.h"

std::array<std::deque<c_lag_record>, 64u> m_records;

void c_record_system::on_frame_stage(e_client_frame_stage stage) {
    if (stage != FRAME_NET_UPDATE_END)
        return;

    for (auto i = 0; i < interfaces::m_global_vars->m_max_clients; i++) {
        auto player = reinterpret_cast<c_cs_player*>(interfaces::m_entity_list->get_client_entity(i));

        if (!player || !player->is_alive() || !player->is_player() || !player->is_enemy(globals::m_local))
            continue;

        auto update = m_records.at(i).empty() || (!m_records.at(i).empty() && player->get_sim_time() > m_records.at(i).front().m_sim_time);

        if (update && player->get_sim_time() <= player->get_old_sim_time())
            update = false;

        if (update) {
            m_records.at(i).emplace_front(c_lag_record(player));

            update_animations(&m_records.at(i).front());

            player->setup_bones(nullptr, 128, BONE_FLAG_USED_BY_ANYTHING, player->get_sim_time());
        }

        while (m_records.at(i).size() > 32)
            m_records.at(i).pop_back();
    }
}

void c_record_system::update_animations(c_lag_record* record) {

}

написано на quality mega super puper wok v2 sdk, работоспособность проверена(работает как швейцарские часы)
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
4 Янв 2022
Сообщения
57
Реакции[?]
8
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Молодец, но не легче уже взять рифк анимпарт и спастить вок ? Там вроде такой же рекорд.
Ждедм анимпарт рифка в wok sdk
 
kitty.
Пользователь
Статус
Оффлайн
Регистрация
17 Окт 2021
Сообщения
282
Реакции[?]
111
Поинты[?]
17K
Молодец, но не легче уже взять рифк анимпарт и спастить вок ? Там вроде такой же рекорд.
Ждедм анимпарт рифка в wok sdk
зачем.. ведь можно просто юзать мой пример, дополнив его
 
Забаненный
Статус
Оффлайн
Регистрация
4 Янв 2022
Сообщения
57
Реакции[?]
8
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
378
Реакции[?]
104
Поинты[?]
13K
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,374
Реакции[?]
2,280
Поинты[?]
184K
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
378
Реакции[?]
104
Поинты[?]
13K
Как же так, делать экстерн в хедере, автору руки надо за такое оторвать...
действительно, ведь писать extern вместо инклюда самое то ))0) ага
с такими приколами ты никогда не докажешь... :kissingheart:
Посмотреть вложение 188020
чела, который пишет extern в хедерах, не спрашивали
 
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,374
Реакции[?]
2,280
Поинты[?]
184K
действительно, ведь писать extern вместо инклюда самое то ))0) ага

чела, который пишет extern в хедерах, не спрашивали
Он должен .cpp файл инклюднуть, гений?)
Можно, конечно, было объявить этот массив в хедере, а потом хедер инклюднуть в этот спп, но автор захотел сделать так.
Разницы, кроме визуальной, нет абсолютно.
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
378
Реакции[?]
104
Поинты[?]
13K
Последнее редактирование:
Нефор
Забаненный
Статус
Оффлайн
Регистрация
9 Ноя 2018
Сообщения
1,042
Реакции[?]
663
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,374
Реакции[?]
2,280
Поинты[?]
184K
поставить клоуна, когда понял, что обосрался
> Поставить клоуна, потому что не хочешь несколько раз объяснять упрямому человеку, почему он неправ.
Такого варианта нет?)

У тебя была претензия к тому, что автор юзает extern в хедере, что само по себе проблемой вообще никак не может являться.
Чтобы потом без ключевого слова extern использовать глобальную переменную, объявленную в .cpp, тебе нужно расширить эту переменную в хедере, а после - подключить этот хедер туда, куда тебе нужно // там, где ты собираешься использовать эту расширенную глобальную переменную (это лучший вариант реализации. Так то можно и .cpp инклюдать куда угодно, чё уж там).

Да, опять же, автор мог поступить проще - объявить массив в хедере и включить этот хедер в .cpp, тем самым сэкономив себе одну строчку кода, но он сделал иначе. Да, это не самое лучше решение, но оно, в целом, ни на что не влияет, так что вопросов по этому поводу можно и не предъявлять.

Ещё есть какие-то вопросы?
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
378
Реакции[?]
104
Поинты[?]
13K
> Поставить клоуна, потому что не хочешь несколько раз объяснять упрямому человеку, почему он неправ.
Такого варианта нет?)

У тебя была претензия к тому, что автор юзает extern в хедере, что само по себе проблемой вообще никак не может являться.
Чтобы потом без ключевого слова extern использовать глобальную переменную, объявленную в .cpp, тебе нужно расширить эту переменную в хедере, а после - подключить этот хедер туда, куда тебе нужно // там, где ты собираешься использовать эту расширенную глобальную переменную (это лучший вариант реализации. Так то можно и .cpp инклюдать куда угодно, чё уж там).

Да, опять же, автор мог поступить проще - объявить массив в хедере и включить этот хедер в .cpp, тем самым сэкономив себе одну строчку кода, но он сделал иначе. Да, это не самое лучше решение, но оно, в целом, ни на что не влияет, так что вопросов по этому поводу можно и не предъявлять.

Ещё есть какие-то вопросы?
во 1: он обьявляет эту переменную впервые, т.к. реализация c_lag_record сразу перед данным массивом, а насколько ты знаешь, array нельзя создать с неполным типом)

во 2: причем тут инклюд .cpp то?
мы обьявляем переменную, чтобы её использовать в других файлах, нам нужно ЛИБО "extern type name;", либо инклюдить файл.
у нас хедер. хедер в любом случае будут инклюдить, зачем нам extern? какую смысловую нагрузку несет обьявление данной переменной, как extern? в том то и дело, что никакой.
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
378
Реакции[?]
104
Поинты[?]
13K
forward declaration шутка да?
это всё, на что ты смог ответить?)))))
слабовато

форвард декларация std::array?
у тебя оказывается настолько плохо с плюсами))0)

1642062349303.png
1642062363906.png

3.2 пункт стандарта плюсов прочитай, полезно будет
что десинк, что ты что то сказали, но ничего полезного
 
Сверху Снизу