Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Логический список полученный из массива игроков. (Не для "любителей"...)
Логический список полученный из массива игроков.
Geny Дата: Вторник, 21.01.2014, 14:33:44 | Сообщение # 1
Сообщений: 110
Репутация: 0 [ +/- ]
Есть массив игроков:
new O_Player[MAXPLAYERS+1] //в него записаны количество очков каждого игрока.
new Cheker_O_Player[4];//так называемая точка "опоры"...
Нужно организовать вывод на экран по средствам PrintHintTextToAll, так чтобы:
1)Писало ник игрока и рядом кол-во очков.
2)При чем так чтобы у кого меньше очков были внизу а у кого больше очков были выше..
3)Выводит только первых 4 лидеров (у кого больше очков).

Прмерно такой вид:
Код
Рейтинг очков
1.Ку-Ку [8]
2.ПУК [7]
3.Ложка [3]
4.Куколка [1]


Обязательно учесть что может быить и такой расклад..
Прмерно такой вид:
Код
Рейтинг очков
1.Ку-Ку [8]
2.ПУК [8]
3.Ложка [8]
4.Куколка [7]


Вот мой код... но сейчас мысли вообще нет.. уже волосы на голове рву (((

Код
   new String:format[4][80] = {"","","",""};
     for (new i = 1; i <= MaxClients; i++)
    {
     if (O_Player[i] > 0 && IsPlayerInGame(i))
     {
      if (O_Player[i] > Cheker_O_Player[0])
      {
       Cheker_O_Player[0] = O_Player[i];
       Format(format[0], 80, "%N [%d]", i, O_Player[i]);
      }
      else if (O_Player[i] > Cheker_O_Player[1])
      {
       Cheker_O_Player[1] = O_Player[i];
       Format(format[1], 80, "%N [%d]", i, O_Player[i]);
      }
      else if (O_Player[i] > Cheker_O_Player[2])
      {
       Cheker_O_Player[2] = O_Player[i];
       Format(format[2], 80, "%N [%d]", i, O_Player[i]);
      }
      else if (O_Player[i] > Cheker_O_Player[3])
      {
       Cheker_O_Player[3] = O_Player[i];
       Format(format[3], 80, "%N [%d]", i, O_Player[i]);
      }
     }
    }
     PrintHintTextToAll("Рейтинг очков:\n%s%s\n%s%s\n%s%s\n%s%s",
     (Cheker_O_Player[0] == 0)?"":"1.",
     format[0],   
     (Cheker_O_Player[1] == 0)?"":"2.",   
     format[1],
     (Cheker_O_Player[2] == 0)?"":"3.",
     format[2],
     (Cheker_O_Player[3] == 0)?"":"4.",
     format[3]);


Сообщение отредактировал Geny - Вторник, 21.01.2014, 14:34:42
 
TEIN Дата: Вторник, 21.01.2014, 15:44:41 | Сообщение # 2
Сообщений: 563
Репутация: 78 [ +/- ]
намудрил, не знаю как оптимизировать, да и, если честно, не знаю даже, работает ли
Код
#include <sourcemod>

#define MAXSIZE 256

new Handle:CA_ArrayName = INVALID_HANDLE,
        Handle:CA_ArrayPoint = INVALID_HANDLE;

new Client_Point[MAXPLAYERS + 1] = {0, ...};

public OnPluginStart()
{
        CA_ArrayName = CreateArray(MAXSIZE);
        CA_ArrayPoint = CreateArray(MAXSIZE);
}

public OnMapStart()
{
        CreateTimer(1.0, CT_Timer, INVALID_HANDLE, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action:CT_Timer(Handle:timer)
{
        decl String:buffer[MAXSIZE];
        for (new i = 1; i <= MaxClients; i++)
        {
              if (IsClientInGame(i))
              {
                    Format(buffer, sizeof(buffer), "%N : %d", i, Client_Point[i]);
                    PushArrayString(CA_ArrayName, buffer);
                    PushArrayCell(CA_ArrayPoint, Client_Point[i]);
              }
        }

        new size = GetArraySize(CA_ArrayName);
        if (size > 0)
        {
              SortADTArray(CA_ArrayPoint, Sort_Descending, Sort_Integer);
        }
        else
        {
              return;
        }

        new bool:check = false;

        decl String:value[25], String:format[MAXSIZE];
        for (new i = 0; i < size; i++)
        {
              if (i < 4)
              {
                    for (new j = 0; j < size; j++)
                    {
                          GetArrayString(CA_ArrayName, j, buffer, sizeof(buffer));

                          FormatEx(value, sizeof(value), ": %d", GetArrayCell(CA_ArrayPoint, i));
                          if (StrContains(buffer, value) != -1)
                          {
                    Format(format, sizeof(format), "%s%s", check ? "\n" : "", buffer);
                    check = true;
                          }
                    }
              }
              else
              {
                    break;
              }
        }

        PrintHintTextToAll(format);
}


Сообщение отредактировал TEIN - Вторник, 21.01.2014, 15:45:19
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Логический список полученный из массива игроков. (Не для "любителей"...)
  • Страница 1 из 1
  • 1
Поиск: