//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ //============================================================================= #include #include #include 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; }