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

Помогите разобраться в битах

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Помогите разобраться в битах

Сообщение Donnyanno » 21 мар 2019, 16:24

Добрый день ребята!
Код: Выделить всё

enum
{
   
Gravity0,
   
Speed,
   
Test1,
   
Test2,
   
Test3
};
new 
g_iAbility[33];
 
public 
giveAbility(id)
{
  switch(
g_iAbility[id])
  {
    case 
Gravityset_user_gravity...
    case 
Speedset_user_maxspeed...
   ...
  }
}

 



В общем,я хотел бы присвоить 5 этих преимуществ сразу одному игроку,мне посоветовали сделать это в битах,т.к будет проще,но т.к я в битах не очень,то прошу помощи
Аватара пользователя
Donnyanno
 
Сообщения: 17
Зарегистрирован: 23 янв 2018, 16:21
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Помогите разобраться в битах

Сообщение KOTOKU » 21 мар 2019, 17:44

Ответы можно найти здесь:
Вы должны зарегистрироваться, чтобы видеть ссылки.
И здесь информация дополнительная
Вы должны зарегистрироваться, чтобы видеть ссылки.

Создаете переменную, так как в одной переменной 32 бит'а и игроков как раз 31, но тут нужно учитывать что биты идут с 0 до 31, а не от 1 до 32. Другими словами, такое совпадение на максимальное количество игроков на сервере равное 31 совпадает с количеством бит в 4 байтах.
Отсюда и следует, что вы можете использовать 1 переменную для хранения true/false информации
Примеры можно там же найти в ссылках.

Если вы хотите присвоить 5 преимуществ и они разные, то создаете просто 5 переменных, например:
Код: Выделить всё

new g_bitSpeed
;
new g_bitGravity;
new g_bitDamage; 
// и т.д. 


а потом используете через set_bit и get_bit (set_bit устанавливает бит в состояние 1 (true), get_bit проверяет состояние бита, если возвращает false - бит в 0 состоянии, если true, то бит равен 1)
Работает все очень просто, макрос SET_BIT используя ID игрока (так как ID игрока может быть от 1 до 32, то это как раз то, что помогает нам узнавать, какой по индексу игрока бит нужно переключать чтобы отвечать именно за состояние игрока).
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.


Вернуться в Скриптинг

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

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