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

Несколько проверок на лимит  [Решено]

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

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

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

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

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

Несколько проверок на лимит

Сообщение mirrors1 » 23 май 2019, 20:05

Привет.
есть плагин брони , в нем лимит , каким образом можно делать проверку несколько раз?
делал так :

Код: Выделить всё
#define LIMIT1 200
#define LIMIT2 210
#define LIMIT3 220
new iA = 75

    if
(pev(iPlayer, pev_armorvalue) == LIMIT1 && !g_limit_armor[iPlayer])
        {
            client_print(iPlayer , print_chat , "MAX_ARMOR")
            return PLUGIN_HANDLED;
        }
    set_user_armor(iPlayer , get_user_armor( iPlayer ) + iA )
    engfunc( EngFunc_EmitSound, iPlayer, CHAN_ITEM, BUY_ARMOR, 1.0, ATTN_NORM, 0, PITCH_NORM)
    }
    
    
{
    if(pev(iPlayer, pev_armorvalue) == LIMIT2 && !g_limit_armor[iPlayer])
        {
            client_print(iPlayer , print_chat , "MAX_ARMOR")
            return PLUGIN_HANDLED;
        }
    set_user_armor(iPlayer , get_user_armor( iPlayer ) + iA )
    engfunc( EngFunc_EmitSound, iPlayer, CHAN_ITEM, BUY_ARMOR, 1.0, ATTN_NORM, 0, PITCH_NORM)
    }
    {
    if(pev(iPlayer, pev_armorvalue) == LIMIT3 && !g_limit_armor[iPlayer])
        {
            client_print(iPlayer , print_chat , "MAX_ARMOR")
            return PLUGIN_HANDLED;
        }
        
    set_user_armor
(iPlayer , get_user_armor( iPlayer ) + iA )
    engfunc( EngFunc_EmitSound, iPlayer, CHAN_ITEM, BUY_ARMOR, 1.0, ATTN_NORM, 0, PITCH_NORM)    
    
}
 


да вроде работает , только худ багается и значение после первой сотни отображает неверно ( сам значек щита тоже искажается)

Если,к примеру, в строчку
Код: Выделить всё
if(pev(iPlayer, pev_armorvalue) == LIMIT1 && !g_limit_armor[iPlayer])

Вставлять
Код: Выделить всё
LIMIT1 && LIMIT2 && LIMIT3 && !g_limit_armor[iPlayer])

или
Код: Выделить всё
LIMIT1 || LIMIT2 || LIMIT3 && !g_limit_armor[iPlayer])

а предыдущие убрать - не работает
Аватара пользователя
mirrors1
 
Сообщения: 13
Зарегистрирован: 27 окт 2016, 02:55
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Несколько проверок на лимит  [Решено]

Сообщение xbass13 » 23 май 2019, 20:56

Какая-то банальщина, но можно понять по разному что вам на выходе нужно
Что такое g_limit_armor и LIMIT1-3?


Посмотрите и разберитесь как работают логические операторы, не нужно пихать все подряд в надежде, что это сработает.
&& - Логическое и
|| - Логическое или
! - Логическое не

Если условия исключают друг друга, их нужно перечислять через else, плагин будет работать быстрее

Пока так предложу:
Код: Выделить всё
if(!g_limit_armor[iPlayer])
{
    if(    pev(iPlayer, pev_armorvalue) == LIMIT1 ||
        pev(iPlayer, pev_armorvalue) == LIMIT2 ||
        pev(iPlayer, pev_armorvalue) == LIMIT3)
        {
            client_print(iPlayer , print_chat , "MAX_ARMOR")
            return PLUGIN_HANDLED;
        }    
}
set_user_armor(iPlayer , get_user_armor( iPlayer ) + iA )
engfunc( EngFunc_EmitSound, iPlayer, CHAN_ITEM, BUY_ARMOR, 1.0, ATTN_NORM, 0, PITCH_NORM)
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

Re: Несколько проверок на лимит

Сообщение артист666 » 23 май 2019, 21:02

Вообще не понял зачем это, но:

Код: Выделить всё
new const limits[] = {200210220}
new 
iA 75

if(g_limit_armor[iPlayer]) return PLUGIN_HANDLED//или PLUGIN_CONTINUE

static i= -1
static armorvaluearmorvalue pev(iPlayerpev_armorvalue)

while(++
sizeof(limits))
{
    if(
armorvalue != LIMIT1) continue
    
    
client_print(iPlayerprint_chat"MAX_ARMOR")
    return 
PLUGIN_HANDLED
}
set_user_armor(iPlayerarmorvalue iA)
engfunc(EngFunc_EmitSoundiPlayerCHAN_ITEMBUY_ARMOR1.0ATTN_NORM0PITCH_NORM
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn


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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 7