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

/del


C++:
Expand Collapse Copy
    if ( entity->is_player( ) )
    {
        const auto player = dynamic_cast< C_BasePlayer* > ( entity );

        if ( !player )
            return;

        if ( local && player == local && local->is_alive( ) && interfaces::global_vars->curtime - local->spawn_time( ) > 3.f )
        {
            if ( g_options.chams_fake_desync && g_features.animations.init_fake_anim )
            {
                if ( g_features.animations.m_got_fake_matrix )
                {
                    for ( auto& i : g_features.animations.m_fake_matrix )
                    {
                        i[ 0 ][ 3 ] += pinfo.origin.x;
                        i[ 1 ][ 3 ] += pinfo.origin.y;
                        i[ 2 ][ 3 ] += pinfo.origin.z;
                    }

                    g_helpers.material_helper.overwrite ( false, true, false, false, g_options.color_chams_fake_desync );
                    interfaces::render_view->set_blend ( 0.25f + sin ( interfaces::global_vars->curtime * 5.f ) * .2f );
                    ofunc ( interfaces::mdl_render, ctx, state, pinfo, g_features.animations.m_fake_matrix );
                    interfaces::mdl_render->forced_material_override ( nullptr );
                    interfaces::render_view->set_blend ( 1.f );

                    for ( auto& i : g_features.animations.m_fake_matrix )
                    {
                        i[ 0 ][ 3 ] -= pinfo.origin.x;
                        i[ 1 ][ 3 ] -= pinfo.origin.y;
                        i[ 2 ][ 3 ] -= pinfo.origin.z;
                    }
                }
            }

            if ( g_options.chams_fake_pos && g_features.animations.m_got_fake_matrix )
            {
                interfaces::render_view->set_blend ( 0.25f + sin ( interfaces::global_vars->curtime * 5.f ) * .2f );
                g_helpers.material_helper.overwrite ( false, true, false, false, g_options.color_chams_fake_pos );
                ofunc ( interfaces::mdl_render, ctx, state, pinfo, g_features.animations.m_fake_position_matrix );
                interfaces::mdl_render->forced_material_override ( nullptr );
                interfaces::render_view->set_blend ( 1.f );
            }

            switch ( static_cast< chams_modes_t > ( g_options.chams_type_local ) )
            {
            case chams_modes_t::none:
                {
                    interfaces::render_view->set_blend ( 1.f );
                }
                break;

            case chams_modes_t::normal:
                {
                    g_helpers.material_helper.overwrite ( false, false, false, false, g_options.chams_color_local );
                }
                break;

            case chams_modes_t::flat:
                {
                    g_helpers.material_helper.overwrite ( false, true, false, false, g_options.chams_color_local );
                }
                break;

            case chams_modes_t::metallic:
                {
                    g_helpers.material_helper.overwrite ( false, false, false, true, g_options.chams_color_local );
                }
                break;
            }

            if ( g_local && g_local->is_scoped( ) )
                interfaces::render_view->set_blend ( g_options.visuals_scope_transparency );

            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
        }
        else
        {
            if ( player->is_alive( ) )
            {
                if ( player->is_enemy( ) )
                {
                    if ( g_options.chams_enemy_backtrack && !g_features.rage_backtrack.saved_data[ player->ent_index( ) ].empty( ) )
                    {
                        interfaces::mdl_render->forced_material_override ( nullptr );
                        interfaces::render_view->set_blend ( 1.f );

                        g_helpers.material_helper.overwrite ( true, true, false, false, g_options.color_chams_backtrack );
                        ofunc ( interfaces::mdl_render, ctx, state, pinfo,
                                g_features.rage_backtrack.saved_data[ player->ent_index( ) ].front( ).ndata.matrix );
                    }

                    interfaces::render_view->set_blend ( 0.5f + sin ( interfaces::global_vars->realtime * 5.f ) * 0.5f );

                    switch ( static_cast< chams_modes_t > ( g_options.chams_type_enemy ) )
                    {
                    case chams_modes_t::none:
                        {
                            interfaces::render_view->set_blend ( 1.f );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
                            interfaces::mdl_render->forced_material_override ( nullptr );
                            interfaces::render_view->set_blend ( 1.f );
                            return;
                        }

                    case chams_modes_t::normal:
                        {
                        interfaces::mdl_render->forced_material_override(nullptr);
                        interfaces::render_view->set_blend(1.f);
                            g_helpers.material_helper.overwrite ( true, false, false, false, g_options.chams_color_xqz_enemy );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );

                            g_helpers.material_helper.overwrite ( false, false, false, false, g_options.chams_color_enemy );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
                        }
                        break;

                    case chams_modes_t::flat:
                        {
                        interfaces::mdl_render->forced_material_override(nullptr);
                        interfaces::render_view->set_blend(1.f);
                            g_helpers.material_helper.overwrite ( true, true, false, false, g_options.chams_color_xqz_enemy );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );

                            g_helpers.material_helper.overwrite ( false, true, false, false, g_options.chams_color_enemy );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
                        }
                        break;

                    case chams_modes_t::metallic:
                        {
                        interfaces::mdl_render->forced_material_override(nullptr);
                        interfaces::render_view->set_blend(1.f);
                            g_helpers.material_helper.overwrite ( true, false, false, true, g_options.chams_color_xqz_enemy );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );

                            g_helpers.material_helper.overwrite ( false, false, false, true, g_options.chams_color_enemy );
                            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
                        }
                        break;
                    }

                    return;
                }

                interfaces::render_view->set_blend ( 0.5f + sin ( interfaces::global_vars->realtime * 5.f ) * 0.5f );

                switch ( static_cast< chams_modes_t > ( g_options.chams_type_team ) )
                {
                case chams_modes_t::none:
                {
                        interfaces::mdl_render->forced_material_override(nullptr);
                        interfaces::render_view->set_blend(1.f);           
                        interfaces::render_view->set_blend(1.f);
                        ofunc(interfaces::mdl_render, ctx, state, pinfo, matrix);

                    return;
                }

                case chams_modes_t::normal:
                    {
                        interfaces::mdl_render->forced_material_override(nullptr);
                        interfaces::render_view->set_blend(1.f);
                        g_helpers.material_helper.overwrite(true, false, false, false, g_options.chams_color_xqz_team);
                        ofunc(interfaces::mdl_render, ctx, state, pinfo, matrix);
                        g_helpers.material_helper.overwrite(false, false, false, false, g_options.chams_color_team);
                        ofunc(interfaces::mdl_render, ctx, state, pinfo, matrix);
                    
                    }
                    break;

                case chams_modes_t::flat:
                    {
                    interfaces::mdl_render->forced_material_override(nullptr);
                    interfaces::render_view->set_blend(1.f);
                        g_helpers.material_helper.overwrite ( true, true, false, false, g_options.chams_color_xqz_team );
                        ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );

                        g_helpers.material_helper.overwrite ( false, true, false, false, g_options.chams_color_team );
                        ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
                    }
                    break;

                case chams_modes_t::metallic:
                    {
                    interfaces::mdl_render->forced_material_override(nullptr);
                    interfaces::render_view->set_blend(1.f);
                        g_helpers.material_helper.overwrite ( true, false, false, true, g_options.chams_color_xqz_team );
                        ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );

                        g_helpers.material_helper.overwrite ( false, false, false, true, g_options.chams_color_team );
                        ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
                    }
                    break;
                }
            }

            ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
        }
    }
    else
        ofunc ( interfaces::mdl_render, ctx, state, pinfo, matrix );
 
но внезапно они могут пропасть и вместо них появляются чамсы которые смотрят туда куда и смотрю я,
кинь свой сетап бонс, прост в деф гетхаде он убогий мб в нем проблема
 
кинь свой сетап бонс, прост в деф гетхаде он убогий мб в нем проблема
C++:
Expand Collapse Copy
bool __fastcall hooks::hk_setup_bones ( void* ecx, void* edx, matrix3x4_t* bone_to_world_out, int max_bones, int bone_mask, float curtime )
{
    if ( g_unload )
        return o_setup_bones ( ecx, bone_to_world_out, max_bones, bone_mask, curtime );

    if ( ecx && static_cast< IClientRenderable* > ( ecx )->get_iclient_unknown( ) )
    {
        auto networkable = static_cast< IClientRenderable* > ( ecx )->get_iclient_unknown( )->get_client_networkable( );

        //static uintptr_t org_adr = *org_init_addr;
        auto tmp_renderable = static_cast< C_BaseCombatWeapon* > ( ecx );

        //console::write_line ( networkable->get_client_class ( )->class_id );

        if ( networkable && networkable->get_client_class( ) && networkable->get_client_class( )->class_id == CCSPlayer )
        {
            auto renderable = static_cast< IClientRenderable* > ( ecx );
            auto player = dynamic_cast< C_BasePlayer* > ( renderable );
            //auto real_player = reinterpret_cast<C_BasePlayer*>(reinterpret_cast<uintptr_t)

            if ( !player || !renderable )
                return false;

            const auto i = networkable->ent_index( );

            static setup_bones_data_t data[64];

            /*
            if (!o_setup_bones(ecx, _data[i].matrix, 128, bone_used_by_anything, curtime)) {

            }
            */
            //if ( networkable->ent_index ( ) == interfaces::engine_client->get_localplayer ( ) )
            //{
            //    const auto return_val = o_setup_bones ( ecx, bone_to_world_out, max_bones, bone_mask, curtime );

            //    return return_val;
            //}

            if ( curtime == 0.f )
                curtime = player->simulation_time( );

            static auto host_timescale = interfaces::cvar->find_var ( xor_str ( "host_timescale" ) );
            const auto old_cur_time = interfaces::global_vars->curtime;
            const auto old_real_time = interfaces::global_vars->realtime;
            const auto old_frame_time = interfaces::global_vars->frametime;
            const auto old_abs_frame_time = interfaces::global_vars->absoluteframetime;
            const auto old_interp_amount = interfaces::global_vars->interpolation_amount;
            const auto old_tick_count = interfaces::global_vars->tickcount;

            if ( networkable->ent_index( ) == interfaces::engine_client->get_localplayer( ) )
            {
                //if ( !ctx::client.should_setup_local_bones )
                //{
                //    if ( g_features.animations.m_got_real_matrix )
                //    {
                //        if ( !bone_to_world_out )
                //            return true;

                //        memcpy ( bone_to_world_out, g_features.animations.m_real_matrix, sizeof ( matrix3x4_t ) * max_bones );

                //        const auto t = player->get_render_origin( );

                //        for ( auto idx = 0; idx < max_bones; ++idx )
                //        {
                //            bone_to_world_out[ idx ][ 0 ][ 3 ] += t.x;
                //            bone_to_world_out[ idx ][ 1 ][ 3 ] += t.y;
                //            bone_to_world_out[ idx ][ 2 ][ 3 ] += t.z;
                //        }

                //        return true;
                //    }
                //    return false;
                //}

                ctx::client.should_setup_local_bones = false;

                static animation_layer_t backup_layers[13];
                static float backup_poses[20];
                //static matrix3x4_t local_matrix[maxstudiobones];
                //static auto last_time = 0.f;

                //if ( interfaces::global_vars->tickcount == last_tickcount && got && player->vec_origin() == last_origin )
                //{
                //    if ( bone_to_world_out )
                //        memcpy ( bone_to_world_out, local_matrix, sizeof ( matrix3x4_t ) * max_bones );

                //    return true;
                //}

                if ( !bone_to_world_out )
                {
                    static auto last_tickcount = 0;

                    bone_mask = bone_used_by_anything;

                    if ( last_tickcount == interfaces::global_vars->tickcount )
                        bone_mask &= ~bone_used_by_attachment;

                    last_tickcount = interfaces::global_vars->tickcount;

                    if ( player->vec_velocity( ).length2d( ) < 0.1f && data[ i ].simtime == player->simulation_time( ) ) //& ~BONE_USED_BY_ATTACHMENT {
                        bone_mask &= ~bone_used_by_attachment;

                    data[ i ].simtime = player->simulation_time( );

                    auto& last_animation_framecount = *reinterpret_cast< int* > ( uintptr_t ( player ) + 0xA68 );
                    last_animation_framecount = 0;

                    auto state = player->get_base_player_anim_state( );

                    if ( state )
                        state->m_flLastClientSideAnimationUpdateTime -= 1;

                    *reinterpret_cast< float* > ( reinterpret_cast< uintptr_t > ( player ) + 2664 ) = 0;
                    *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x269C ) = 0; //prev_bone_mask
                    bone_mask |= 0x200;
                    player->effects( ) |= 8;
                    player->eflag( ) &= ~EFL_DIRTY_ABSTRANSFORM;
                    //player->set_abs_angles ( qangle_t ( 0, g_features.anti_aim.m_current_rendered_real_abs_yaw, 0 ) );
                    player->invalidate_bone_cache( );

                    static animation_layer_t babackup_layers[13];
                    static float babackup_poses[20];

                    //std::memcpy ( babackup_layers, g_local->get_anim_overlay ( 0 ), sizeof ( babackup_layers ) );
                    //std::memcpy ( babackup_poses, g_local->pose_parameter().data(  ), sizeof ( babackup_poses ) );

                    //std::memcpy ( g_local->get_anim_overlay ( 0 ), backup_layers, sizeof ( backup_layers ) );
                    //std::memcpy ( g_local->pose_parameter().data(  ), backup_poses, sizeof ( backup_poses ) );

                    const auto rval = o_setup_bones ( ecx, bone_to_world_out, max_bones, bone_mask, globals.curtime );

                    //std::memcpy ( g_local->get_anim_overlay ( 0 ), babackup_layers, sizeof ( babackup_layers ) );
                    //std::memcpy ( g_local->pose_parameter().data(  ), babackup_poses, sizeof ( babackup_poses ) );

                    interfaces::global_vars->curtime = old_cur_time;
                    interfaces::global_vars->realtime = old_real_time;
                    //interfaces::global_vars->frametime = old_frame_time;
                    interfaces::global_vars->absoluteframetime = old_abs_frame_time;
                    interfaces::global_vars->tickcount = old_tick_count;
                    interfaces::global_vars->interpolation_amount = old_interp_amount;

                    return rval;
                }

                //if ( interfaces::client_state->chokedcommands != 0 )
                //    return true;

                //last_time = globals.curtime;

                interfaces::global_vars->curtime = globals.curtime;
                interfaces::global_vars->realtime = globals.curtime;

                if ( interfaces::global_vars->frametime > 0.0033333334f )
                    interfaces::global_vars->frametime = 0.003333333f;

                //interfaces::global_vars->frametime = //interfaces::global_vars->interval_per_tick * host_timescale->get_float ( );
                interfaces::global_vars->absoluteframetime = interfaces::global_vars->interval_per_tick * host_timescale->get_float( );
                interfaces::global_vars->interpolation_amount = 0;
                interfaces::global_vars->tickcount = time_to_ticks ( globals.curtime );

                //if ( data[i].simtime != player->simulation_time() )
                //    player->invalidate_bone_cache();

                //auto ba = *reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x28B8 );
                //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x28B8 ) = -1;
                //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x2698 ) = bone_used_by_anything; // last bonemask
                //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x2EA ) = 0;
                //interfaces::prediction->in_prediction();
                //0x268C
                auto state = player->get_base_player_anim_state( );

                if ( state )
                    state->m_flLastClientSideAnimationUpdateTime -= 1;

                auto& last_animation_framecount = *reinterpret_cast< int* > ( uintptr_t ( player ) + 0xA68 );
                last_animation_framecount = 0;
                *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x269C ) = 0; //prev_bone_mask
                bone_mask |= 0x200;
                player->effects( ) |= 8;

                *reinterpret_cast< float* > ( reinterpret_cast< uintptr_t > ( player ) + 2664 ) = 0;
                player->eflag( ) &= ~EFL_DIRTY_ABSTRANSFORM;
                //player->set_abs_angles ( qangle_t ( 0, g_features.anti_aim.m_current_rendered_real_abs_yaw, 0 ) );
                player->invalidate_bone_cache( );

                //if ( renderable ) // eyeposition
                //{
                //    *reinterpret_cast<float*> ( reinterpret_cast<uintptr_t> ( renderable ) + 0x80 ) = 0;
                //    *reinterpret_cast<float*> ( reinterpret_cast<uintptr_t> ( renderable ) + 0x84 ) = 0;
                //    *reinterpret_cast<float*> ( reinterpret_cast<uintptr_t> ( renderable ) + 0x88 ) = 0;
                //}

                //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x268C ) = 0; //GetMostRecentModelBoneCounter so its like we call invalideBoneCache
                //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x268C ) = -1; //  GetMostRecentModelBoneCounter()
                *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x26A8 ) = -1; //GetReadableBones --> so we skip cache

                if ( data[ i ].simtime == player->simulation_time( ) ) //& ~BONE_USED_BY_ATTACHMENT {
                    bone_mask &= ~bone_used_by_attachment;

                data[ i ].simtime = player->simulation_time( );

                //std::memcpy ( backup_layers, g_local->get_anim_overlay ( 0 ), sizeof ( backup_layers ) );
                //std::memcpy ( backup_poses, g_local->pose_parameter().data(  ), sizeof ( backup_poses ) );

                const auto return_val = o_setup_bones ( ecx, bone_to_world_out, max_bones, bone_mask, curtime );

                interfaces::global_vars->curtime = old_cur_time;
                interfaces::global_vars->realtime = old_real_time;
                //interfaces::global_vars->frametime = old_frame_time;
                interfaces::global_vars->absoluteframetime = old_abs_frame_time;
                interfaces::global_vars->tickcount = old_tick_count;
                interfaces::global_vars->interpolation_amount = old_interp_amount;

                //if ( return_val && bone_to_world_out )
                //    memcpy ( bone_to_world_out, local_matrix, sizeof ( matrix3x4_t ) * max_bones );

                return return_val;
            }

            if ( !bone_to_world_out )
                return true;

            if ( networkable->is_dormant( ) )
                return false;

            bone_mask = bone_used_by_anything;

            if ( !g_features.animations.m_player_states.at ( player->ent_index( ) ).m_should_recalculate_matrix )
            {
                if ( !g_features.animations.m_player_states.at ( player->ent_index( ) ).m_got_matrix )
                    return false;

                memcpy ( bone_to_world_out, g_features.animations.m_player_states.at ( player->ent_index( ) ).m_matrix, sizeof ( matrix3x4_t ) * max_bones );

                return true;
            }
            data[ i ].got = false;

            auto state = player->get_base_player_anim_state( );

            if ( state )
                state->m_flLastClientSideAnimationUpdateTime -= 1;

            auto& last_animation_framecount = *reinterpret_cast< int* > ( uintptr_t ( player ) + 0xA68 );
            last_animation_framecount = 0;
            static auto offs_bone_mask = g_netvarsys.GetOffset ( xor_str ( "DT_BaseAnimating" ), xor_str ( "m_nForceBone" ) ) + 0x20;
            *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( player ) + offs_bone_mask ) = 0;
            *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x2698 ) = 0; // last bonemask
            *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x2EA ) = 0;
            *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x269C ) = 0; //prev_bone_mask
            bone_mask |= 0x200;
            player->effects( ) |= 8;
            //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0xA68 ) = interfaces::global_vars->framecount; //last_framecount
            //static auto sw = false;
            *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x26A8 ) = -1; //GetReadableBones --> so we skip cache
            //sw = !sw; // xd just for testing bc normaly GetReadableBones gets set within setupbones
            *reinterpret_cast< int* > ( reinterpret_cast< uintptr_t > ( renderable ) + 0x268C ) = -1; //  GetMostRecentModelBoneCounter()
            //*reinterpret_cast<int*> ( reinterpret_cast<uintptr_t> ( player ) + 0x268C ) = 0;

            *reinterpret_cast< float* > ( reinterpret_cast< uintptr_t > ( player ) + 2664 ) = 0;
            *reinterpret_cast< float* > ( reinterpret_cast< uintptr_t > ( player ) + 0x80 ) = 0;
            *reinterpret_cast< float* > ( reinterpret_cast< uintptr_t > ( player ) + 0x84 ) = 0;
            *reinterpret_cast< float* > ( reinterpret_cast< uintptr_t > ( player ) + 0x88 ) = 0;
            player->eflag( ) &= ~EFL_DIRTY_ABSTRANSFORM;

            player->set_abs_original ( player->vec_origin( ) );
            player->invalidate_bone_cache( );

            *reinterpret_cast< int* > ( reinterpret_cast< int > ( renderable ) + 236 ) |= 8; // IsNoInterpolationFrame
            const auto return_val = o_setup_bones ( ecx, data[ i ].matrix, 128, bone_mask, curtime );
            *reinterpret_cast< int* > ( reinterpret_cast< int > ( renderable ) + 236 ) &= ~8; // (1 << 3)

            if ( return_val )
            {
                data[ i ].simtime = curtime;
                data[ i ].got = true;
                data[ i ].pos = player->vec_origin( );

                //for ( int idx = 0; idx < max_bones; idx++ )
                //    g_math.matrix_copy ( data[i].matrix[idx], bone_to_world_out[idx] );
                memcpy ( bone_to_world_out, data[ i ].matrix, sizeof ( matrix3x4_t ) * max_bones );

                data[ i ].yaw = player->eye_angles( ).yaw;
            }

            return return_val;
        }
    }

    return o_setup_bones ( ecx, bone_to_world_out, max_bones, bone_mask, curtime );
}
Я его не трогал, не знаю что с ним не так
 
2. xqz чамсы так и должны работать
А как можно отдельно чамсы наложить на модельку оружия/на спине в руках у персонажа, например как в вт атачмент чамсы

Ну типо моделнейм нужен
 
1. У меня нормально работают десинк чамсы и фейклаг чамсы, но внезапно они могут пропасть и вместо них появляются чамсы которые смотрят туда куда и смотрю я, при этом оружие будет в руках у десинка, если же десинк чамсы отображаются нормально, то оружие будет просто висеть в воздухе
2. У меня чамсы xqz показываются через оружие. Как это можно поправить?
АнимеФикс, помним, верим, скорбим.
 
Назад
Сверху Снизу