You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
4.0 KiB
191 lines
4.0 KiB
5 years ago
|
//========= 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;
|
||
|
}
|