13.08.2016, 20:49
(
Последний раз редактировалось ZiGGi; 13.08.2016 в 22:08.
)
Примерно так должен выглядеть хорошо оптимизированый код этой команды:
В идеале, конечно, для foreach лучше добавить новый интервал, и помещать в этот интервал только администраторов, тогда лишних тиков в цикле не станет.
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;
}