Исходник Calculate playback rate of server

ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Сен 2021
Сообщения
425
Реакции[?]
121
Поинты[?]
162K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
            auto calc_playback_rate = [ & ]( c_csplayer* player, const float& velocity_delta, float move_dist = -1.0f ) {
                auto state = player->animstate( );
                auto anim_layer = player->anim_overlay( )[ 6 ];

                auto move_yaw = player->pose_parameter()[ 7 ];
                player->pose_parameter( )[ 7 ] = velocity_delta;

                auto seq_dur = player->get_sequence_cycle_rate( player->get_studio_hdr( ), anim_layer.sequence );

                float v56;
                if ( seq_dur <= 0.0f )
                    v56 = 10.0f;
                else
                    v56 = 1.0f / seq_dur;

                float v237 = 1.0f / ( 1.0f / v56 );

                auto dist = move_dist;
                if ( move_dist == -1.0f ) {
                    dist = player->get_sequence_move_dist( player->get_studio_hdr( ), anim_layer.sequence );
                }

                if ( dist * v237 <= 0.001f ) {
                    dist = 0.001f;
                }
                else {
                    dist *= v237;
                }

                player->pose_parameter( )[ 7 ] = move_yaw;

                float speed = record->velocity.length( true );
                float v50 = ( 1.0f - ( state->walk_run_transition * 0.15f ) ) * ( ( speed / dist ) * v56 ); // 0x11C
                float new_playback_rate = interfaces::global_vars->interval_per_tick * v50;
                return new_playback_rate;
            };
usage:
C++:
const auto cur_left = calc_playback_rate( player, record->sim_left.layers[ 6 ].playback_rate );

const float delta_left = abs( prev_record->sim_left.layers[6].playback_rate - cur_left );
 
privates militärunternehmen "Überlegenheit"
Забаненный
Статус
Оффлайн
Регистрация
20 Сен 2023
Сообщения
152
Реакции[?]
113
Поинты[?]
23K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
дополним

C++:
__forceinline float c_player::get_sequence_cycle_rate(studio_hdr_t* studio_hdr, int sequence) {
        using fn_t = float(__thiscall*)(decltype(this), studio_hdr_t*, int);

        return (*reinterpret_cast<fn_t**>(this))[222u](this, studio_hdr, sequence);
    }

    __forceinline void c_player::get_sequence_linear_motion(studio_hdr_t* studio_hdr, int sequence, pose_params_t pose_params, vec3_t* out) {
        using fn_t = int(__fastcall*)(studio_hdr_t*, int, float*, vec3_t*);

        reinterpret_cast<fn_t>(
            g_context->addresses().m_get_sequence_linear_motion // client.dll -> 55 8B EC 83 EC 0C 56 8B F1 57 8B FA 85 F6 75 14
            )(studio_hdr, sequence, pose_params.data(), out);

        __asm add esp, 8u
    }

    __forceinline float c_player::get_sequence_move_dist(studio_hdr_t* studio_hdr, int sequence) {
        vec3_t ret;
        get_sequence_linear_motion(studio_hdr, sequence, pose_params(), &ret);
        return ret.length();
    }
 
Начинающий
Статус
Оффлайн
Регистрация
14 Июн 2023
Сообщения
155
Реакции[?]
6
Поинты[?]
6K
C++:
            auto calc_playback_rate = [ & ]( c_csplayer* player, const float& velocity_delta, float move_dist = -1.0f ) {
                auto state = player->animstate( );
                auto anim_layer = player->anim_overlay( )[ 6 ];

                auto move_yaw = player->pose_parameter()[ 7 ];
                player->pose_parameter( )[ 7 ] = velocity_delta;

                auto seq_dur = player->get_sequence_cycle_rate( player->get_studio_hdr( ), anim_layer.sequence );

                float v56;
                if ( seq_dur <= 0.0f )
                    v56 = 10.0f;
                else
                    v56 = 1.0f / seq_dur;

                float v237 = 1.0f / ( 1.0f / v56 );

                auto dist = move_dist;
                if ( move_dist == -1.0f ) {
                    dist = player->get_sequence_move_dist( player->get_studio_hdr( ), anim_layer.sequence );
                }

                if ( dist * v237 <= 0.001f ) {
                    dist = 0.001f;
                }
                else {
                    dist *= v237;
                }

                player->pose_parameter( )[ 7 ] = move_yaw;

                float speed = record->velocity.length( true );
                float v50 = ( 1.0f - ( state->walk_run_transition * 0.15f ) ) * ( ( speed / dist ) * v56 ); // 0x11C
                float new_playback_rate = interfaces::global_vars->interval_per_tick * v50;
                return new_playback_rate;
            };
usage:
C++:
const auto cur_left = calc_playback_rate( player, record->sim_left.layers[ 6 ].playback_rate );

const float delta_left = abs( prev_record->sim_left.layers[6].playback_rate - cur_left );
зачем
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Сен 2021
Сообщения
425
Реакции[?]
121
Поинты[?]
162K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пользователь
Статус
Оффлайн
Регистрация
25 Мар 2021
Сообщения
161
Реакции[?]
70
Поинты[?]
27K
privates militärunternehmen "Überlegenheit"
Забаненный
Статус
Оффлайн
Регистрация
20 Сен 2023
Сообщения
152
Реакции[?]
113
Поинты[?]
23K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ребилд сервера, что бы было проперно, из-за точно что бывает на серваке не точно, вот и ребилднули
бтв по поводу ребилда сервера - там разве что-то подобное вообще было?
1700426764180.png

upd: все, понял че к чему, вопросов нету
я этот парт несколько иначе реализовал просто ххх
1700440298638.png
 
Последнее редактирование:
Сверху Снизу