• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Код продолжает выполняться, хотя условия этого не позволяют

Статус
В этой теме нельзя размещать новые ответы.

Looney_Escobar

Ученик
Здравствуйте. Назрел такой вопрос. Есть система инвентаря. Когда берёшь что-либо со склада (без разницы откуда) и у тебя не осталось больше свободного места, то тебе выводят сообщение что недостаточно места, и по сути return не позволяет дальнейшему выполнению кода, но не тут. Пожалуйста ткните носом или объясните, делал по разному проверки, почти ничего не помогает. Вот сами функции:

Диалог:
C#:
case dGang_8:
    {
        if(!response) return 1;
        if(sscanf(inputtext, "d", gQuantity)) return D(playerid, dGang_8, DSI, "Взять наркотики", ""W"Введите количество грамм наркотиков:", "Далее", "Закрыть");
        if(gQuantity < 0 || gQuantity > FractionInfo[gFrac][fDrugs]) return D(playerid, dGang_8, DSI, "Взять наркотики", ""W"Введите количество грамм наркотиков:", "Далее", "Закрыть");
      

        ItemAddToInvEx(playerid, 359, gQuantity);
      
        static const warehouse[] ="%s[%d] взял%s со склада банды %d гр. наркотиков";
        new string[sizeof(warehouse) + (-2 + MAX_PLAYER_NAME) + (-2 + 4) + (-2 + 1) + (-2 + 4)];
        format(string, sizeof(string), warehouse, gName[playerid], playerid, gGender[playerid]?(""):("а"), gQuantity);

        FractionInfo[gFrac][fDrugs] -= gQuantity;
        UpdateFraction(gFrac, "f_drugs", FractionInfo[gFrac][fDrugs]);
        SendFMes(pInfo[playerid][pMember], FractionInfo[pInfo[playerid][pMember]][fracColor], string);
        return 1;
    }
Сама функция добавления предметов с проверкой:

C#:
stock ItemAddToInvEx(playerid, item, quantity)
{
    if(quantity < 0) return ItemRemoveToInv(playerid, item, quantity);
  
    if(quantity > GetSlotToInv(playerid, item))
    {
        SendClientMessage(playerid, COLOR_GREY, "Ошибка: В нивентаре недостаточно места!");
        return 0;
    }
  
    if(quantity >= 2) SendMes(playerid, 0xFFB561FF, "В инвентарь добавлен предмет '%s' (%i шт).", gItemInfo[item][iName], quantity);
    else SendMes(playerid, 0xFFB561FF, "В инвентарь добавлен предмет '%s'.", gItemInfo[item][iName]);
  
    for(new i; i < 24; i++)
    {
        if(pInfo[playerid][pInventory][i] != item) continue;
        ItemAddToInv(playerid, i, item, quantity);
        return true;
    }
    return 1;
}
Сама функция проверки:

C#:
stock GetSlotToInv(playerid, item)
{
    new total;
    for(new i; i < 24; i++)
    {
        if(!pInfo[playerid][pInventory][i]) total += gItemInfo[item][iMaxQuantity];
        if(pInfo[playerid][pInventory][i] == item && pInfo[playerid][pInventoryAmmount][i] < gItemInfo[item][iMaxQuantity]) total += gItemInfo[item][iMaxQuantity] - pInfo[playerid][pInventoryAmmount][i];
    }
    return total;
}
Работает если только в диалог пихать вот эту проверку:

C#:
if(quantity > GetSlotToInv(playerid, 359 /*id предмета*/)) return SendClientMessage(playerid, COLOR_GREY, "Ошибка: В нивентаре недостаточно места!");
По сути пока не выполниться функция ItemAddToInvEx << if(quantity > GetSlotToInv(playerid, item)) >>, то насколько я знаю другое действие выполняться не должно, почему так происходит непонятно. Ибо пихать миллион проверок нет смысла (лично я так считаю). Я не уж там какой либо гений и если тут написан бред, прошу пожалуйста не критиковать данный вопрос. Кто сможет помочь разобраться буду сильно благодарен.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу