Ну зачеееем?
Для чего switch?
Ну не тяжело же
А еще лучше массив юзать.PHP код:
switch(PlayerInfo[playerid][pAdmin])
{
case 1:
case 2:
case 3:
....
}
Команды:
[CMD]/byplayer
[CMD] /virtmir
[CMD] /hp
Функции:
[FUNCTION] SetPlayerTimeSkin
Код:Хочешь спрятать дерево — спрячь его в лесу // Конан Дойл, «Записки о Шерлоке Холмсе»
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
А если так?
Будет муторнее, но более оптимизированнее, разве не так?PHP код:
switch(PlayerInfo[playerid][pAdmin])
{
case 1:
case 1,2:
case 1..3:
case 1..4:
case 1..5:
}
Команды:
[CMD]/byplayer
[CMD] /virtmir
[CMD] /hp
Функции:
[FUNCTION] SetPlayerTimeSkin
Код:Хочешь спрятать дерево — спрячь его в лесу // Конан Дойл, «Записки о Шерлоке Холмсе»
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Прошу прощения.
Действительно, сглупил.
Ну а если, к примеру, в case 3 вставить команды 1, 2 и 3 лвл'ов?
Я думаю switch будет в любом случае оптимизированнее проверок.
Или не?
Команды:
[CMD]/byplayer
[CMD] /virtmir
[CMD] /hp
Функции:
[FUNCTION] SetPlayerTimeSkin
Код:Хочешь спрятать дерево — спрячь его в лесу // Конан Дойл, «Записки о Шерлоке Холмсе»
Если понадобится изменить перечень команд для одного из уровней админки, в /ahelp придётся редактировать код сразу в нескольких местах вместо одного. Только зря потеряете время.
Массив тоже не вариант. У одного уровня админки может быть 2-3 команды, а у другого - список из нескольких строк (SCM). Эту проблему можно решить, сделав перечисление (enum) типа "уровень - строка" и в цикле перебирать все строки и показывать те, для которых уровень меньше или равен нужному. Но при таком подходе мало того, что цикл будет медленнее нескольких условий, так ещё и память будет расходоваться нерационально, т.к. в массиве размер всех строк должен быть одинаков.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
На самом деле это не оптимизация, а скорее всего удобство. Чем копаться в SendClientMessange при добавление новой команды.
Пожалуй, если бы я писал сейчас мод я так и реализовал бы /ahelp:
PHP код:
const MAX_LEN_COMMANDS = 32;
const MAX_SERVER_COMMANDS = 5;
PHP код:
enum e_ADMIN_COMMANDS_INFO
{
e_name_admin_command[MAX_LEN_COMMANDS],
e_lvl_admin
}
static const admin_commands[MAX_SERVER_COMMANDS][e_ADMIN_COMMANDS_INFO] =
{
{ "/ahelp", 1 },
{ "/spec", 1 },
{ "/skick", 2 },
{ "/mute", 2 },
{ "/goto", 3 }
};
PHP код:
CMD:ahelp(playerid)
{
if(0 == PlayerInfo[playerid][pAdmin]) return 0;
for(new i = 0; i < MAX_SERVER_COMMANDS; i++)
{
if(admin_commands[i][e_lvl_admin] > PlayerInfo[playerid][pAdmin]) continue;
printf("Название команды: %s | Уровень админки: %d", admin_commands[i][e_name_admin_command], admin_commands[i][e_lvl_admin]);
}
}
Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)