Использование флагов в полном объеме
Всем привет. Собственно, такой вопросик нарисовался у меня. Как известно, в некоторых командных процессорах есть возможность создавать флаги.
Ну, понятное дело, что общество, как и всегда, делится на тех, кто за и против их использования. Пусть каждый останется при своем мнении.
Однако, я лишь хочу научиться использовать их в полном объеме. А для того в первую очередь понять суть их. Судя по INC, макросом flags заменяется на создание отдельной функции с названием самой команды (упускаю факт существования префикса). А что дальше-то сервер делает с этой функцией и каким образом идет это установление маски?
И немного конкретного примера. Есть, например, система админ-уровней:
Код:
#define ADMIN_MIN 1
#define ADMIN_MED 2
#define ADMIN_MAX 3
flags:command_1(ADMIN_MIN);
flags:command_2(ADMIN_MED);
flags:command_3(ADMIN_MAX);
public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
{
if((flags & ADMIN_MIN) > AdminLevel[playerid])
return SendClientMessage(playerid, -1, "your text min") & 0;
else if((flags & ADMIN_MED) > AdminLevel[playerid])
return SendClientMessage(playerid, -1, "your text med") & 0;
else if((flags & ADMIN_MAX) > AdminLevel[playerid])
return SendClientMessage(playerid, -1, "your text max") & 0;
return 1;
}
То есть для commad_1 нужен как минимум первый уровень, для command_2 нужен второй, а command_3 - как минимум третий. Правильно ли реализован данный код и как он сработает?
Пока писал, задумался, а как лучше же будет? :scratch_one-s_head:
Код:
#define ADMIN_MIN 1
#define ADMIN_MED 2
#define ADMIN_MAX 3
или
Код:
enum
{
ADMIN_NONE,
ADMIN_MIN,
ADMIN_MED,
ADMIN_MAX
};