summaryrefslogtreecommitdiff
path: root/cheat/gmod/context.cpp
blob: 752585eee91182dab61090e89bef80a390fb8034 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "context.hpp"
#include "console.hpp"
#include "hooks.hpp"
#include "base_cheat.hpp"

context::c_context g_ctx;

NAMESPACE_REGION( context )

bool c_context::run_frame( ) {
	m_local = g_gmod.m_entlist( )->GetClientEntity< >(
		g_gmod.m_engine( )->GetLocalPlayer( ) );

	return !!m_local;
}
//
void c_context::on_cmove_end( user_cmd_t* cmd ) {
	auto send = g_cheat.m_lagmgr.get_state( );

	if( send ) {
		m_thirdperson_angle = m_last_realangle;
		m_last_fakeangle = cmd->m_viewangles;
		m_last_origin = m_local->m_vecOrigin( );
	}
	else {
		m_last_realangle = cmd->m_viewangles;
		m_last_realangle.x = m_last_fakeangle.x;
	}

	m_thirdperson_angle.x = cmd->m_viewangles.x;
	if( g_cheat.m_lagmgr.get_sent( ) > 1 ) {
		m_thirdperson_angle.y = m_last_fakeangle.y;
	}
	*get_last_cmd( ) = *cmd;
}
//
//void c_context::reset_shot_queue( ) {
//	m_last_shot = m_last_shot_ack = 0;
//	m_shot_data = { };
//}
//
////predicted servertime of player, use this for breaking lby etc
//float c_context::pred_time( ) {
//	calculate_tickbase( );
//
//	return m_tickbase * g_gmod.m_globals->m_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->m_nTickBase( );
//
//	//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;
//}
//
//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