Обход ограничения

Сообщения
10
Реакции
0
Здравствуйте, прошу помочь в решении вопроса
Есть отрезок кода
Код:
if (amount > 200) 
{           
    client_printcolor( pPlayer, "^x04[ZP]^x01 %L" , LANG_PLAYER , "AMMO_LIMITE" )
    return PLUGIN_HANDLED 
}
в котором есть ограничение на перевод количества аммо, и нужно сделать так что бы на випа или админа это ограничение не действовало, только на обычного игрока
 

Вложения

Сообщения
702
Реакции
54
FliNe, ты будешь на всех ресурсах создавать темы? Тебе же BlackSignature ответил на goldsrc

И знак восклицания означает НЕ РАВНО, т.е если у человека будет тот флаг доступа, то у него не будет лимита, а ты взял и сломал то, что тебе скинули))
 
Сообщения
10
Реакции
0
ThePhoenix, я поспешил с ответом, тот вариант не работает, на обычного игрока должен срабатывать лимит , а на випа - нет
 
Сообщения
702
Реакции
54
FliNe,
Код:
if(~get_user_flags(pPlayer) & ADMIN_LEVEL_A)
{
    if (amount > 200)
    {         
        client_printcolor( pPlayer, "^x04[ZP]^x01 %L" , LANG_PLAYER , "AMMO_LIMITE" )
        return PLUGIN_HANDLED
    }
}
А ну ка
 
Последнее редактирование:
Сообщения
219
Реакции
183
Помог
3 раз(а)
Зачем вы условие делаете если там битовая операция? Зачем ! ( если необходимо юзать битовое отрицание
 
Сообщения
702
Реакции
54
gyxoBka, не настолько шарим, как ты)

Я знаю 3 способа:
  • Можно через get_user_flags
  • Можно через натив в amxmisc "is_user_admin" (если для любых челиков, у которых есть флаг)
  • Можно зарегать дефайн, аля:
Код:
#define is_user_vip(%0) (get_user_flags(%0) & FLAGS)
По сути, они сводятся к get_user_flags :D

А на счёт самой "!", то хз) Это критично для тебя?

P.S. Продолжай ставить дизы, ибо ты больше ничего не умеешь, кроме этого, Стилз))
 
Последнее редактирование:
Сообщения
219
Реакции
183
Помог
3 раз(а)
ThePhoenix, при чем тут "3 способа" я не знаю.

суть выше одна. условные операторы для условных. битовые для битовых.

get_user_flags возращает битсумму поэтому и проверка на наличие флага через амперсанд... и следовательно если нужно проверить отсутствие флагов, то делается отрицание.
 
Сообщения
10
Реакции
0
Код:
if(!(get_user_flags(pPlayer) & ~ADMIN_LEVEL_A))
{
    if (amount > 200)
    {         
        client_printcolor( pPlayer, "^x04[ZP]^x01 %L" , LANG_PLAYER , "AMMO_LIMITE" )
        return PLUGIN_HANDLED
    }
}
ThePhoenix, с этим вариантом не работает
Код:
if(get_user_flags(pPlayer) & ~ADMIN_LEVEL_A)
{
    if (amount > 200)
    {         
        client_printcolor( pPlayer, "^x04[ZP]^x01 %L" , LANG_PLAYER , "AMMO_LIMITE" )
        return PLUGIN_HANDLED
    }
}
В этом случае все работает
 
Сообщения
702
Реакции
54
FliNe, зачем ты ОПЯТЬ коверкаешь код?
Тебе в прикол делать что-то непонятное и потом говорить что то, что изначально скинули, работает?
 
Сообщения
10
Реакции
0
ThePhoenix, я пишу, что подошло, так как проверил этот отрезок кода на разные вариации и получил желаемое именно в первом твоем варианте.
Код:
if(!(get_user_flags(pPlayer) & ADMIN_LEVEL_A))
{
    if (amount > 200)
    {       
        client_printcolor( pPlayer, "^x04[ZP]^x01 %L" , LANG_PLAYER , "AMMO_LIMITE" )
        return PLUGIN_HANDLED
    }
}
 
Последнее редактирование:
Сообщения
702
Реакции
54
FliNe, А я тебе говорю о том, что ты опять добавляешь что-то своё.
В варианте (изначальном) с "!" не было возле флага "~", а потом я обновил пост убрав "!" и добавил "~"
 
Сообщения
10
Реакции
0
ThePhoenix, я проверил с этим символом " ~ " результата никакого. Блокирует что обычного , что игрока с флагом.
 
Сообщения
702
Реакции
54
FliNe, делай что хочешь, потому что ты говоришь сначала одно, потом другое, потом третье. Бери, что подошло.
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
ThePhoenix, потому что ты не там добавил отрицание, но попытка засчитана.
 
Сообщения
702
Реакции
54
gyxoBka, перед get_user_flags надо было,а не перед флагом? Сорян. Вспоминал из примера со скрытием худа, там возле флагов ставили.
p.s. Человечек вообще скинул с ! и ~ одновременно и сказал, что не работает)
p.s. Исправился
 
Последнее редактирование:
Сообщения
10
Реакции
0
ThePhoenix,
p.s. Человечек вообще скинул с ! и ~ одновременно и сказал, что не работает)
Тестировалось все правильно (отдельно) я не ставил эти два "!" "~" символа в одну функцию. Вариант с этим " ~ " не фурычит. На сайте не заметил и так отредактировал.
 
Сообщения
702
Реакции
54
FliNe, ~ перед get_user_flags, а не перед самим флагом (это мой косяк)
А по поводу "не ставил", твой пост, первый вариант:
Код:
if(!(get_user_flags(pPlayer) & ~ADMIN_LEVEL_A)) // как бы ты скинул с ! и ~ одновременно..
{
    if (amount > 200)
    {      
        client_printcolor( pPlayer, "^x04[ZP]^x01 %L" , LANG_PLAYER , "AMMO_LIMITE" )
        return PLUGIN_HANDLED
    }
}
ThePhoenix, с этим вариантом не работает
Как-то так.
 

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

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу