diff options
Diffstat (limited to 'tracker/AdminServer/PlayerListCompare.cpp')
| -rw-r--r-- | tracker/AdminServer/PlayerListCompare.cpp | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/tracker/AdminServer/PlayerListCompare.cpp b/tracker/AdminServer/PlayerListCompare.cpp new file mode 100644 index 0000000..27d1d1d --- /dev/null +++ b/tracker/AdminServer/PlayerListCompare.cpp @@ -0,0 +1,191 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include <stdio.h> + +#include <KeyValues.h> +#include <vgui_controls/ListPanel.h> + + +int __cdecl PlayerNameCompare(const KeyValues *elem1, const KeyValues *elem2 ) +{ + + if ( !elem1 || !elem2 ) // No meaningful comparison + { + return 0; + } + +/* const char *name1 = elem1->GetString("name"); + const char *name2 = elem2->GetString("name"); + + return stricmp(name1,name2); + */ + return 0; +} + + +//----------------------------------------------------------------------------- +// Purpose: Ping comparison function +//----------------------------------------------------------------------------- +int __cdecl PlayerPingCompare(const KeyValues *elem1, const KeyValues *elem2 ) +{ + vgui::ListPanelItem *p1, *p2; + p1 = *(vgui::ListPanelItem **)elem1; + p2 = *(vgui::ListPanelItem **)elem2; + + if ( !p1 || !p2 ) // No meaningful comparison + { + return 0; + } + + int ping1 = p1->kv->GetInt("ping"); + int ping2 = p2->kv->GetInt("ping"); + + if ( ping1 < ping2 ) + return -1; + else if ( ping1 > ping2 ) + return 1; + + return 0; +} + + +//----------------------------------------------------------------------------- +// Purpose: Ping comparison function +//----------------------------------------------------------------------------- +int __cdecl PlayerAuthCompare(const void *elem1, const void *elem2 ) +{ + vgui::ListPanelItem *p1, *p2; + p1 = *(vgui::ListPanelItem **)elem1; + p2 = *(vgui::ListPanelItem **)elem2; + + if ( !p1 || !p2 ) // No meaningful comparison + { + return 0; + } + + const char *authid1 = p1->kv->GetString("authid"); + const char *authid2 = p2->kv->GetString("authid"); + + return stricmp(authid1,authid2); +} + + + + +//----------------------------------------------------------------------------- +// Purpose: Loss comparison function +//----------------------------------------------------------------------------- +int __cdecl PlayerLossCompare(const void *elem1, const void *elem2 ) +{ + vgui::ListPanelItem *p1, *p2; + p1 = *(vgui::ListPanelItem **)elem1; + p2 = *(vgui::ListPanelItem **)elem2; + + if ( !p1 || !p2 ) // No meaningful comparison + { + return 0; + } + + int loss1 = p1->kv->GetInt("loss"); + int loss2 = p2->kv->GetInt("loss"); + + + if ( loss1 < loss2 ) + return -1; + else if ( loss1 > loss2 ) + return 1; + + return 0; +} + +//----------------------------------------------------------------------------- +// Purpose: Frags comparison function +//----------------------------------------------------------------------------- +int __cdecl PlayerFragsCompare(const void *elem1, const void *elem2 ) +{ + vgui::ListPanelItem *p1, *p2; + p1 = *(vgui::ListPanelItem **)elem1; + p2 = *(vgui::ListPanelItem **)elem2; + + if ( !p1 || !p2 ) // No meaningful comparison + { + return 0; + } + + int frags1 = p1->kv->GetInt("frags"); + int frags2 = p2->kv->GetInt("frags"); + + + if ( frags1 < frags2 ) + return -1; + else if ( frags1 > frags2 ) + return 1; + + return 0; +} + +//----------------------------------------------------------------------------- +// Purpose: Player connection time comparison function +//----------------------------------------------------------------------------- +int __cdecl PlayerTimeCompare( vgui::ListPanel *pPanel, const vgui::ListPanelItem &item1, const vgui::ListPanelItem &item2 ) +{ + int h1 = 0, h2 = 0, m1 = 0, m2 = 0, s1 = 0, s2 = 0; + float t1=0,t2=0; + + const char *time1 = item1.kv->GetString("time"); + const char *time2 = item2.kv->GetString("time"); + + int numFields1 = sscanf(time1,"%i:%i:%i",&h1,&m1,&s1); + int numFields2 = sscanf(time2,"%i:%i:%i",&h2,&m2,&s2); + + switch ( numFields1 ) + { + case 2: + s1 = m1; + m1 = h1; + h1 = 0; + break; + case 1: + s1 = h1; + m1 = 0; + h1 = 0; + break; + case 0: + s1 = 0; + m1 = 0; + h1 = 0; + } + + switch ( numFields2 ) + { + case 2: + s2 = m2; + m2 = h2; + h2 = 0; + break; + case 1: + s2 = h2; + m2 = 0; + h2 = 0; + break; + case 0: + s2 = 0; + m2 = 0; + h2 = 0; + } + + t1=(float)(h1*3600+m1*60+s1); + t2=(float)(h2*3600+m2*60+s2); + + if ( t1 < t2 ) + return -1; + else if ( t1 > t2 ) + return 1; + + return 0; +}
\ No newline at end of file |