Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6

Тема: CreateBitMask

  1. #1
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±

    CreateBitMask

    CreateBitMask
    Создаёт битовую маску, устанавливая значение флага, одного или нескольких аргументов.

    Параметры:
    PHP код:
    (&bitmask, const bool: ...) 
    • bitmask - переменная, предназначенная для хранения значений флагов
    • ... - аргументы для установки значения флага, которые могут принимать значения: true, если истинное, либо false, если ложное.


    Возвращаемые значения: Значение переменной bitmask, после обработки в цикле.

    Примечание: Если переменная bitmask ранее содержала в себе истинные значения, они будут перезаписаны на те значения, которые были указаны в аргументах.

    Код:
    PHP код:
    stock CreateBitMask(&bitmask, const bool: ...)
    {
        new
            
    arg_len numargs() > 33 33 numargs(),
            
    arg_count 1;

        do
            
    bitmask |= (getarg(arg_count) << (arg_count) - 1);
        while(++
    arg_count arg_len);

        return 
    bitmask;

    Пример использования.

    Создадим энумератор, в котором будет содержаться информация о игроке, допустим: подключен ли игрок, заспавнился ли игрок, вошёл ли в аккаунт игрок. Сразу же сместим все значения в энумераторе побитово на 1 влево, так будет удобнее работать с битами:
    PHP код:
    new
        
    player_flag[MAX_PLAYERS]; // массив для записи значений флагов

    enum(<<= 1)
    {
        
    PLAYER_FLAG_SPAWNED 1,
        
    PLAYER_FLAG_LOGGED,
        
    PLAYER_FLAG_CONNECTED
    }; 
    Допустим, зашёл игрок на сервер, мы должны его обработать. У нас есть 3 значения ( спавн, логин, подключение ). Так как игрок только подключился, следовательно мы должны сразу же присвоить ему значение подклчения, а вот остальные пока не нужны, в итоге им просто присвоим значение false:
    PHP код:
    CreateBitMask
    (
        
    player_flag[playerid], // первый аргумент должен всегда являться переменной, хранящей данные о флагах
        
    false// второй аргумент, это аргумент который будет принимать на себя значение - заспавнен ли игрок ( по порядку, см. энумератор )
        
    false// третий аргумент, это аргумент который будет принимать на себя значение - вошёл ли игрок в аккаунт ( по порядку, см. энумератор )
        
    true// четвёртый аргумент, это аргумент, который будет принимать на себя значение - подключен ли игрок ( по порядку, см. энумератор )
    ); 
    Код без комментариев:
    PHP код:
    CreateBitMask(player_flag[playerid], falsefalsetrue); 
    Можно заметить, что второй и третий аргумент принимают значение false, так как они пока не нужны на данный момент, а вот насчёт четвёртого аргумента: он как раз таки принимает отрицательное значение от false, то есть true. Мы его сделали истинным, так как игрок подключился.

    Проверить на наличие истинности или ложности одного или другого аргумента, можно так:
    PHP код:
    printf("Игрок заспавнился: %i\nИгрок вошёл в аккаунт: %i\nИгрок подключен: %i", !!(player_flag[playerid] & PLAYER_FLAG_SPAWNED), !!(player_flag[playerid] & PLAYER_FLAG_LOGGED), !!(player_flag[playerid] & PLAYER_FLAG_CONNECTED)); 
    Если всё нормально получилось, в консоли должно вывести вот такой интересный текст:
    Код:
    Игрок заспавнился: 0
    Игрок вошёл в аккаунт: 0
    Игрок подключен: 1

    Автор: Londlem

    Специально для: Pro-Pawn.Ru

    Копирование данной статьи без разрешения автора запрещено!
    Последний раз редактировалось L0ndl3m; 27.07.2014 в 07:28.

  2. 6 пользователя(ей) сказали cпасибо:
    #Vito (05.08.2014) KShaddix (29.07.2014) MR_BEN (27.07.2014) Nurick (27.07.2014) underwoker (29.07.2014) wAx (27.07.2014)
  3. #2
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Лондлем хорош ^-^

  4. #3
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Для чего ты используешь !! в коде? (: Это-ведь лишние два нопа в выходном asm файле (: А толку от них нет.

  5. #4
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    Для чего ты используешь !! в коде? (: Это-ведь лишние два нопа в выходном asm файле (: А толку от них нет.
    Перевод простого числа в булевой тип же. :)
    Можно было бы и не использовать оператор '!!', а вместо него поставить оператор '!=', который тоже вернёт истину или ложь.
    Кстати, использовал этот оператор, чтобы было чуть понятнее пользователю, допустим 1 это есть флаг, 0 - нет.
    Без операторов можно было бы обойтись, но кто не так давно в скриптинге скорее всего не поймёт, что за числа, 16, 32, 64, 128...
    Последний раз редактировалось L0ndl3m; 03.08.2014 в 18:37.

  6. #5
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Перевод простого числа в булевой тип же. :)
    Можно было бы и не использовать оператор '!!', а вместо него поставить оператор '!=', который тоже вернёт истину или ложь.
    Кстати, использовал этот оператор, чтобы было чуть понятнее пользователю, допустим 1 это есть флаг, 0 - нет.
    Без операторов можно было бы обойтись, но кто не так давно в скриптинге скорее всего не поймёт, что за числа, 16, 32, 64, 128...
    В павн ведь нет булевого значения, а если так нужно, то можно сделать bool: вместо !! (:

  7. #6
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от Пельмень Посмотреть сообщение
    В павн ведь нет булевого значения, а если так нужно, то можно сделать bool: вместо !! (:
    Верно, нет.
    Можно было даже так сделать:
    PHP код:
    (player_flag[playerid] & PLAYER_FLAG_CONNECTED) != ? ("Игрок подключен") : ("Игрока нет на сервере"
    Так ещё удобнее, нежели единицы и нули.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •