summaryrefslogtreecommitdiff
path: root/tf2/con_fn.hpp
diff options
context:
space:
mode:
authorboris <wzn@moneybot.cc>2018-11-28 16:00:02 +1300
committerboris <wzn@moneybot.cc>2018-11-28 16:00:02 +1300
commit3d412a4b30a9f7c7f51ea6562e694315948bd3da (patch)
tree26d67dfd1f3e5fd12903ad13e85d0cb8bcf8f21c /tf2/con_fn.hpp
parente4729e4393d90271a3814c7a79950a660c48325a (diff)
cleaned up
in short, the cheat and loader are now separate solutions. unused stuff was moved into the legacy solution in case anyone wants to compile it or whatever. i can change this back if you want to. also, i configured the loader to compile in x64, and have separate build types for linux and win64
Diffstat (limited to 'tf2/con_fn.hpp')
-rw-r--r--tf2/con_fn.hpp172
1 files changed, 0 insertions, 172 deletions
diff --git a/tf2/con_fn.hpp b/tf2/con_fn.hpp
deleted file mode 100644
index 3c06e9b..0000000
--- a/tf2/con_fn.hpp
+++ /dev/null
@@ -1,172 +0,0 @@
-#pragma once
-#include <functional>
-
-#include "simple_settings.h"
-
-//KEEP THIS UP TO DATE!!
-enum ConFnVarType_t {
- TYPE_NULL = 0,
- TYPE_FLOAT = 'F',
- TYPE_STRING = 'S',
- TYPE_INTEGER = 'D',
- TYPE_HEX = 'X'
-};
-
-class con_fn_base {
-public:
- virtual bool execute( const char* str ) = 0;
- virtual const char* get_syntax( ) = 0;
- virtual hash_t get_hash( ) = 0;
-};
-
-class con_fn : public con_fn_base {
-public:
- con_fn( hash_t hash, std::function< void __cdecl( const char*, const char* ) > function, const char* syntax ) {
- m_hash = hash;
- m_function = function;
- strcpy_s< 64 >( m_syntax, syntax );
- for( size_t i{ }; i < strlen( m_syntax ); ++i ) {
- if( m_syntax[ i ] == '%' ) {
- m_args++;
- }
- }
- }
-
- static ConFnVarType_t get_var_type( size_t arg, const char* syntax ) {
- size_t cur_arg = 0;
- for( size_t i{ }; i < strlen( syntax ); ++i ) {
- if( syntax[ i ] == '%' ) {
- if( cur_arg++ == arg ) {
- return ( ConFnVarType_t )( syntax[ i + 1 ] );
- }
- }
- }
-
- return TYPE_NULL;
- }
-
- template < typename t >
- static t get_arg( const char* str, size_t arg_index, const char* syntax ) {
- auto arg_type = get_var_type( arg_index, syntax );
-
- size_t cur_arg = 0;
- for( size_t i{ }; i < strlen( str ); ++i ) {
- if( str[ i ] == ' ' ) {
- if( cur_arg++ == arg_index ) {
- size_t start = i + 1;
- size_t end = strlen( str );
- for( size_t i2 = start; i2 < strlen( str ); ++i2 ) {
- if( str[ i2 ] == ' ' ) {
- end = i2;
- break;
- }
- }
-
- std::string str( str + start, end - start );
-
- char* end_ptr = ( char* )str.c_str( ) + end;
- if constexpr( std::is_integral_v< t > ) {
- auto radix = get_var_type( arg_index, syntax ) == TYPE_HEX ? 16 : 10;
- return std::strtol( str.c_str( ), &end_ptr, radix );
- }
-
- if constexpr( std::is_floating_point_v< t > ) {
- return std::strtof( str.c_str( ), &end_ptr );
- }
-
- return ( t )str.c_str( );
- }
- }
- }
-
- return t{ };
- }
-
- virtual const char* get_syntax( ) override {
- return m_syntax;
- }
-
- virtual hash_t get_hash( ) override {
- return m_hash;
- }
-
- ConFnVarType_t get_var_type( size_t arg ) {
- size_t cur_arg = 0;
- for( size_t i{ }; i < strlen( m_syntax ); ++i ) {
- if( m_syntax[ i ] == '%' ) {
- if( cur_arg++ == arg ) {
- return ( ConFnVarType_t )( m_syntax[ i + 1 ] );
- }
- }
- }
-
- return TYPE_NULL;
- }
-
- //returns false on failed execution
- virtual bool execute( const char* str ) override {
- size_t arg_count{ };
- for( size_t i{ }; i < strlen( str ); ++i ) {
- if( str[ i ] == ' ' ) {
- arg_count++;
- }
- }
-
- if( arg_count != m_args ) {
- return false;
- }
-
- std::string pass_str( " " );
-
- size_t cur_arg = 0;
- for( size_t i{ }; i < strlen( str ); ++i ) {
- if( str[ i ] == ' ' ) {
- size_t end = strlen( str );
- for( size_t i2 = i + 2; i2 < strlen( str ); ++i2 ) {
- if( str[ i2 ] == ' ' ) {
- end = i2;
- }
- }
-
- char* end_ptr = ( char* )( str + i + end );
- switch( get_var_type( cur_arg ) ) {
- case TYPE_FLOAT: {
- pass_str += std::to_string( strtof( str + i, &end_ptr ) );
- break;
- }
- case TYPE_INTEGER: {
- pass_str += std::to_string( strtol( str + i, &end_ptr, 10 ) );
- break;
- }
- case TYPE_HEX: {
- char buf[ 10 ];
- sprintf_s< 10 >( buf, "%08x", strtol( str + i, &end_ptr, 16 ) );
- pass_str += buf;
- break;
- }
- case TYPE_STRING: {
- std::string add_str( str + i, end - i );
- pass_str += add_str;
- break;
- }
- default:
- return false;
- }
-
- if( end != strlen( str ) ) {
- pass_str += ' ';
- }
- ++cur_arg;
- }
- }
-
- m_function( pass_str.c_str( ), m_syntax );
- return true;
- }
-
-private:
- hash_t m_hash{ };
- size_t m_args{ };
- char m_syntax[ 64 ]{ };
- std::function< void( __cdecl )( const char*, const char* ) > m_function{ };
-}; \ No newline at end of file