PDA

Просмотр полной версии : [Вопрос] Проблема с циклом



s1lverfail
26.04.2014, 17:20
В общем суть проблемы: мы даем игроку итем в инвентарь GiveInventory(playerid,item,amount), где item - предмет, amount - кол-во. И в общем, не получается сделать так, чтобы если у игрока уже есть такой итем, то кол-во просто приплюсовывалось, а если нет, цикл ищет 0 слот, то есть свободный и дает предмет.
Сам сток:

stock GiveInventory(playerid, item, amount)
{
for(new k=0; k < 21; k++)
{
if(InventoryPlayer[playerid][invSlot][k] == item) return InventoryPlayer[playerid][invKol][k] += amount;
else if(InventoryPlayer[playerid][invSlot][k] == 0)
{
InventoryPlayer[playerid][invSlot][k] = item;
InventoryPlayer[playerid][invKol][k] = amount;
return true;
}
}
return false;
}
С циклами особо не лажу, прошу вашей помощи. В данный момент выдается итем в самый первый слот, и если его оттуда не перемещать, то все в порядке. Но если переместить, допустим, в 5 слот, то опять создатся итем в первом слоте при вызове стока. Помогите пожалуйста.

DeimoS
26.04.2014, 18:36
Второй цикл нужен перед этим, который будет искать слот с похожим предметом. И если уже не найден такой слот, ставим в первый попавшийся свободный

s1lverfail
26.04.2014, 18:47
Не совсем понял, но так и думал что нужен второй цикл. Вот пример, не так?

stock GiveInventory(playerid, item, amount)
{
for(new k=0; k != 21; k++)
{
if(InventoryPlayer[playerid][invSlot][k] == item) return InventoryPlayer[playerid][invKol][k] += amount;
}
for(new k=0; k != 21; k++)
{
if(InventoryPlayer[playerid][invSlot][k] == 0)
{
InventoryPlayer[playerid][invSlot][k] = item;
InventoryPlayer[playerid][invKol][k] = amount;
return true;
}
}
return false;
}

DeimoS
26.04.2014, 18:58
Типа того. Опробуйте сами, ибо я ваших переменных не знаю :)

s1lverfail
26.04.2014, 19:05
Все разобрался, спасибо.