summaryrefslogtreecommitdiff
path: root/cheat/gmod/playerlist.cpp
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 /cheat/gmod/playerlist.cpp
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 'cheat/gmod/playerlist.cpp')
-rw-r--r--cheat/gmod/playerlist.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/cheat/gmod/playerlist.cpp b/cheat/gmod/playerlist.cpp
new file mode 100644
index 0000000..10f7d82
--- /dev/null
+++ b/cheat/gmod/playerlist.cpp
@@ -0,0 +1,114 @@
+#include "playerlist.hpp"
+
+/* something in here caused the file size to increase alot lol */
+
+namespace features
+{
+
+ bool c_player_list::is_friend( const std::string& guid ) {
+ return m_friends[ guid ]; // if a guid is not there, then it is automatically set to false
+ }
+
+ // handles players and drawing.
+ void c_player_list::operator()( ) {
+ if( g_gmod.m_engine( )->IsInGame( ) ) {
+ g_gmod.m_engine( )->GetScreenSize( m_scrw, m_scrh );
+
+ m_x = 50;
+ m_y = 50;
+ m_w = m_scrw - 100;
+ m_h = m_scrh - 100;
+
+ m_tabwidth = m_w / 3;
+
+ m_tab = 0;
+ m_items.clear( );
+
+ player_info_t info;
+
+ for( int i{ 1 }; i <= g_gmod.m_globals->m_maxclients; ++i ) {
+ if( i == g_gmod.m_engine( )->GetLocalPlayer( ) )
+ continue;
+
+ auto player = g_gmod.m_entlist( )->GetClientEntity< >( i );
+ if( !player )
+ continue;
+
+ if( !g_gmod.m_engine( )->GetPlayerInfo( i, &info ) )
+ continue;
+
+ m_items.push_back( playeritem_t( info.name, &m_friends[ info.m_steamid ] ) );
+ }
+
+ // sort first character alphabetically.
+ std::sort( m_items.begin( ), m_items.end( ), []( const auto& lhs, const auto& rhs ) {
+ return lhs.m_name[ 0 ] < rhs.m_name[ 0 ];
+ } );
+
+
+ if( m_open ) {
+ int i = 0;
+ int j = 0;
+
+ // get d3d font info.
+ TEXTMETRICA metric{ };
+ d3d::fonts.f_esp_small->GetTextMetricsA( &metric );
+
+ // construct size of list and how much to draw.
+ const int font_size = metric.tmHeight;
+ const int list_height = m_items.size( ) * font_size;
+ const int tabs_to_draw = std::min< int >( ( int )std::ceil( ( float )list_height / ( float )m_h ), 3 ); // template arg to stop the min define taking action
+
+ // pixel padding.
+ const int m_pad_y = 2;
+ const int m_pad_x = 5;
+
+ // draw blue background.
+ g_d3d.draw_filled_rect( ui::ui_get_bg_col( ), m_x, m_y, m_tabwidth * tabs_to_draw, m_h );
+
+ // for each player add to list.
+ for( const auto& item : m_items ) {
+ int str_pos_x{ };
+ int str_pos_y = m_y + font_size * i + m_pad_y;
+
+ if( str_pos_y > m_y + m_h ) {
+ i = 0;
+ m_tab++;
+
+ str_pos_y = m_y + font_size * i + m_pad_y;
+ }
+
+ str_pos_x = m_x + m_tabwidth * m_tab + m_pad_x;
+
+ m_tab = std::min< int >( m_tab, tabs_to_draw );
+
+ // draw rectangle per element.
+ g_d3d.draw_rect( clr_t( 0, 0, 0 ), m_x + m_tabwidth * m_tab + 1, m_y + font_size * i, m_tabwidth - 2, font_size );
+
+ // if selected index is this current index, do special stuff.
+ if( m_index == j ) {
+ g_d3d.draw_filled_rect( clr_t( 200, 200, 200 ), m_x + m_tabwidth * m_tab + 1, m_y + font_size * i + 1, m_tabwidth - 1, font_size - 1 );
+
+ g_d3d.draw_text< ALIGN_LEFT >( d3d::fonts.f_esp_small, clr_t( 255, 255, 255 ), str_pos_x + 10, str_pos_y - 2 , D3DFONTFLAG_DROPSHADOW, item.m_name );
+ g_d3d.draw_text< ALIGN_RIGHT >( d3d::fonts.f_esp_small, clr_t( 255, 255, 255 ), m_x + m_tabwidth * ( m_tab + 1 ) - 5, str_pos_y - 2, D3DFONTFLAG_DROPSHADOW, *item.m_friend ? "true" : "false" );
+
+ }
+ else {
+ g_d3d.draw_text< ALIGN_LEFT >( d3d::fonts.f_esp_small, clr_t( 255, 255, 255 ), str_pos_x, str_pos_y - 2, D3DFONTFLAG_DROPSHADOW, item.m_name );
+ g_d3d.draw_text< ALIGN_RIGHT >( d3d::fonts.f_esp_small, clr_t( 255, 255, 255 ), m_x + m_tabwidth * ( m_tab + 1 ) - 5, str_pos_y - 2, D3DFONTFLAG_DROPSHADOW, *item.m_friend ? "true" : "false" );
+ }
+
+ i++;
+ j++;
+ }
+
+
+ // draw pink outlines per tab.
+ for( uint8_t k = 0; k < ( uint8_t )tabs_to_draw; k++ ) {
+ g_d3d.draw_rect( ui::ui_get_accent_col( ), m_x + m_tabwidth * k, m_y, m_tabwidth, m_h );
+ }
+
+ }
+ }
+ }
+} \ No newline at end of file