BRICS

TopLists

Jun 15th, 2012
605
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include /*BRICS*/<a_samp>
  2. #include <filemanager>
  3. new Top_Player[MAX_PLAYERS] = 3;
  4. new players_Data[MAX_PLAYERS][2], tempString[MAX_PLAYERS][128], tempVar[MAX_PLAYERS];
  5. #define TOP_CMD "/topmenu" //Команда вызова топ-меню!
  6. #define TOP_SCORE_GEN "» %d. Игрок: %s [id: %d] - Фраги: %d\n"
  7. #define TOP_MONEY_GEN "» %d. Игрок: %s [id: %d] - Деньги: %d\n"
  8. #define TOP_WANTED_GEN "» %d. Игрок: %s [id: %d] - Уровень розыска: %d\n"
  9. #define TOP_PING_GEN "» %d. Игрок: %s [id: %d] - Пинг: %d\n"
  10. #define TOP_DISTANCE_GEN "» %d. Игрок: %s [id: %d] - Расстояние: %d метров\n"
  11. #define TOP_TITLE "» Топ %d игроков по %s:"
  12. #define TOP_LIST_ELEMENT_SCORE "фрагам"
  13. #define TOP_LIST_ELEMENT_MONEY "деньгам"
  14. #define TOP_LIST_ELEMENT_WL "уровню розыска"
  15. #define TOP_LIST_ELEMENT_PING "пингу"
  16. #define TOP_LIST_ELEMENT_DIS "расстоянию от меня"
  17. #define KEY_BACK "Назад"
  18. #define KEY_SELECT "Выбрать"
  19. #define KEY_EXIT "Выход"
  20. #define KEY_INPUT "Ввод"
  21. #define GENERAL_DIALOG_ID 300
  22. #define GENERAL_DIALOG_TITLE "Меню списков"
  23. #define GENERAL_DIALOG_CONTENT "Игроков в топ: %d\nТоп %d игроков по фрагам\nТоп %d игроков по деньгам\nТоп %d игроков по уровням розыска\nТоп %d игроков по пингу\nТоп %d игроков по расстоянию от меня"
  24. #define  /*BRICS*/DIALOG_TOP_ID GENERAL_DIALOG_ID+1
  25. #define  /*BRICS*/VALUE_CHANGED "Значение вывода игроков было изменено на %d"
  26. #define  /*BRICS*/DIALOG_GHANGE_TOP_ID GENERAL_DIALOG_ID+2
  27. #define NOT_FINDED "Никого не найдено"
  28. #define DIALOG_CHANGE_ID_TITLE "Смена вывода игоков в топ"
  29. #define DIALOG_CHANGE_ID_CONTENT "Введите новое число вывода игроков в топ"
  30. #define DIALOG_CHANGE_ID_CONTENT_ERROR_NOT_LITLE_ONE "Ошибка: Число не должно быть меньше 1 и не больше максимума игроков!\nВведите новое число вывода игроков в топ"
  31. public OnFilterScriptInit()
  32. {
  33.     print("\n   Скрипт [Top Lists] от BRICS'a (aka Nеtflаshmаn) был загружен\n");
  34.     return 1;
  35. }
  36.  
  37.  
  38.  
  39.  
  40. stock  /*BRICS*/TopCycle(playerid)
  41. {
  42.    for(new i = 0,j = 0; i < tempVar[playerid]; ++i)
  43.    {
  44.            j = players_Data[i][0];
  45.  
  46.            for(new k = i - 1; k > -1; --k)
  47.            {
  48.                if(j > players_Data[k][0])//спасибо чуваку с офф форума - RyDER за это
  49.                {
  50.                    players_Data[k][0] ^= players_Data[k + 1][0], players_Data[k + 1][0] ^= players_Data[k][0], players_Data[k][0] ^= players_Data[k + 1][0];
  51.                    players_Data[k][1] ^= players_Data[k + 1][1], players_Data[k + 1][1] ^= players_Data[k][1], players_Data[k][1] ^= players_Data[k + 1][1];
  52.                }
  53.            }
  54.    }
  55.    return 1;
  56. }
  57. stock  /*BRICS*/Bar(barid,playerid,top)
  58. {
  59.        new nametop[64];
  60.        new block[128];
  61.        new big_buff[512];
  62.        switch(barid)
  63.        {
  64.            case 1: block = TOP_SCORE_GEN;
  65.            case 2: block = TOP_MONEY_GEN;
  66.            case 3: block = TOP_WANTED_GEN;
  67.            case 4: block = TOP_PING_GEN;
  68.            case 5: block = TOP_DISTANCE_GEN;
  69.        }
  70.        
  71.        for(new i = 0; i < top; ++i)
  72.        {
  73.            if(tempVar[playerid] <= i)break;
  74.            GetPlayerName(players_Data[i][1], tempString[playerid], MAX_PLAYER_NAME);
  75.            format(tempString[playerid], 128, block, i+1, tempString[playerid], players_Data[i][1], players_Data[i][0]);
  76.            strcat(big_buff,tempString[playerid],sizeof(big_buff));
  77.        }
  78.        switch(barid)
  79.        {
  80.            case 1: nametop = TOP_LIST_ELEMENT_SCORE;
  81.            case 2: nametop = TOP_LIST_ELEMENT_MONEY;
  82.            case 3: nametop = TOP_LIST_ELEMENT_WL;
  83.            case 4: nametop = TOP_LIST_ELEMENT_PING;
  84.            case 5: nametop = TOP_LIST_ELEMENT_DIS;
  85.        }
  86.        format(tempString[playerid], 129, TOP_TITLE, top, nametop);
  87.        if(tempVar[playerid] == 0)big_buff = NOT_FINDED;
  88.        ShowPlayerDialog(playerid,DIALOG_TOP_ID,DIALOG_STYLE_MSGBOX,tempString[playerid],big_buff,KEY_BACK,"");
  89.        return 1;
  90. }
  91.  
  92. stock OpenGen(playerid,key[],key2[],str[]=GENERAL_DIALOG_TITLE)
  93. {
  94.      new megabuff[320];
  95.      format(megabuff,sizeof(megabuff),GENERAL_DIALOG_CONTENT,Top_Player[playerid],Top_Player[playerid],Top_Player[playerid],Top_Player[playerid],Top_Player[playerid],Top_Player[playerid]);
  96.      ShowPlayerDialog(playerid,GENERAL_DIALOG_ID,DIALOG_STYLE_LIST,str,megabuff,key,key2);
  97.      return 1;
  98. }
  99.  
  100. public OnPlayerCommandText(playerid, cmdtext[])
  101. {
  102.     if(!strcmp(cmdtext, TOP_CMD, true))return OpenGen(playerid,KEY_SELECT,KEY_EXIT);
  103.     return 0;
  104. }
  105. stock GetTop(list,playerid,top)
  106. {
  107.        tempVar[playerid] = 0;
  108.        for(new i = 0, j = GetMaxPlayers(); i < j; ++i)
  109.        {
  110.                if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
  111.                if(list == 5 && i == playerid)continue;
  112.                switch(list)
  113.                {
  114.                   case 1: players_Data[tempVar[playerid]][0] = GetPlayerScore(i);
  115.                   case 2: players_Data[tempVar[playerid]][0] = GetPlayerMoney(i);
  116.                   case 3: players_Data[tempVar[playerid]][0] = GetPlayerWantedLevel(i);
  117.                   case 4: players_Data[tempVar[playerid]][0] = GetPlayerPing(i);
  118.                   case 5: {new Float: X,Float: Y,Float: Z;GetPlayerPos(playerid,X,Y,Z);players_Data[tempVar[playerid]][0] = floatround(GetPlayerDistanceFromPoint(i,X,Y,Z));}
  119.                }
  120.                players_Data[tempVar[playerid]++][1] = i;
  121.        }
  122.        TopCycle(playerid);//запустить основной цикл
  123.        Bar(list,playerid,top);
  124.        return 1;
  125. }
  126. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  127. {
  128.     if(dialogid == DIALOG_TOP_ID)return OpenGen(playerid,KEY_SELECT,KEY_EXIT);
  129.     if(dialogid == GENERAL_DIALOG_ID)
  130.     {
  131.         if(!response)return 1;
  132.         if(listitem != 0)return GetTop(listitem,playerid,Top_Player[playerid]);
  133.         ShowPlayerDialog(playerid,DIALOG_GHANGE_TOP_ID,DIALOG_STYLE_INPUT,DIALOG_CHANGE_ID_TITLE,DIALOG_CHANGE_ID_CONTENT,KEY_INPUT,KEY_BACK);
  134.     }
  135.     if(dialogid == DIALOG_GHANGE_TOP_ID)
  136.     {
  137.         if(!response)return OpenGen(playerid,KEY_SELECT,KEY_EXIT);
  138.         if(!isNumeric(inputtext))return ShowPlayerDialog(playerid,DIALOG_GHANGE_TOP_ID,DIALOG_STYLE_INPUT,DIALOG_CHANGE_ID_TITLE,DIALOG_CHANGE_ID_CONTENT,KEY_INPUT,KEY_BACK);
  139.         if(strval(inputtext) < 1 || strval(inputtext) > GetMaxPlayers())return ShowPlayerDialog(playerid,DIALOG_GHANGE_TOP_ID,DIALOG_STYLE_INPUT,DIALOG_CHANGE_ID_TITLE,DIALOG_CHANGE_ID_CONTENT_ERROR_NOT_LITLE_ONE,KEY_INPUT,KEY_BACK);
  140.         Top_Player[playerid] = strval(inputtext);
  141.         format(tempString[playerid],64,VALUE_CHANGED,strval(inputtext));
  142.         OpenGen(playerid,KEY_SELECT,KEY_EXIT,tempString[playerid]);
  143.     }
  144.     return 1;
  145. }
  146. stock isNumeric(const string[]) {
  147.     new length=strlen(string);
  148.     if (length==0) return false;
  149.     for (new i = 0; i < length; i++) {
  150.         if (
  151.         (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
  152.         || (string[i]=='-' && i!=0)                                             // A '-' but not at first.
  153.         || (string[i]=='+' && i!=0)                                             // A '+' but not at first.
  154.         ) return false;
  155.     }
  156.     if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
  157.     return true;
  158. }
RAW Paste Data