From 7ccb819f867493f8ec202ea3b39c94c198c64584 Mon Sep 17 00:00:00 2001 From: JustSomePwner Date: Thu, 30 Aug 2018 14:01:54 +0200 Subject: first --- tf2/ctx.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 tf2/ctx.cpp (limited to 'tf2/ctx.cpp') diff --git a/tf2/ctx.cpp b/tf2/ctx.cpp new file mode 100644 index 0000000..37e192f --- /dev/null +++ b/tf2/ctx.cpp @@ -0,0 +1,97 @@ +#include "ctx.hpp" +#include "console.hpp" +#include "hooks.h" +#include "base_cheat.h" + +context::c_context g_ctx; + +NAMESPACE_REGION( context ) + +bool c_context::run_frame( ) { + m_local = cl.m_entlist( )->get_client_entity< c_base_player >( + cl.m_engine( )->GetLocalPlayer( ) ); + + return !!m_local; +} + + +//predicted servertime of player, use this for breaking lby etc +float c_context::pred_time( ) { + calculate_tickbase( ); + + return m_tickbase * cl.m_globals->interval_per_tick; +} + +//calculate tickbase depending on whether last ucmd was predicted +bool c_context::calculate_tickbase( ) { + if( !m_local ) { + return false; + } + + //get current tickbase + auto player_tickbase = m_local->get_tick_base( ); + + //disabled due to our engine pred being shit + m_tickbase = player_tickbase; + return true; + + if( m_snapshot.empty( ) ) { + m_tickbase = player_tickbase; + return false; + } + + //if cmd wasnt predicted increment tickbase + auto snap_cmd = &m_snapshot.front( ); + if( !snap_cmd->m_predicted ) { + if( !m_tickbase ) { + m_tickbase = player_tickbase; + } + + m_tickbase++; + snap_cmd->m_predicted = true; + } + else { + m_tickbase = player_tickbase; + } + + return true; +} + +bool c_context::precache_model( const char* model ) { + + auto cache_table = cl.m_string_table( )->FindTable( "modelprecache" ); + + if( !cache_table ) + return true; + + cl.m_modelinfo( )->FindOrLoadModel( model ); + + int string_index = cache_table->AddString( false, model ); + + if( string_index == -1 ) + return false; + + return true; +} + +//save snapshots of usercommands +bool c_context::create_snapshot( user_cmd_t* ucmd ) { + user_cmd_t ucmd_copy; + + while( m_snapshot.size( ) >= 64 ) { + m_snapshot.pop_back( ); + } + + if( !ucmd ) { + return false; + } + + memcpy( &ucmd_copy, + ucmd, + sizeof( ucmd_copy ) ); + + m_snapshot.push_front( ucmd_copy ); + return true; +} + +END_REGION \ No newline at end of file -- cgit v1.2.3