Русское сообщество по скриптингу

Работа с флагами

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Работа с флагами

Сообщение пекарь1337 » 30 окт 2014, 00:48

Довольно часто в сфере скриптинга встречаются флаги. Дословно не могу объяснить значение этого термина, однако могу на примере. Допустим, у нас есть переменная:
[pawn]
  1. new user_flag;
[/pawn]
Ей можно присвоить как один, так и несколько флагов, а также получить их.
Флагов всего может быть 32. Флаги представляются как битовые сдвиги влево, где число 1, а количество битов, на которое сдвинуть - буква в английском алфавите минус 1. Например, для флага a макрос будет выглядеть следующим образом:
[pawn]
  1. #define FLAG_A (1<<0)
[/pawn]
А для флага z так:
[pawn]
  1. #define FLAG_Z (1<<25)
[/pawn]
Допустим, у нас есть файл VIP'ов. В нем строки, а строки состоят из аргументов. Мы всё это дело парсим, получаем строку:
[pawn]
  1. new szArg[16];

  2. // ваш код для получения из файла

  3. parse(buffer, ваши аргументы, szArg, 15);

  4. remove_quotes(szArg); // удаляем кавычки

  5.  
[/pawn]
Итак, в szArg хранится строка ваших флагов. Теперь нам необходимо присвоить переменной user_flag данные флаги. Для этого существует функция Вы должны зарегистрироваться, чтобы видеть ссылки.
[pawn]
  1. user_flag = read_flags(szArg);
[/pawn]
Всё, теперь нашей переменной присвоены флаги, хранящиеся в той строке.
Чтобы проверить переменную на какой-либо флаг, используется конструкция:
[pawn]
  1. переменная & флаг
[/pawn]
На примере:
[pawn]
  1. if(user_flag & FLAG_A)
[/pawn]
С помощью флагов удобно делать плагины, организующие получения привилегий из файла.
Последний раз редактировалось пекарь1337 01 ноя 2014, 12:56, всего редактировалось 1 раз.
✓ JBX [100%/100%] : 46.174.52.19:27227
X ZMX [0%/100%] : ???
Аватара пользователя
пекарь1337
 
Сообщения: 236
Зарегистрирован: 29 окт 2013, 21:55
Откуда: NVIDIA
Благодарил (а): 110 раз.
Поблагодарили: 52 раз.
Опыт программирования: Больше трех лет
Языки программирования: Python
C/C++
Assembler
Pawn

Re: Работа с флагами

Сообщение quckly » 30 окт 2014, 19:39

Флагов всего может быть 26

флагов в 1 переменной можно сделать аж 32.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Работа с флагами

Сообщение пекарь1337 » 30 окт 2014, 21:11

quckly, а как они обозначаются? если алфавит кончается
✓ JBX [100%/100%] : 46.174.52.19:27227
X ZMX [0%/100%] : ???
Аватара пользователя
пекарь1337
 
Сообщения: 236
Зарегистрирован: 29 окт 2013, 21:55
Откуда: NVIDIA
Благодарил (а): 110 раз.
Поблагодарили: 52 раз.
Опыт программирования: Больше трех лет
Языки программирования: Python
C/C++
Assembler
Pawn

Re: Работа с флагами

Сообщение quckly » 31 окт 2014, 15:34

пекарь1337, (1<<26), ..., (1<<31)

Добавлено спустя 1 минуту 45 секунд:
Если ты хочешь биты сериализовать в строку, то можешь использовать не только буквы, а например цифры или пунктуацию.
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Работа с флагами

Сообщение StRiKeR.csF » 31 окт 2014, 20:15

пекарь1337 писал(а):Чтобы проверить переменную на какой-либо флаг, используется конструкция:
[pawn]
  1. if(переменная & флаг)
[/pawn]

[pawn]
  1. get_user_flags(id) & ADMIN_KICK ? server_print("hooy") : server_print("2 hooya");
[/pawn]
:crazy:
Придираюсь :-[
Чего добился ты и бла, бла, бла
Тут, типа, посыл был, но админ его потёр :(

Skype: nestle.csf
-В чём сила, брат?
-Сила в Debug.log xD
Аватара пользователя
StRiKeR.csF
Скриптер
 
Сообщения: 771
Зарегистрирован: 03 июн 2011, 06:26
Откуда: Кубань
Благодарил (а): 126 раз.
Поблагодарили: 181 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++
C#
JavaScript
PHP(+MySQL)
Assembler

Re: Работа с флагами

Сообщение пекарь1337 » 01 ноя 2014, 12:56

Исправил пост, добавил, что 32, а не 26, а также изменил общий вид проверки, для придирчивых :-D
✓ JBX [100%/100%] : 46.174.52.19:27227
X ZMX [0%/100%] : ???
Аватара пользователя
пекарь1337
 
Сообщения: 236
Зарегистрирован: 29 окт 2013, 21:55
Откуда: NVIDIA
Благодарил (а): 110 раз.
Поблагодарили: 52 раз.
Опыт программирования: Больше трех лет
Языки программирования: Python
C/C++
Assembler
Pawn


Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8