• Страница 1 из 1
  • 1
Форум » PAWNO » Уроки Pawno » Сохранение / Загрузка / Количество в инвентаре от RKV
Сохранение / Загрузка / Количество в инвентаре от RKV
Дмитрий Дата: Пятница, 10.10.2014, 22:32 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Дмитрий

Перейдем сразу к делу
В pInfo
Код
pInventoryKol[20];  


Сохранение: (И не надо говорить баян баян, немного оптимизации и добавление количества)

Ко всем stock
Код
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

В паблике ищите
Код
    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Вашего игрового персонажа.","Закрыть", "");
         }
     }  


И замените на
Код
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,"Закрыть", "");
             }
         }
     }  


Потом ищите
Код
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;
}  


И замените на
Код
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;
}  


Далее ищите
Код
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;
}


И заменяйте на
Код
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;
}  


И на последок

Ищем:
Код
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;
}


И заменяем на
Код
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;
}  


Загрузка:

В загрузку аккаунта
Код
    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]);  


Вот и все


From Russia With Love!
Форум » PAWNO » Уроки Pawno » Сохранение / Загрузка / Количество в инвентаре от RKV
  • Страница 1 из 1
  • 1
Поиск: