gw.h
22.10.2019, 17:25
Вообщем просто сломался мозг.
Смотри
Есть 20 ячеек слотов для предметов pInfo[playerid][pItem][20]
Также 20 ячеек в которых хронится кол-во предмета из pInfo[playerid][pItem][20] - pInfo[playerid][pItemChar][20]
Тоесть 1 ячейка pInfo[playerid][pItem][1] записывает кол-во в pInfo[playerid][pItemChar][1]
Так вот, есть переменная которая хранит информацию о предмете
Тут хранится число в которое должен стакатся предмет ItemsInfo[Ид предмета][Stack]
Вопрос такой
Как сделать что бы если мы дабовляем больше чем стакается предмет он раскидывался по ячейкам по стакам
Вот код добавление предмета
stock AddItem(playerid, itemid, amount)
{
if(pInfo[playerid][pItem][0] != itemid && pInfo[playerid][pItem][1] != 0 && pInfo[playerid][pItem][2] != 0 && pInfo[playerid][pItem][3] != 0 && pInfo[playerid][pItem][4] != 0 && pInfo[playerid][pItem][5] != 0 && pInfo[playerid][pItem][6] != 0 && pInfo[playerid][pItem][7] != 0 && pInfo[playerid][pItem][8] != 0 && pInfo[playerid][pItem][9] != 0 && pInfo[playerid][pItem][10] != 0 && pInfo[playerid][pItem][11] != 0
&& pInfo[playerid][pItem][12] != itemid && pInfo[playerid][pItem][13] != 0 && pInfo[playerid][pItem][14] != 0 && pInfo[playerid][pItem][15] != 0 && pInfo[playerid][pItem][16] != 0 && pInfo[playerid][pItem][17] != 0 && pInfo[playerid][pItem][18] != 0 && pInfo[playerid][pItem][19] != 0) return SendClientMessage(playerid, 0xBE5555FF, "[Ошибка] {FFFFFF}У вас не хватает места в инвентаре!");
for(new i = 0; i < 20; i++)
{
if(pInfo[playerid][pItem][i] != itemid) continue;
if(pInfo[playerid][pItemChar][i] > ItemsInfo[itemid][Stack]) continue;
pInfo[playerid][pItemChar][i] += amount;
return 1;
}
for(new i = 0; i < 20; i++)
{
if(amount < 1) continue;
if(pInfo[playerid][pItem][i] != 0) continue;
if(amount > ItemsInfo[itemid][Stack])
{
pInfo[playerid][pItem][i] = itemid;
pInfo[playerid][pItemChar][i] = ItemsInfo[itemid][Stack];
amount -= ItemsInfo[itemid][Stack];
AddItem(playerid, itemid, amount);
continue;
}
pInfo[playerid][pItem][i] = itemid;
pInfo[playerid][pItemChar][i] = amount;
return 1;
}
return 1;
}
Пример:
Придмет под идом 5 стакается по 3 шт
Тоесть мы к примеру добавляем AddItem(playerid, 5, 6)
и он записывает в 2 ячейки по 3 шт
Смотри
Есть 20 ячеек слотов для предметов pInfo[playerid][pItem][20]
Также 20 ячеек в которых хронится кол-во предмета из pInfo[playerid][pItem][20] - pInfo[playerid][pItemChar][20]
Тоесть 1 ячейка pInfo[playerid][pItem][1] записывает кол-во в pInfo[playerid][pItemChar][1]
Так вот, есть переменная которая хранит информацию о предмете
Тут хранится число в которое должен стакатся предмет ItemsInfo[Ид предмета][Stack]
Вопрос такой
Как сделать что бы если мы дабовляем больше чем стакается предмет он раскидывался по ячейкам по стакам
Вот код добавление предмета
stock AddItem(playerid, itemid, amount)
{
if(pInfo[playerid][pItem][0] != itemid && pInfo[playerid][pItem][1] != 0 && pInfo[playerid][pItem][2] != 0 && pInfo[playerid][pItem][3] != 0 && pInfo[playerid][pItem][4] != 0 && pInfo[playerid][pItem][5] != 0 && pInfo[playerid][pItem][6] != 0 && pInfo[playerid][pItem][7] != 0 && pInfo[playerid][pItem][8] != 0 && pInfo[playerid][pItem][9] != 0 && pInfo[playerid][pItem][10] != 0 && pInfo[playerid][pItem][11] != 0
&& pInfo[playerid][pItem][12] != itemid && pInfo[playerid][pItem][13] != 0 && pInfo[playerid][pItem][14] != 0 && pInfo[playerid][pItem][15] != 0 && pInfo[playerid][pItem][16] != 0 && pInfo[playerid][pItem][17] != 0 && pInfo[playerid][pItem][18] != 0 && pInfo[playerid][pItem][19] != 0) return SendClientMessage(playerid, 0xBE5555FF, "[Ошибка] {FFFFFF}У вас не хватает места в инвентаре!");
for(new i = 0; i < 20; i++)
{
if(pInfo[playerid][pItem][i] != itemid) continue;
if(pInfo[playerid][pItemChar][i] > ItemsInfo[itemid][Stack]) continue;
pInfo[playerid][pItemChar][i] += amount;
return 1;
}
for(new i = 0; i < 20; i++)
{
if(amount < 1) continue;
if(pInfo[playerid][pItem][i] != 0) continue;
if(amount > ItemsInfo[itemid][Stack])
{
pInfo[playerid][pItem][i] = itemid;
pInfo[playerid][pItemChar][i] = ItemsInfo[itemid][Stack];
amount -= ItemsInfo[itemid][Stack];
AddItem(playerid, itemid, amount);
continue;
}
pInfo[playerid][pItem][i] = itemid;
pInfo[playerid][pItemChar][i] = amount;
return 1;
}
return 1;
}
Пример:
Придмет под идом 5 стакается по 3 шт
Тоесть мы к примеру добавляем AddItem(playerid, 5, 6)
и он записывает в 2 ячейки по 3 шт