Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Сохранение / Загрузка / Количество в инвентаре от RKV

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

kemperrr

Умник
Здравствуйте пользователи Pawno - Info​

Перейдем сразу к делу

В pInfo
PHP:
pInventoryKol[20];
Сохранение: (И не надо говорить баян баян, немного оптимизации и добавление количества)

Ко всем stock
PHP:
stock SaveInv(playerid)
{
    if(GetPVarInt(playerid,"gPlayerLogged") == 1)
    {
    	new string[550];
    	  for(new i; i < 20; i++) 
          { 
                  format(PlayerInfo[playerid][pInvs],41, "%s%d,",PlayerInfo[playerid][pInvs],PlayerInfo[playerid][pInventory][i]); 
        }  
	for(new i; i < 20; i++)
    	{
        	format(PlayerInfo[playerid][pInvsKol], 128, "%s%d",PlayerInfo[playerid][pInvsKol],PlayerInfo[playerid][pInventoryKol][i]);
    	}
        format(string,sizeof(string),"UPDATE `"TABLE_ACCOUNT"` SET `InvSlot` = '%s' , `InvKol` = '%s' WHERE `Name` =  '%s'",PlayerInfo[playerid][pInvs],PlayerInfo[playerid][pInvsKol],GetName(playerid));
        mysql_query(string, -1, 0, MysqlConnect);
    }
    return true;
}
Количество:

Ищем public OnPlayerClickTextDraw

В паблике ищите
PHP:
    for(new j = 0; j < 20; j++) // Цикл. 
    { 
        if(clickedid == InvTextObj[j][playerid]) 
        { 
            if(ClickInv[playerid] == 21) // Если игрок не выделил объект то... 
            { 
                if(PlayerInfo[playerid][pInventory][j] != 0) // Если данная ячейка не пуста то.. 
                { 
                    ClickInv[playerid] = j; // Записываем в переменную ID иконки 
                    TextDrawBackgroundColor(InvTextObj[j][playerid], 0x00000034); // Меняем цвет фона объекта. 
                    TextDrawHideForPlayer(playerid,InvTextObj[j][playerid]); // Скрываем иконку. [Для обновления] 
                    TextDrawShowForPlayer(playerid,InvTextObj[j][playerid]); // Показываем иконку. [Для обновления] 
                } 
            } 
            else // Если игрок уже выбрал объект то... 
            { 
                if(PlayerInfo[playerid][pInventory][j] == 0) // Если данная ячейка пуста то.. 
                { 
                    new ID = ClickInv[playerid]; 
                    PlayerInfo[playerid][pInventory][j] = PlayerInfo[playerid][pInventory][ID]; // Записываем новое значени. 
                    PlayerInfo[playerid][pInventory][ID] = 0; // Обнуляем иконку которую выбрали изначально. 
                    //========================================================== 
                    TextDrawBackgroundColor(InvTextObj[ID][playerid], 103); // Меняем цвет фона объекта. 
                    //========================================================== 
                    InvUpdate(playerid, ID, PlayerInfo[playerid][pInventory][ID]); // Обновлем иконку. 
                    InvUpdate(playerid, j, PlayerInfo[playerid][pInventory][j]); // Обновлем иконку. 
                    ClickInv[playerid] = 21; // Обнуляем переменную. 
                    PlayerPlaySound(playerid, 17803, 0.0, 0.0, 0.0); // Воспроизводим звук. 
                } 
                if(j == ClickInv[playerid]) // Если же объекты схожи то.. 
                { 
                    ClickInv[playerid] = 21; // Обнуляем переменную. 
                    TextDrawBackgroundColor(InvTextObj[j][playerid], 103); // Меняем цвет фона объекта. 
                    TextDrawHideForPlayer(playerid,InvTextObj[j][playerid]); // Скрываем иконку. [Для обновления] 
                    TextDrawShowForPlayer(playerid,InvTextObj[j][playerid]); // Показываем иконку. [Для обновления] 
                } 
            } 
        } 
    }  
if(clickedid == InvText[5][playerid]) // Кнопка DROP
    {
        new IDS = ClickInv[playerid];
        if(IDS == 21) return SendClientMessage(playerid, COLOR_ERROR, "* Для начала выберете объект в инвентаре.");
        new ID = PlayerInfo[playerid][pInventory][IDS];
        DropsObject(playerid, ItemsInfo[ID][ItemModel], PlayerInfo[playerid][pInventory][IDS]);
        ClickInv[playerid] = 21;
        PlayerInfo[playerid][pInventory][IDS] = 0;
PlayerInfo[playerid][pInventoryKol][IDS] = 0;
        TextDrawBackgroundColor(InvTextObj[ID][playerid], 103);
        InvUpdate(playerid, IDS, PlayerInfo[playerid][pInventory][IDS]);
    }
    if(clickedid == InvText[6][playerid]) // Кнопка INFO
    {
        new ID = ClickInv[playerid]; 
        if(ID == 21) return SendClientMessage(playerid, COLOR_ERROR, "* Для начала выберете объект в инвентаре.");
        switch(PlayerInfo[playerid][pInventory][ID])
        {
            case 1: ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"{0065FD}Информация о предмете","{FFFFFF}Наименование: разнос с едой.\n\nОписание:\n{B3B300}Разнос с едой вы можете съесть и пополнить сытость\nВашего игрового персонажа.","Закрыть", "");
        }
    }
И замените на
PHP:
for(new j = 0; j < 20; j++) // Цикл.
    {
        if(clickedid == InvTextObj[j][playerid])
        {
            if(ClickInv[playerid] == 21) // Если игрок не выделил объект то...
            {
                if(PlayerInfo[playerid][pInventory][j] != 0) // Если данная ячейка не пуста то..
                {
                    ClickInv[playerid] = j; // Записываем в переменную ID иконки
                    TextDrawBackgroundColor(InvTextObj[j][playerid], 0x00000034); // Меняем цвет фона объекта.
                    TextDrawHideForPlayer(playerid,InvTextObj[j][playerid]); // Скрываем иконку. [Для обновления]
                    TextDrawShowForPlayer(playerid,InvTextObj[j][playerid]); // Показываем иконку. [Для обновления]
                }
            }
            else // Если игрок уже выбрал объект то...
            {
                if(PlayerInfo[playerid][pInventory][j] == 0) // Если данная ячейка пуста то..
                {
                    new IID = ClickInv[playerid];
                    PlayerInfo[playerid][pInventory][j] = PlayerInfo[playerid][pInventory][IID];
					PlayerInfo[playerid][pInventoryKol][j] = PlayerInfo[playerid][pInventoryKol][IID]; // Записываем новое значени.
                    PlayerInfo[playerid][pInventory][IID] = 0; // Обнуляем иконку которую выбрали изначально.
                    PlayerInfo[playerid][pInventoryKol][IID] = 0;
                    //==========================================================
                    TextDrawBackgroundColor(InvTextObj[IID][playerid], 103); // Меняем цвет фона объекта.
                    //==========================================================
                    InvUpdate(playerid, IID, PlayerInfo[playerid][pInventory][IID]); // Обновлем иконку.
                    InvUpdate(playerid, j, PlayerInfo[playerid][pInventory][j]); // Обновлем иконку.
                    ClickInv[playerid] = 21; // Обнуляем переменную.
                    PlayerPlaySound(playerid, 17803, 0.0, 0.0, 0.0); // Воспроизводим звук.
                }
                if(j == ClickInv[playerid]) // Если же объекты схожи то..
                {
                    ClickInv[playerid] = 21; // Обнуляем переменную.
                    TextDrawBackgroundColor(InvTextObj[j][playerid], 103); // Меняем цвет фона объекта.
                    TextDrawHideForPlayer(playerid,InvTextObj[j][playerid]); // Скрываем иконку. [Для обновления]
                    TextDrawShowForPlayer(playerid,InvTextObj[j][playerid]); // Показываем иконку. [Для обновления]
                }
            }
        }
    }
    if(clickedid == InvText[4][playerid]) // Кнопка USE
	{
	    new IDS = ClickInv[playerid];
	    if(IDS == 21) return SendClientMessage(playerid, COLOR_ERROR, "* Для начала выберете объект в инвентаре.");
	    new IID = PlayerInfo[playerid][pInventory][IDS];
        UseItem(playerid, IDS, ItemsInfo[IID][ItemModel]); // Запускаем функцию и отправляем ей параметры.
	}
    if(clickedid == InvText[5][playerid]) // Кнопка DROP
    {
        new IDS = ClickInv[playerid];
        if(IDS == 21) return SendClientMessage(playerid, COLOR_ERROR, "* Для начала выберете объект в инвентаре.");
        new IID = PlayerInfo[playerid][pInventory][IDS];
        DropsObject(playerid, ItemsInfo[IID][ItemModel], PlayerInfo[playerid][pInventory][IDS], PlayerInfo[playerid][pInventoryKol][IDS]);
        ClickInv[playerid] = 21;
        PlayerInfo[playerid][pInventory][IDS] = 0;
        TextDrawBackgroundColor(InvTextObj[IID][playerid], 103);
        InvUpdate(playerid, IDS, PlayerInfo[playerid][pInventory][IDS]);
    }
    if(clickedid == InvText[6][playerid]) // Кнопка INFO
    {
        new str[300];
        new IID = ClickInv[playerid];
        if(IID == 21) return SendClientMessage(playerid, COLOR_ERROR, "* Для начала выберете объект в инвентаре.");
        switch(PlayerInfo[playerid][pInventory][IID])
        {
            case 1:
            {
                format(str, sizeof(str),"{FFFFFF}Наименование: Разнос с едой.\nКол - во:%i\n\nОписание:\n{B3B300}Разнос с едой вы можете съесть и пополнить сытость\nВашего игрового персонажа.",PlayerInfo[playerid][pInventoryKol][IID]);
				ShowPlayerDialog(playerid,9999,DIALOG_STYLE_MSGBOX,"{FF8040}Информация о предмете",str,"Закрыть", "");
			}
        }
    }
Потом ищите
PHP:
stock SetItemInv(playerid, itemid, bool:drop, ids) // Функция добавления объекта в инвентарь
{
    new full; // Переменная для записи занятых ячеек
    for(new j = 0; j < 20; j++) // цикл
    {
        if(PlayerInfo[playerid][pInventory][j] == 0) // Если слот пустой то..
        {
            if(drop == true) // Если Drop true то...
            {
                DropInfo[ids][DropX] = 0.0; // Обнуляем координаты объекта X
                DropInfo[ids][DropY] = 0.0; // Обнуляем координаты объекта Y
                DropInfo[ids][DropZ] = 0.0; // Обнуляем координаты объекта Z
                DropInfo[ids][DropModel] = 0; // Обнуляем id модели объекта
                DestroyDynamicObject(DropObject[ids]); // Удаляем сам объект
                DestroyDynamic3DTextLabel(DropInfo[ids][DropLabel]); // Удаляем 3dText
                ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);  // Проигрываем анимацию поднятия предмета
            }
            PlayerInfo[playerid][pInventory][j] = itemid; // Записываем новый предмет
            if(GetPVarInt(playerid, "gInv") == 1) InvUpdate(playerid, j, j); // Если инвентарь открыт то обновим ячейку
            break;
        }
        else full++; // Если слот не пустой то прибавляем значение
    }
    if(full == 20) return SendClientMessage(playerid,COLOR_ERROR,"* В инвентаре нету больше места."); // Если все 20 слотов заняты то пишем текст игроку
    return true;
}
И замените на
PHP:
stock SetItemInv(playerid, item, amount)
{
    new full; // Переменная для записи занятых ячеек
    for(new i = 0; i < 20; i++)
    {
        if(PlayerInfo[playerid][pInventory][i] != item) continue;
        PlayerInfo[playerid][pInventoryKol][i] += amount;
        return true;
    }
    for(new i = 0; i < 20; i++)
    {
        if(PlayerInfo[playerid][pInventory][i] != 0) continue;
        PlayerInfo[playerid][pInventory][i] = item;
        PlayerInfo[playerid][pInventoryKol][i] = amount;
        full++; // Если слот не пустой то прибавляем значение
  		if(GetPVarInt(playerid, "gInv") == 1) InvUpdate(playerid, i, i); // Если инвентарь открыт то обновим ячейку
        return true;
    }
    if(full == 20) return SendClientMessage(playerid,COLOR_ERROR,"* В инвентаре нету больше места."); // Если все 20 слотов заняты то пишем текст игроку
    return false;
}
Далее ищите
PHP:
stock RefreshInv(playerid, slot)
{
    ClickInv[playerid] = 21;
    PlayerInfo[playerid][pInventory][slot] = 0;
    TextDrawBackgroundColor(InvTextObj[slot][playerid], 103);
    InvUpdate(playerid, slot, PlayerInfo[playerid][pInventory][slot]);
    return true;
}
И заменяйте на
PHP:
stock RefreshInv(playerid, slot)
{
    ClickInv[playerid] = 21;
    if(PlayerInfo[playerid][pInventoryKol][slot] != 1)
    {
        PlayerInfo[playerid][pInventoryKol][slot] -= 1;
    }
    else
    {
        PlayerInfo[playerid][pInventory][slot] = 0;
        PlayerInfo[playerid][pInventoryKol][slot] = 0;
    }
    TextDrawBackgroundColor(InvTextObj[slot][playerid], 103);
    InvUpdate(playerid, slot, PlayerInfo[playerid][pInventory][slot]);
    return true;
}
И на последок

Ищем:
PHP:
stock DropsObject(playerid, model, ids)
{
    new string[128];
    for(new i = 0; i < sizeof(DropInfo); i++) // Цикл
    {
        if(DropInfo[i][DropX] == 0.0 && DropInfo[i][DropY] == 0.0 && DropInfo[i][DropZ] == 0.0) // Проверяем координаты
        {
            DropInfo[i][DropID] = ids; // Записываем значение
            DropInfo[i][DropModel] = model; // Записываем значение
            DropInfo[i][DropMir] = GetPlayerVirtualWorld(playerid); // Записываем виртуальный мир
            DropInfo[i][DropInt] = GetPlayerInterior(playerid); // Записываем интерьер
            GetPlayerPos(playerid, DropInfo[i][DropX], DropInfo[i][DropY], DropInfo[i][DropZ]); // Считываем позицию игрока и записываем
            format(string, sizeof(string), "%s\n{408080}Чтобы поднять нажмите клавишу C",ItemsInfo[ids][ItemName]);
            switch(model)
            {
                case 2223: DropObject[i] = CreateDynamicObject(DropInfo[i][DropModel], DropInfo[i][DropX], DropInfo[i][DropY], DropInfo[i][DropZ]-0.91, 0.0, 0.0, 0.0, DropInfo[i][DropMir], DropInfo[i][DropInt], -1, 25.0); // Создаем объект
            }
            DropInfo[i][DropLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, DropInfo[i][DropX], DropInfo[i][DropY], DropInfo[i][DropZ]-0.91, 5.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, DropInfo[i][DropMir], DropInfo[i][DropInt], -1, 7.5); // Создаем 3DText
            SetPlayerChatBubble(playerid,"положил(а) что-то на землю",COLOR_PURPLE,30.0,10000); // Пишем над головой персонажа текст
            ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0); // Проигрываем анимацию
            return true;
        }
    }
    return true;
}
И заменяем на

PHP:
stock DropsObject(playerid, model, ids, kol)
{
    new string[128];
    for(new i = 0; i < sizeof(DropInfo); i++) // Цикл
    {
        if(DropInfo[i][DropX] == 0.0 && DropInfo[i][DropY] == 0.0 && DropInfo[i][DropZ] == 0.0) // Проверяем координаты
        {
            DropInfo[i][DropID] = ids; // Записываем значение
			DropInfo[i][DropKol] = kol;
            DropInfo[i][DropModel] = model; // Записываем значение
            DropInfo[i][DropMir] = GetPlayerVirtualWorld(playerid); // Записываем виртуальный мир
            DropInfo[i][DropInt] = GetPlayerInterior(playerid); // Записываем интерьер
            GetPlayerPos(playerid, DropInfo[i][DropX], DropInfo[i][DropY], DropInfo[i][DropZ]); // Считываем позицию игрока и записываем
            format(string, sizeof(string), "%s\nКол - во: %i\n{408080}Чтобы поднять нажмите клавишу C",ItemsInfo[ids][ItemName],DropInfo[i][DropKol]);
            switch(model)
            {
                case 2223: DropObject[i] = CreateDynamicObject(DropInfo[i][DropModel], DropInfo[i][DropX], DropInfo[i][DropY], DropInfo[i][DropZ]-0.91, 0.0, 0.0, 0.0, DropInfo[i][DropMir], DropInfo[i][DropInt], -1, 25.0); // Создаем объект
            }
            DropInfo[i][DropLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, DropInfo[i][DropX], DropInfo[i][DropY], DropInfo[i][DropZ]-0.91, 5.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, DropInfo[i][DropMir], DropInfo[i][DropInt], -1, 7.5); // Создаем 3DText
            SetPlayerChatBubble(playerid,"положил(а) что-то на землю",COLOR_PURPLE,30.0,10000); // Пишем над головой персонажа текст
            ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0); // Проигрываем анимацию
            return true;
        }
    }
    return true;
}
Загрузка:

В загрузку аккаунта

PHP:
    cache_get_field_content(0, "InvSlot", maximum), sscanf(maximum, "p<,>a<i>[20]",PlayerInfo[playerid][pInventory]);
    cache_get_field_content(0, "InvKol", maximum), sscanf(maximum, "p<,>a<i>[20]",PlayerInfo[playerid][pInventoryKol]);
Вот и все, оформление калл полный будет свободное время исправлю
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу