Quote:
Originally Posted by ZiGGi
Примерно так должен выглядеть хорошо оптимизированый код этой команды:
PHP код:
#define MAX_ADMIN_LEVEL_NAME_STRINGS 34
static const
gAdminLevelNameStrings[][MAX_ADMIN_LEVEL_NAME_STRINGS char] = {
!"{33AA33}(Практикант){FFFFFF}",
!"{33AA33}(Модератор){FFFFFF}",
!"{33CCFF}(Мл.Администратор){FFFFFF}",
!"{FF9900}(Администратор){FFFFFF}",
!"{FF9900}(Ст.Администратор){FFFFFF}",
!"{D900D3}(Гл.Администратор){FFFFFF}",
!"{FF0000}(Основатель){FFFFFF}"
};
stock GetAdminLevelNameString(admin_level, name[], const size = sizeof(name))
{
if (!(1 < admin_level < sizeof(gAdminLevelNameStrings))) {
return 0;
}
return strunpack(name, gAdminLevelNameStrings[admin_level - 1], size);
}
CMD:admins(playerid, params[])
{
new
level_name[MAX_ADMIN_LEVEL_NAME_STRINGS];
foreach (new i : Player) {
if (p_info[i][bAdmin] <= 0) {
continue;
}
GetAdminLevelNameString(p_info[i][bAdmin], level_name);
format(stringer, sizeof(stringer),
"%s%s %s [lvl: %d] [ID: {9ACD32}%d] %s\n",
stringer,
level_name,
NamePlayer[i]
p_info[i][bAdmin],
i,
p_info[i][pAFK] > 3 ? "{ffff00}[AFK]"cWHITE : "");
}
ShowPlayerDialog(playerid, 999, DIALOG_STYLE_MSGBOX, "Администрация в сети:", stringer, "Закрыть", "");
return 1;
}
В идеале, конечно, для foreach лучше добавить новый интервал, и помещать в этот интервал только администраторов, тогда лишних тиков в цикле не станет.
|
А в чем прикол возится с запакованными строками, когда можно сразу создать массив -
PHP код:
static const GetPlayerAdminName[4][15] = {"Практикант", "Модератор", "Администратор", "Основатель"};
И работать с ним напрямую повсеместно. И не нужно все время создавать переменные, что бы распаковать нужную переменную. (это я ввиду к тому, что если это использовать для обозначение рангов везде, а не в одном месте).