summaryrefslogtreecommitdiff
path: root/tracker/AdminServer/PlayerListCompare.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/AdminServer/PlayerListCompare.cpp')
-rw-r--r--tracker/AdminServer/PlayerListCompare.cpp191
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