Redoreck
Компетентный
INVENTORY SYSTEM
Здравствуйте, уважаемые пользователи/гости P-I.
Используемые include:
Здравствуйте, уважаемые пользователи/гости P-I.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
,
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
,
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Инвентарь на TextDraw с использованием Меню выбор (Use, Info) на слот. (img0, img1 или же пролистав ниже можно их увидеть)
Спасибо @OKStyle, @Pawno_Code за помощь с созданием расчёта.
Спасибо @execution за улучшения кода, @faraday. за исправление орфографии. ?
Сделал простенький инвентарь, всем кому нужно поменяют. Это сделать легко, изменив всего несколько строчек (наверное). ?
Небольшое описание:
Открыть инвентарь: /inventory
Выдать предмет: /additem [itemid] [amount]
Забрать предмет: /remove [itemid] [amount]
Обновление:
Я тут заметил, что была небольшая проблема, если добавить предмет с разными поворотами, то если его сдвинуть он становился все равно на 0.0, тут это исправлено.
Теперь нельзя выдать предмет, которого нету в gInventoryItem. (если конечно не постараться)
Код:
PHP:
#include <a_samp>
#include <sscanf2>
#include <Pawn.CMD>
#include <rustext>
#define INVENTORY_SPACE_SLOTS 38.0
#define INVENTORY_WIDTH 4
#define INVENTORY_HEIGHT 5
#define INVENTORY_SIZE (INVENTORY_HEIGHT * INVENTORY_WIDTH)
#define INVENTORY_MAX_SLOT INVENTORY_SIZE
#define INVALID_INVENTORY_CLICK_SLOT -1
#define INVALID_INVENTORY_ITEM_ID 0
PHP:
enum {
/*
Глобальные TextDraws Inventory
*/
Text: INVENTORY_GTD_BG,
Text: INVENTORY_GTD_TEXT,
Text: INVENTORY_GTD_CLOSE,
MAX_INVENTORY_GTEXTDRAWS
}
enum {
/*
TextDraws игрока: Меню выбора USE, INFO, DRO
*/
PlayerText: INVENTORY_PTD_USE_BG,
PlayerText: INVENTORY_PTD_USE,
PlayerText: INVENTORY_PTD_INFO_BG,
PlayerText: INVENTORY_PTD_INFO,
MAX_INVENTORY_PTD_CLICKSLOT
}
enum {
/*
TextDraws игрока: Текст для слотов
*/
PlayerText: INVENTORY_PTD_AMOUNT [INVENTORY_SIZE],
PlayerText: INVENTORY_PTD_NAME [INVENTORY_SIZE],
MAX_INVENTORY_PTD_TEXT
}
new
Text: gInventoryGTextDraw [MAX_INVENTORY_GTEXTDRAWS], /* Глобальные TextDraw Inventory: Задний фон, Текст, Закрытие */
PlayerText: gInventoryPTDClickSlot [MAX_PLAYERS][MAX_INVENTORY_PTD_CLICKSLOT], /* TextDraws игрока: Меню выбора USE, INFO, DROP */
PlayerText: gInventoryPTDSlots [MAX_PLAYERS][INVENTORY_SIZE], /* TextDraws игрока: Слоты */
PlayerText: gInventoryPTDTextSlots [MAX_PLAYERS][MAX_INVENTORY_PTD_TEXT], /* TextDraws игрока: Текст для слотов */
bool: gInventoryOpen [MAX_PLAYERS char],
gInventoryClickSlot [MAX_PLAYERS]
;
enum {
ITEM_TYPE_SKIN = 0, // Скин
__DUMMY_ELEMENT_,
ITEM_TYPE_COUNT = __DUMMY_ELEMENT_
}
enum e_InventoryItems {
/*
Enum, содержащий информацию о предметах Инвентаря
*/
iItemID,
iUse[10],
iName[30],
iDesc[110],
iType,
Float: iItemPosX,
Float: iItemPosY,
Float: iItemPosZ,
Float: iItemPosC
};
new gInventoryItem[][e_InventoryItems] = {
{0, " ", " ", " ", __DUMMY_ELEMENT_, 0.0, 0.0, 0.0, 1.0},
{1, "НАДЕТЬ", "Одежда Truth №1", "Можно приобрести в магазине одежды", ITEM_TYPE_SKIN, 0.0, 0.0, 0.0, 1.0},
{2, "НАДЕТЬ", "Одежда Maccer №2", "Можно приобрести в магазине одежды", ITEM_TYPE_SKIN, 0.0, 0.0, 0.0, 1.0},
{3, "НАДЕТЬ", "Одежда Andre №3", "Можно приобрести в магазине одежды", ITEM_TYPE_SKIN, 0.0, 0.0, 0.0, 1.0},
{4, "НАДЕТЬ", "Одежда Bbthin №4", "Можно приобрести в магазине одежды", ITEM_TYPE_SKIN, 0.0, 0.0, 0.0, 1.0}
};
enum e_InventoryData {
idItem [INVENTORY_MAX_SLOT],
idAmount [INVENTORY_MAX_SLOT]
}
new pInventoryData[MAX_PLAYERS][e_InventoryData];
PHP:
stock GetPlayerInventoryItemByIDX(playerid, slot) {
if(!(0 <= slot <= INVENTORY_MAX_SLOT - 1))
return -1;
return pInventoryData[playerid][idItem][slot];
}
stock GetPlayerInventoryAmountByIDX(playerid, slot) {
if(!(0 <= slot <= INVENTORY_MAX_SLOT - 1))
return -1;
return pInventoryData[playerid][idAmount][slot];
}
stock SetPlayerInventoryItemByIDX(playerid, slot, itemid) {
if(!(0 <= slot <= INVENTORY_MAX_SLOT - 1))
return 0;
pInventoryData[playerid][idItem][slot] = itemid;
if(IsPlayerOpenInventory(playerid)) {
RelogSlot(playerid, slot);
}
return 1;
}
stock SetPlayerInventoryAmountByIDX(playerid, slot, amount) {
if(!(0 <= slot <= INVENTORY_MAX_SLOT - 1))
return -1;
pInventoryData[playerid][idAmount][slot] = amount;
if(IsPlayerOpenInventory(playerid)) {
RelogSlot(playerid, slot);
}
return 1;
}
stock AddPlayerInventoryAmountByIDX(playerid, slot, amount) {
if(!(0 <= slot <= INVENTORY_MAX_SLOT - 1))
return -1;
pInventoryData[playerid][idAmount][slot] += amount;
if(IsPlayerOpenInventory(playerid)) {
RelogSlot(playerid, slot);
}
return 1;
}
stock DelPlayerInventoryAmountByIDX(playerid, slot, amount) {
if(!(0 <= slot <= INVENTORY_MAX_SLOT - 1))
return -1;
pInventoryData[playerid][idAmount][slot] -= amount;
if(IsPlayerOpenInventory(playerid)) {
RelogSlot(playerid, slot);
}
return 1;
}
stock IsPlayerOpenInventory(playerid) {
return gInventoryOpen{playerid};
}
stock SetStatusInventory(playerid, bool: status) {
return gInventoryOpen{playerid} = status;
}
stock IsPlayrClickSlot(playerid) {
return gInventoryClickSlot[playerid] != INVALID_INVENTORY_CLICK_SLOT;
}
stock SetClickedSlot(playerid, slot) {
return gInventoryClickSlot[playerid] = slot;
}
stock ClickedSlot(playerid) {
return gInventoryClickSlot[playerid];
}
stock GetInventoryItemID(item) {
for(new item_id; item_id < sizeof(gInventoryItem); item_id++) {
if(gInventoryItem[item_id][iItemID] != item)
continue;
return item_id;
}
return 0;
}
stock AddInventoryItem(playerid, itemid, amount) {
new item_id = GetInventoryItemID(itemid);
if(gInventoryItem[item_id][iItemID] == INVALID_INVENTORY_ITEM_ID)
return -1;
new bool: no_full;
for(new slot; slot < INVENTORY_SIZE; slot++) {
if(GetPlayerInventoryItemByIDX(playerid, slot) != itemid) {
if(GetPlayerInventoryItemByIDX(playerid, slot))
continue;
SetPlayerInventoryItemByIDX(playerid, slot, itemid);
SetPlayerInventoryAmountByIDX(playerid, slot, amount);
no_full = true;
break;
}
else {
AddPlayerInventoryAmountByIDX(playerid, slot, amount);
no_full = true;
break;
}
}
if(!no_full) {
return SendClientMessage(playerid, -1, !"У вас полный инвентарь");
}
return 0;
}
stock RemoveInventoryItem(playerid, itemid, amount = 1) {
for(new slot; slot < INVENTORY_SIZE; slot++) {
if(GetPlayerInventoryItemByIDX(playerid, slot) != itemid)
continue;
DelPlayerInventoryAmountByIDX(playerid, slot, amount);
if(GetPlayerInventoryAmountByIDX(playerid, slot) < 1) {
SetPlayerInventoryItemByIDX(playerid, slot, INVALID_INVENTORY_ITEM_ID);
}
}
}
stock CreateInventoryGTextDraws() {
gInventoryGTextDraw[INVENTORY_GTD_BG] =
TextDrawCreate (449.9, 247.1, !"_");
TextDrawLetterSize (gInventoryGTextDraw[INVENTORY_GTD_BG], 0.0, 20.9);
TextDrawTextSize (gInventoryGTextDraw[INVENTORY_GTD_BG], 600.6, 5.0);
TextDrawUseBox (gInventoryGTextDraw[INVENTORY_GTD_BG], 1);
TextDrawBoxColor (gInventoryGTextDraw[INVENTORY_GTD_BG], 112);
gInventoryGTextDraw[INVENTORY_GTD_TEXT] =
TextDrawCreate (500.9, 235.5, !"Инвентарь");
TextDrawLetterSize (gInventoryGTextDraw[INVENTORY_GTD_TEXT], 0.2, 1.3);
TextDrawFont (gInventoryGTextDraw[INVENTORY_GTD_TEXT], 2);
TextDrawSetShadow (gInventoryGTextDraw[INVENTORY_GTD_TEXT], 0);
gInventoryGTextDraw[INVENTORY_GTD_CLOSE] =
TextDrawCreate (595.6, 235.3, !"X");
TextDrawLetterSize (gInventoryGTextDraw[INVENTORY_GTD_CLOSE], 0.3, 1.0);
TextDrawTextSize (gInventoryGTextDraw[INVENTORY_GTD_CLOSE], 8.0, 8.0);
TextDrawColor (gInventoryGTextDraw[INVENTORY_GTD_CLOSE], -16777104);
TextDrawAlignment (gInventoryGTextDraw[INVENTORY_GTD_CLOSE], 2);
TextDrawSetShadow (gInventoryGTextDraw[INVENTORY_GTD_CLOSE], 0);
TextDrawSetSelectable (gInventoryGTextDraw[INVENTORY_GTD_CLOSE], true);
}
stock InventoryDestroySlots(playerid) {
for(new slot; slot < INVENTORY_SIZE; slot++) {
PlayerTextDrawDestroy(playerid, gInventoryPTDSlots[playerid][slot]);
gInventoryPTDSlots[playerid][slot] = PlayerText: INVALID_TEXT_DRAW;
PlayerTextDrawDestroy(playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot]);
gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot] = PlayerText: INVALID_TEXT_DRAW;
}
}
stock InventorDestroysClickedSlot(playerid) {
SetClickedSlot(playerid, INVALID_INVENTORY_CLICK_SLOT);
for(new slot; slot < MAX_INVENTORY_PTD_CLICKSLOT; slot++) {
PlayerTextDrawDestroy(playerid, gInventoryPTDClickSlot[playerid][slot]);
gInventoryPTDClickSlot[playerid][slot] = PlayerText: INVALID_TEXT_DRAW;
}
}
stock ShowPlayerInventory(playerid) {
if(IsPlayerOpenInventory(playerid)) {
InventoryDestroySlots(playerid);
if(IsPlayrClickSlot(playerid)) {
InventorDestroysClickedSlot(playerid);
}
}
TextDrawShowForPlayer(playerid, gInventoryGTextDraw[INVENTORY_GTD_BG]);
TextDrawShowForPlayer(playerid, gInventoryGTextDraw[INVENTORY_GTD_TEXT]);
TextDrawShowForPlayer(playerid, gInventoryGTextDraw[INVENTORY_GTD_CLOSE]);
new amount[5];
for(new slot, x, y; slot < INVENTORY_SIZE; slot++) {
gInventoryPTDSlots[playerid][slot] =
CreatePlayerTextDraw (playerid, 450.0 + (x * INVENTORY_SPACE_SLOTS), 246.7 + (y * INVENTORY_SPACE_SLOTS), !"_");
PlayerTextDrawTextSize (playerid, gInventoryPTDSlots[playerid][slot], 37.0, 36.0);
PlayerTextDrawBackgroundColor (playerid, gInventoryPTDSlots[playerid][slot], 387257936);
PlayerTextDrawFont (playerid, gInventoryPTDSlots[playerid][slot], 5);
PlayerTextDrawSetSelectable (playerid, gInventoryPTDSlots[playerid][slot], true);
new
item_idx = GetPlayerInventoryItemByIDX(playerid, slot),
item_id = GetInventoryItemID(item_idx),
item_amount_idx = GetPlayerInventoryAmountByIDX(playerid, slot)
;
PlayerTextDrawSetPreviewRot (playerid, gInventoryPTDSlots[playerid][slot],
gInventoryItem[item_id][iItemPosX], gInventoryItem[item_id][iItemPosY], gInventoryItem[item_id][iItemPosZ], gInventoryItem[item_id][iItemPosC]
);
PlayerTextDrawSetPreviewModel (playerid, gInventoryPTDSlots[playerid][slot],
(item_idx == INVALID_INVENTORY_ITEM_ID) ? (18670) : (item_idx)
);
PlayerTextDrawShow(playerid, gInventoryPTDSlots[playerid][slot]);
format(amount, sizeof(amount),
"%d",
item_amount_idx
);
gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot] =
CreatePlayerTextDraw (playerid, 486.2 + (x * INVENTORY_SPACE_SLOTS), 276.8 + (y * INVENTORY_SPACE_SLOTS), amount);
PlayerTextDrawAlignment (playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot], 3);
PlayerTextDrawLetterSize (playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot], 0.0961, 0.5712);
PlayerTextDrawSetShadow (playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot], 0);
if(item_amount_idx > 1) {
PlayerTextDrawShow(playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot]);
}
if( ++ x >= INVENTORY_WIDTH) {
x = 0;
y ++;
}
}
SetStatusInventory(playerid, true);
SelectTextDraw(playerid, 0xFFFFFFFF);
}
stock HidePlayerInventory(playerid) {
InventoryDestroySlots(playerid);
if(IsPlayrClickSlot(playerid)) {
InventorDestroysClickedSlot(playerid);
}
TextDrawHideForPlayer(playerid, gInventoryGTextDraw[INVENTORY_GTD_BG]);
TextDrawHideForPlayer(playerid, gInventoryGTextDraw[INVENTORY_GTD_TEXT]);
TextDrawHideForPlayer(playerid, gInventoryGTextDraw[INVENTORY_GTD_CLOSE]);
SetStatusInventory(playerid, false);
CancelSelectTextDraw(playerid);
}
stock UseInventoryItem(playerid, slot, itemid, type) {
switch(type) {
case ITEM_TYPE_SKIN: {
if(GetPlayerSkin(playerid) == itemid)
return 1;
SetPlayerSkin(playerid, itemid);
}
}
if(GetPlayerInventoryAmountByIDX(playerid, slot) > 1) {
DelPlayerInventoryAmountByIDX(playerid, slot, 1);
}
else {
SetPlayerInventoryItemByIDX(playerid, slot, INVALID_INVENTORY_ITEM_ID);
SetPlayerInventoryAmountByIDX(playerid, slot, 0);
}
InventorDestroysClickedSlot(playerid);
return 1;
}
stock RelogSlot(playerid, slot) {
PlayerTextDrawHide(playerid, gInventoryPTDSlots[playerid][slot]);
new
item_idx = GetPlayerInventoryItemByIDX(playerid, slot),
item_id = GetInventoryItemID(item_idx),
item_amount_idx = GetPlayerInventoryAmountByIDX(playerid, slot)
;
PlayerTextDrawSetPreviewRot (playerid, gInventoryPTDSlots[playerid][slot],
gInventoryItem[item_id][iItemPosX], gInventoryItem[item_id][iItemPosY], gInventoryItem[item_id][iItemPosZ], gInventoryItem[item_id][iItemPosC]
);
PlayerTextDrawSetPreviewModel (playerid, gInventoryPTDSlots[playerid][slot],
(item_idx == INVALID_INVENTORY_ITEM_ID) ? (18670) : (item_idx)
);
PlayerTextDrawShow(playerid, gInventoryPTDSlots[playerid][slot]);
PlayerTextDrawHide(playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot]);
new amount[5];
format(amount, sizeof(amount),
"%d",
item_amount_idx
);
PlayerTextDrawSetString(playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot], amount);
if(item_amount_idx > 1) {
PlayerTextDrawShow(playerid, gInventoryPTDTextSlots[playerid][INVENTORY_PTD_AMOUNT][slot]);
}
}
stock PlayerClickSlot(playerid, slot) {
new
Float:pos_X = (slot % INVENTORY_WIDTH) * (INVENTORY_SPACE_SLOTS + 2.0),
Float:pos_Y = (slot / INVENTORY_WIDTH) * (INVENTORY_SPACE_SLOTS + 2.0),
item_id = GetInventoryItemID(GetPlayerInventoryItemByIDX(playerid, slot))
;
gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG] =
CreatePlayerTextDraw (playerid, 500.0 + pos_X, 250.0 + pos_Y, !"_");
PlayerTextDrawLetterSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG], 0.0, 1.0);
PlayerTextDrawTextSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG], 0.0, 42.0);
PlayerTextDrawColor (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG], -1);
PlayerTextDrawBoxColor (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG], 255);
PlayerTextDrawUseBox (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG], 1);
PlayerTextDrawAlignment (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE_BG], 2);
gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE] =
CreatePlayerTextDraw (playerid, 497.9 + pos_X, 250.7 + pos_Y, gInventoryItem[item_id][iUse]);
PlayerTextDrawLetterSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE], 0.1, 0.9);
PlayerTextDrawTextSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE], 8.0, 41.0);
PlayerTextDrawAlignment (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE], 2);
PlayerTextDrawFont (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE], 2);
PlayerTextDrawSetShadow (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE], 0);
PlayerTextDrawSetSelectable (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE], true);
gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG] =
CreatePlayerTextDraw (playerid, 500.0 + pos_X, 263.0 + pos_Y, !"_");
PlayerTextDrawLetterSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG], 0.0, 1.0);
PlayerTextDrawTextSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG], 0.0, 42.0);
PlayerTextDrawColor (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG], -1);
PlayerTextDrawBoxColor (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG], 255);
PlayerTextDrawUseBox (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG], 1);
PlayerTextDrawAlignment (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO_BG], 2);
gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO] =
CreatePlayerTextDraw (playerid, 498.2 + pos_X, 263.0 + pos_Y, !"Информация");
PlayerTextDrawLetterSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO], 0.1, 0.9);
PlayerTextDrawTextSize (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO], 8.0, 41.0);
PlayerTextDrawAlignment (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO], 2);
PlayerTextDrawFont (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO], 2);
PlayerTextDrawSetShadow (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO], 0);
PlayerTextDrawSetSelectable (playerid, gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO], true);
for(new clicked_slot; clicked_slot < MAX_INVENTORY_PTD_CLICKSLOT; clicked_slot++) {
PlayerTextDrawShow(playerid, gInventoryPTDClickSlot[playerid][clicked_slot]);
}
}
PHP:
public OnPlayerClickTextDraw(playerid, Text:clickedid) {
if(_:clickedid == INVALID_TEXT_DRAW) {
if(IsPlayerOpenInventory(playerid)) {
HidePlayerInventory(playerid);
}
}
if(clickedid == gInventoryGTextDraw[INVENTORY_GTD_CLOSE]) {
HidePlayerInventory(playerid);
}
return 1;
}
PHP:
CreateInventoryGTextDraws();
PHP:
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid) {
if(IsPlayerOpenInventory(playerid)) {
new clickedslot = ClickedSlot(playerid);
for(new slot; slot < INVENTORY_SIZE; slot++) {
if(playertextid == gInventoryPTDSlots[playerid][slot]) {
new item_idx = GetPlayerInventoryItemByIDX(playerid, slot);
if(clickedslot == INVALID_INVENTORY_CLICK_SLOT && item_idx == 0)
break;
if(clickedslot == INVALID_INVENTORY_CLICK_SLOT) {
SetClickedSlot(playerid, slot);
PlayerClickSlot(playerid, slot);
break;
}
if(clickedslot != INVALID_INVENTORY_CLICK_SLOT && playertextid == gInventoryPTDSlots[playerid][clickedslot]) {
InventorDestroysClickedSlot(playerid);
break;
}
if(clickedslot != INVALID_INVENTORY_CLICK_SLOT && clickedslot != slot) {
new
save_amount = GetPlayerInventoryAmountByIDX(playerid, slot),
item_clicked_slot = GetPlayerInventoryItemByIDX(playerid, clickedslot),
item_amount_clicked_slot = GetPlayerInventoryAmountByIDX(playerid, clickedslot)
;
SetPlayerInventoryItemByIDX(playerid, slot, item_clicked_slot);
SetPlayerInventoryAmountByIDX(playerid, slot, item_amount_clicked_slot);
RelogSlot(playerid, slot);
SetPlayerInventoryItemByIDX(playerid, clickedslot, item_idx);
SetPlayerInventoryAmountByIDX(playerid, clickedslot, save_amount);
RelogSlot(playerid, clickedslot);
InventorDestroysClickedSlot(playerid);
SetClickedSlot(playerid, slot);
PlayerClickSlot(playerid, slot);
break;
}
}
}
if(playertextid == gInventoryPTDClickSlot[playerid][INVENTORY_PTD_USE]) {
new
item_idx = GetPlayerInventoryItemByIDX(playerid, clickedslot),
item_id = GetInventoryItemID(item_idx)
;
UseInventoryItem(playerid, clickedslot, item_idx, gInventoryItem[item_id][iType]);
}
if(playertextid == gInventoryPTDClickSlot[playerid][INVENTORY_PTD_INFO]) {
new
item_id = GetInventoryItemID(GetPlayerInventoryItemByIDX(playerid, clickedslot)),
str[150]
;
format(str, sizeof(str),
"Наименование: %s\
\nКоличество: %d\
\n\n%s",
gInventoryItem[item_id][iName],
GetPlayerInventoryAmountByIDX(playerid, clickedslot),
gInventoryItem[item_id][iDesc]
);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX,
!" ",
str,
!"Закрыть", !""
);
}
}
return 1;
}
PHP:
public OnPlayerConnect(playerid) {
for(new slot = 0; slot < INVENTORY_MAX_SLOT; slot++) {
SetPlayerInventoryItemByIDX(playerid, slot, INVALID_INVENTORY_ITEM_ID);
SetPlayerInventoryAmountByIDX(playerid, slot, 0);
}
SetStatusInventory(playerid, false);
SetClickedSlot(playerid, INVALID_INVENTORY_CLICK_SLOT);
return 1;
}
PHP:
CMD:additem(playerid, params[]) {
extract params -> new itemid, amount; else
return 1;
new item = AddInventoryItem(playerid, itemid, amount);
if(item == -1)
SendClientMessage(playerid, -1, !"Не удалось добавить Предмет, т.к его не существует");
return 1;
}
CMD:remove(playerid, params[]) {
extract params -> new itemid, amount; else
return 1;
RemoveInventoryItem(playerid, itemid, amount);
return 1;
}
CMD:inventory(playerid) {
ShowPlayerInventory(playerid);
return 1;
}
P.S Если что, то цифры, которые возле скинов - это не номер слота, а кол-во того, что находится в слоте.
Вложения
-
1.4 MB Просмотры: 1,319
-
1.4 MB Просмотры: 1,041
Последнее редактирование:
