Дмитрий |
Дата: Пятница, 10.10.2014, 22:32 | Сообщение # 1 | Сообщить о нерабочей теме
|
Регистрация: | 03.12.2011
|
Страна: | Российская Федерация |
Репутация: |
14
|
Сообщений: | 1421 |
Награды: |
4
+
|
Статус: |
|
| Перейдем сразу к делу В pInfo
Сохранение: (И не надо говорить баян баян, немного оптимизации и добавление количества)
Ко всем 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!
|
|
|
|