Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Crash get spawn time

  • Автор темы Автор темы DasAdErt
  • Дата начала Дата начала
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
13 Дек 2018
Сообщения
323
Реакции
76
1641693465506.png


на комменты не обращайте внимания
 
ТЫ ОПЯТЬ обосрался едрид мадрид, то что ты добавил apply_record не значит что в твою сущность что-то запишется, ведь опять же нету аргумента, который и будет передавать энтити которого ты нашёл с помощью get_clienty_entity в твой рекорд, а ещё я не удивлюсь если ты юзаешь player из структуры для рекордов, ведь по факту у тебя всегда player будет равен nullptr

у тебя что-то типа такого видимо:


C++:
Expand Collapse Copy
class m_record {

public:



c_cs_player* player;



void on_frame_stage();

}
или же ты в другом классе создал пустого player

самый страшный вариант это то что ты добавил apply_record потому что спастил всё из лв, в котором player находится также с помощью get_client_entity(index) в valid() функции, а index'у то и взяться неоткуда:frowning::grin:

я тебе щас напишу простейшую систему записи рекордов, ток визуалку скачаю:confounded:
 
Последнее редактирование:
вот простейшая система записи рекордов, добавил пару комментов, спасти себе и добавляй уже свою хрень поверх
C++:
Expand Collapse Copy
#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++:
Expand Collapse Copy
#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 == globals::m_local || player->is_dormant())
            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) {
            m_records.at(i).emplace_front(c_lag_record(player));

            // всё ура теперь всё правильно засторилось, используй плеера либо из рекорда( m_records.at(i).front().m_player) либо player из цикла

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

            m_records.at(i).front().m_player->setup_bones(nullptr, 128, BONE_FLAG_USED_BY_ANYTHING, m_records.at(i).front().m_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) {

}

под wokv2 sdk, работоспособность проверена
 
Последнее редактирование:
вот простейшая система записи рекордов, добавил пару комментов, спасти себе и добавляй уже свою хрень поверх
C++:
Expand Collapse Copy
#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++:
Expand Collapse Copy
#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 == globals::m_local || player->is_dormant())
            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) {
            m_records.at(i).emplace_front(c_lag_record(player));

            // всё ура теперь всё правильно засторилось, используй плеера либо из рекорда( m_records.at(i).front().m_player) либо player из цикла

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

            m_records.at(i).front().m_player->setup_bones(nullptr, 128, BONE_FLAG_USED_BY_ANYTHING, m_records.at(i).front().m_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) {

}

под wokv2 sdk, работоспособность проверена

у меня тоже самое что ты кинул, я просто слеп и не прочитал, что player null, наверное надо быть вниматнльнее)
 
у меня тоже самое что ты кинул
Я чёт не вижу на скрине похожего
у меня тоже самое что ты кинул, я просто слеп и не прочитал, что player null, наверное надо быть вниматнльнее)
кстати челик чё ты кринжуешь, ведь в c_anim_state уже есть reset (reset_anim_state) :coldsweat::confounded:

p.s мне страшно представлять что там на публику выйдет :coldsweat:
 
Последнее редактирование:
Назад
Сверху Снизу