19.06.2016, 11:12
http://forum.sa-mp.com/showpost.php?...2&postcount=44
Код:
#include <a_samp> #define DIALOG_SCORE (2016) #define MAX_SCORE (10) enum rankingEnum { player_Score, player_ID } stock GetPlayerHighestScores(array[][rankingEnum], left, right) { new tempLeft = left, tempRight = right, pivot = array[(left + right) / 2][player_Score], tempVar ; while(tempLeft <= tempRight) { while(array[tempLeft][player_Score] > pivot) tempLeft++; while(array[tempRight][player_Score] < pivot) tempRight--; if(tempLeft <= tempRight) { tempVar = array[tempLeft][player_Score], array[tempLeft][player_Score] = array[tempRight][player_Score], array[tempRight][player_Score] = tempVar; tempVar = array[tempLeft][player_ID], array[tempLeft][player_ID] = array[tempRight][player_ID], array[tempRight][player_ID] = tempVar; tempLeft++, tempRight--; } } if(left < tempRight) GetPlayerHighestScores(array, left, tempRight); if(tempLeft < right) GetPlayerHighestScores(array, tempLeft, right); } public OnPlayerCommandText(playerid, cmdtext[]) { if(!strcmp(cmdtext, "/topScore", true)) { new playerScores[MAX_PLAYERS][rankingEnum], index ; for(new i; i != MAX_PLAYERS; ++i) { if(IsPlayerConnected(i) && !IsPlayerNPC(i)) { playerScores[index][player_Score] = GetPlayerScore(i); playerScores[index++][player_ID] = i; } } GetPlayerHighestScores(playerScores, 0, index); new score_Text[256] = "\n", player_Name[20] ; for(new i; i < MAX_SCORE; ++i) { if(i < index) { GetPlayerName(playerScores[i][player_ID], player_Name, sizeof(player_Name)); format(score_Text, sizeof(score_Text), "%s\n %d. %s - \t%d", score_Text, i + 1, player_Name, playerScores[i][player_Score]); } else format(score_Text, sizeof(score_Text), "%s\n %d. N/A", score_Text, i + 1); } strins(score_Text, "Nicks\tScore", 0); ShowPlayerDialog(playerid, DIALOG_SCORE, DIALOG_STYLE_TABLIST_HEADERS, "ARENA N1", score_Text, "ok", ""); return 1; } return 0; }