PDA

Просмотр полной версии : [Вопрос] Оптимизация небольшого кода



Avenger
22.05.2016, 13:44
Всем привет.
Каким образом возможно оптимизировать следующий код:

if(strcmp(cmd, "/leaders3", true) == 0)
{
string[0] = 0;
for(new i=0;i<MAX_PLAYERS;i++)
{
new fname[1024];
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
if(PlayerInfo[i][pLeader] <= 0) continue;
{
if(PlayerInfo[i][pLeader] == 1) { fname = "FBI"; }
else if(PlayerInfo[i][pLeader] == 2) { fname = "ФБР"; }
else if(PlayerInfo[i][pLeader] == 3) { fname = "Национальная Гвардия"; }
else if(PlayerInfo[i][pLeader] == 4) { fname = "Министерство Здравоохранение"; }
else if(PlayerInfo[i][pLeader] == 5) { fname = "La Cosa Nostra"; }
else if(PlayerInfo[i][pLeader] == 6) { fname = "Yakuza"; }
else if(PlayerInfo[i][pLeader] == 7) { fname = "Правительство Штата"; }
else if(PlayerInfo[i][pLeader] == 8) { fname = "Хитманы"; }
else if(PlayerInfo[i][pLeader] == 9) { fname = "Репортеры"; }
else if(PlayerInfo[i][pLeader] == 10) { fname = "Такси"; }
else if(PlayerInfo[i][pLeader] == 11) { fname = "Инструкторы"; }
else if(PlayerInfo[i][pLeader] == 13) { fname = "Grove"; }
else if(PlayerInfo[i][pLeader] == 14) { fname = "El Coronos"; }
else if(PlayerInfo[i][pLeader] == 15) { fname = "LS Vagos"; }
else if(PlayerInfo[i][pLeader] == 16) { fname = "The Ballas"; }
else if(PlayerInfo[i][pLeader] == 17) { fname = "Flaming Cobra"; }
else if(PlayerInfo[i][pLeader] == 18) { fname = "Street Dogs"; }
else if(PlayerInfo[i][pLeader] == 19) { fname = "SF Rifa"; }
else if(PlayerInfo[i][pLeader] == 20) { fname = "Русская Мафия"; }
}
new num = PlayerInfo[i][pPnumber];
GetPlayerName(i, sendername, sizeof(sendername));
if(i == 0) format(string,sizeof(string),"Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n",string,fname,sendername,num);
else format(string,sizeof(string),"%s%s\t%s\t[%d]\n",string,fname,sendername,num);
}
ShowPlayerDialog(playerid,13, DIALOG_STYLE_TABLIST_HEADERS, "{999999}Лидеры онлайн:", string, "OK", "");
return 1;
}
Что это вообще:
http://f3.s.qip.ru/WMlLzbn8.png
Если обнаружите ошибки - прошу указать на них.
Заранее благодарю за ответ! :blush2:

Nexius_Tailer
22.05.2016, 14:06
Из самого значимого - перевести условия if/else if на switch, а также исправить ошибку:

if(PlayerInfo[i][pLeader] <= 0) continue;
{

Desulaid
22.05.2016, 14:06
- можно создать массив и туда по порядочку записать названия фракций
- наверняка у вас есть глобальный массив с именами игроков, например,


PlayerInfo[playerid][pName]

используйте его, тогда вам не надо будет в цикле получать имена игроков

- используйте foreach.inc
- так же посчитывайте размеры массивов. В массиве fname точно не 1024 символа

gangzone.ini
22.05.2016, 15:00
Не лучше название фракций взять в массив ?



#define MAX_ORGANIZATION (5)

static const organization_name[MAX_ORGANIZATION][] =
{"Fraction_One", "Fraction_Two", "Fraction_Three", "Fraction_Four", "Fraction_Five"};



format(string, sizeof(string), "Вы лидер фракции \"%s\"", organization_name[playerid-1]);
SendClientMessage(playerid, -1, string);

L0ndl3m
22.05.2016, 15:27
Не лучше название фракций взять в массив ?



#define MAX_ORGANIZATION (5)

static const organization_name[MAX_ORGANIZATION][] =
{"Fraction_One", "Fraction_Two", "Fraction_Three", "Fraction_Four", "Fraction_Five"};



format(string, sizeof(string), "Вы лидер фракции \"%s\"", organization_name[playerid-1]);
SendClientMessage(playerid, -1, string);

Неверный пример использования. Зачем от playerid отнимать единицу?

Desulaid
22.05.2016, 16:40
Как-то так :)


if(strcmp(cmd, "/leaders3", true) == 0)
{
static const fraction_name_array[19][29] =
{
"FBI",
"ФБР",
"Национальная Гвардия",
"Министерство Здравоохранение",
"La Cosa Nostra",
"Yakuza",
"Правительство Штата",
"Хитманы",
"Репортеры",
"Такси",
"Инструкторы",
"Grove",
"El Coronos",
"LS Vagos",
"The Ballas",
"Flaming Cobra",
"Street Dogs",
"SF Rifa",
"Русская Мафия"
};
// new string[размер];
foreach(new i:Player)
{
format(
string, sizeof(string),
((i == 0)?("Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n"):("%s%s\t%s\t[%d]\n")),
string, fraction_name_array[PlayerInfo[i][pLeader]-1], PlayerInfo[i][pName], PlayerInfo[i][pPnumber]
);

}
ShowPlayerDialog(playerid, 13, DIALOG_STYLE_TABLIST_HEADERS, "{999999}Лидеры онлайн:", string, "OK", "");
return 1;
}

Avenger
22.05.2016, 18:35
Как-то так :)


if(strcmp(cmd, "/leaders3", true) == 0)
{
static const fraction_name_array[19][29] =
{
"FBI",
"ФБР",
"Национальная Гвардия",
"Министерство Здравоохранение",
"La Cosa Nostra",
"Yakuza",
"Правительство Штата",
"Хитманы",
"Репортеры",
"Такси",
"Инструкторы",
"Grove",
"El Coronos",
"LS Vagos",
"The Ballas",
"Flaming Cobra",
"Street Dogs",
"SF Rifa",
"Русская Мафия"
};
// new string[размер];
foreach(new i:Player)
{
format(
string, sizeof(string),
((i == 0)?("Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n"):("%s%s\t%s\t[%d]\n")),
string, fraction_name_array[PlayerInfo[i][pLeader]-1], PlayerInfo[i][pName], PlayerInfo[i][pPnumber]
);

}
ShowPlayerDialog(playerid, 13, DIALOG_STYLE_TABLIST_HEADERS, "{999999}Лидеры онлайн:", string, "OK", "");
}

Огромное спасибо!
Всем удачи. :boast:

Daniel_Cortez
22.05.2016, 18:50
Как-то так :)


if(strcmp(cmd, "/leaders3", true) == 0)
{
static const fraction_name_array[19][29] =
{
"FBI",
"ФБР",
"Национальная Гвардия",
"Министерство Здравоохранение",
"La Cosa Nostra",
"Yakuza",
"Правительство Штата",
"Хитманы",
"Репортеры",
"Такси",
"Инструкторы",
"Grove",
"El Coronos",
"LS Vagos",
"The Ballas",
"Flaming Cobra",
"Street Dogs",
"SF Rifa",
"Русская Мафия"
};
// new string[размер];
foreach(new i:Player)
{
format(
string, sizeof(string),
((i == 0)?("Организация\tНикнейм\tНомер\n%s%s\t%s\t[%d]\n"):("%s%s\t%s\t[%d]\n")),
string, fraction_name_array[PlayerInfo[i][pLeader]-1], PlayerInfo[i][pName], PlayerInfo[i][pPnumber]
);

}
ShowPlayerDialog(playerid, 13, DIALOG_STYLE_TABLIST_HEADERS, "{999999}Лидеры онлайн:", string, "OK", "");
}
return забыл.