Looney_Escobar
Ученик
Здравствуйте. Назрел такой вопрос. Есть система инвентаря. Когда берёшь что-либо со склада (без разницы откуда) и у тебя не осталось больше свободного места, то тебе выводят сообщение что недостаточно места, и по сути return не позволяет дальнейшему выполнению кода, но не тут. Пожалуйста ткните носом или объясните, делал по разному проверки, почти ничего не помогает. Вот сами функции:
Диалог:
Сама функция добавления предметов с проверкой:
Сама функция проверки:
Работает если только в диалог пихать вот эту проверку:
По сути пока не выполниться функция ItemAddToInvEx << if(quantity > GetSlotToInv(playerid, item)) >>, то насколько я знаю другое действие выполняться не должно, почему так происходит непонятно. Ибо пихать миллион проверок нет смысла (лично я так считаю). Я не уж там какой либо гений и если тут написан бред, прошу пожалуйста не критиковать данный вопрос. Кто сможет помочь разобраться буду сильно благодарен.
Диалог:
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, "Ошибка: В нивентаре недостаточно места!");
Последнее редактирование:
