nominations_extended: Sort the nomination list by vote count
This commit is contained in:
parent
f3792affba
commit
aebf120544
@ -725,6 +725,26 @@ void AttemptAdminRemoveMap(int client, const char[] filter = "")
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int NominateListSortCmp(int index1, int index2, Handle array, Handle hndl)
|
||||||
|
{
|
||||||
|
char map1[PLATFORM_MAX_PATH];
|
||||||
|
char map2[PLATFORM_MAX_PATH];
|
||||||
|
GetArrayString(array, index1, map1, sizeof(map1));
|
||||||
|
GetArrayString(array, index2, map2, sizeof(map2));
|
||||||
|
|
||||||
|
int count1, count2;
|
||||||
|
|
||||||
|
StringMap sm = view_as<StringMap>(hndl);
|
||||||
|
|
||||||
|
sm.GetValue(map1, count1);
|
||||||
|
sm.GetValue(map2, count2);
|
||||||
|
|
||||||
|
if (count1 == count2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return count1 > count2 ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
bool PopulateNominateListMenu(Menu menu, int client, const char[] filter = "")
|
bool PopulateNominateListMenu(Menu menu, int client, const char[] filter = "")
|
||||||
{
|
{
|
||||||
int arraySize = ByteCountToCells(PLATFORM_MAX_PATH);
|
int arraySize = ByteCountToCells(PLATFORM_MAX_PATH);
|
||||||
@ -750,23 +770,29 @@ bool PopulateNominateListMenu(Menu menu, int client, const char[] filter = "")
|
|||||||
{
|
{
|
||||||
int nominate_count_for_particular_map = 0;
|
int nominate_count_for_particular_map = 0;
|
||||||
sm.GetValue(map, nominate_count_for_particular_map);
|
sm.GetValue(map, nominate_count_for_particular_map);
|
||||||
nominate_count_for_particular_map++;
|
sm.SetValue(map, nominate_count_for_particular_map + 1, true);
|
||||||
sm.SetValue(map, nominate_count_for_particular_map, true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(int i = 0; i < GetArraySize(MapList); i++)
|
|
||||||
|
StringMapSnapshot sm_snapshot = sm.Snapshot();
|
||||||
|
ArrayList SortedList = CreateArray(arraySize);
|
||||||
|
|
||||||
|
for(int i = 0; i < sm_snapshot.Length; i++)
|
||||||
{
|
{
|
||||||
GetArrayString(MapList, i, map, sizeof(map));
|
sm_snapshot.GetKey(i, map, sizeof(map));
|
||||||
|
SortedList.PushString(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
SortedList.SortCustom(NominateListSortCmp, sm);
|
||||||
|
|
||||||
|
for(int i = 0; i < GetArraySize(SortedList); i++)
|
||||||
|
{
|
||||||
|
GetArrayString(SortedList, i, map, sizeof(map));
|
||||||
|
|
||||||
if(!filter[0] || StrContains(map, filter, false) != -1)
|
if(!filter[0] || StrContains(map, filter, false) != -1)
|
||||||
{
|
{
|
||||||
int nominate_count_for_particular_map = 0;
|
int nominate_count_for_particular_map = 0;
|
||||||
sm.GetValue(map, nominate_count_for_particular_map);
|
sm.GetValue(map, nominate_count_for_particular_map);
|
||||||
if (nominate_count_for_particular_map == -1)
|
|
||||||
{
|
|
||||||
//we already displayed vote count for this particular map
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
strcopy(display, sizeof(display), map);
|
strcopy(display, sizeof(display), map);
|
||||||
|
|
||||||
bool VIPRestriction = GetMapVIPRestriction(map);
|
bool VIPRestriction = GetMapVIPRestriction(map);
|
||||||
@ -775,28 +801,23 @@ bool PopulateNominateListMenu(Menu menu, int client, const char[] filter = "")
|
|||||||
|
|
||||||
int owner = GetArrayCell(OwnerList, i);
|
int owner = GetArrayCell(OwnerList, i);
|
||||||
char spelling[8];
|
char spelling[8];
|
||||||
if (nominate_count_for_particular_map == 1)
|
|
||||||
{
|
|
||||||
Format(spelling, sizeof(spelling), "Vote");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
Format(spelling, sizeof(spelling), "Votes");
|
Format(spelling, sizeof(spelling), nominate_count_for_particular_map == 1 ? "Vote" : "Votes");
|
||||||
}
|
|
||||||
if(!owner)
|
if(!owner)
|
||||||
Format(display, sizeof(display), "%s (Admin)", display);
|
Format(display, sizeof(display), "%s (Admin)", display);
|
||||||
else
|
else
|
||||||
Format(display, sizeof(display), "%s (%i %s)", display, nominate_count_for_particular_map, spelling);
|
Format(display, sizeof(display), "%s (%i %s)", display, nominate_count_for_particular_map, spelling);
|
||||||
nominate_count_for_particular_map = -1;
|
|
||||||
sm.SetValue(map, nominate_count_for_particular_map, true);
|
|
||||||
AddMenuItem(menu, map, display);
|
AddMenuItem(menu, map, display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete MapList;
|
delete MapList;
|
||||||
delete OwnerList;
|
delete OwnerList;
|
||||||
|
delete SortedList;
|
||||||
delete sm;
|
delete sm;
|
||||||
|
delete sm_snapshot;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user