06.09.2016, 01:20
Galera o seguinte, estou tentando criar um sistema de inventбrio em text draw para meu gamemode, pois antes eu usava um sistema em dialog que eu editei, decidi atualizar e tentar criar eu mesmo o meu sistema de inventбrio em text draw, porйm estou encontrando alguns problemas, tal como objetos de repetindo em todos os slots e nгo detectando o click no slot, vou tentar resumir o meu sistema de inventбrio, eu quero que quando clique no slot ele retorne o valor do numero do item, o restante nгo preciso explicar pois ele funciona com o outro modulo do gm, sу preciso mesmo que quando quando clique no slot ele retornar o numero do item, tipo 1, 2, 3 etc.... o -1 й o valor do item vazio, aqui estб o meu codigo, espero que consigam entender
PHP код:
// # Definiзхes #
#define MAX_INVENTORY_SLOTS (48)
// # Forwards #
forward INV_OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid);
forward INV_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
// # Enumerators #
enum InventoryInfo
{
pItemID[MAX_INVENTORY_SLOTS],
pItemSelected,
};
// # Variaveis #
new invInfo[MAX_PLAYERS][InventoryInfo];
// # Callbacks #
public INV_OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
for(new i; i < MAX_INVENTORY_SLOTS; i++)
{
if(playertextid == InvSlotTextD[playerid][i])
{
HideInventory(playerid);
if(invInfo[playerid][pItemID][i] != -1)
{
invInfo[playerid][pItemSelected] = invInfo[playerid][pItemID][i]; // vai setar a variavel pitemselected com o valor do item do slot que foi clicado
ShowPlayerDialog(playerid, D_UsarDropar, DIALOG_STYLE_LIST, "# Item Menu #", "Use Item\nDrop item", "Select", "Back");
}
break;
}
}
return 1;
}
public INV_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case D_UsarDropar:
{
if(response)
{
switch(listitem)
{
case 0:
{
CallLocalFunction("OnPlayerUseItem","is",playerid, ItemInfo[invInfo[playerid][pItemSelected]][Item_Name]); // o valor que pegamos acima para a variavel pitemselected serб usado para retornar a string que foi setada na array do outro modulo
}
case 1:
{
CallLocalFunction("OnPlayerDropItem","is",playerid, ItemInfo[invInfo[playerid][pItemSelected]][Item_Name]);
}
}
}
}
}
return 1;
}
stock AddItem(playerid, itemid)
{
pInfo[playerid][pSlots] ++;
for(new slotid; slotid < MAX_INVENTORY_SLOTS; slotid++)
{
if(invInfo[playerid][pItemID][slotid] == -1) // checa se o slot possui o slot vazio
{
invInfo[playerid][pItemID][slotid] = itemid;
}
}
return 1;
}
stock RemoveItem(playerid, itemid)
{
pInfo[playerid][pSlots] --;
for(new slotid; slotid < MAX_INVENTORY_SLOTS; slotid++)
{
if(invInfo[playerid][pItemID][slotid] == itemid) // checa o slot que estб o item e depois seta para -1 = item vazio
{
invInfo[playerid][pItemID][slotid] = -1;
}
}
return 1;
}
stock ShowInventory(playerid)
{
SelectTextDraw(playerid, 0x28DE3DFF), TogglePlayerControllable(playerid,1), SetCameraBehindPlayer(playerid);
for(new i; i < sizeof(InVTEXTD); i++) PlayerTextDrawShow(playerid, InVTEXTD[playerid][i]);
for(new i; i < sizeof(InvSlotTextD); i++) PlayerTextDrawShow(playerid, InvSlotTextD[playerid][i]);
for(new slotid; slotid < MAX_INVENTORY_SLOTS; slotid++)
{
if(invInfo[playerid][pItemID][slotid] != -1) // Checa se for diferente do item -1, caso seja diferene do -1 = item vazio, irб setar o preview model dos items existentes
{
PlayerTextDrawSetPreviewModel(playerid, InvSlotTextD[playerid][slotid], ItemInfo[invInfo[playerid][pItemID][slotid]][Item_Obj]);
}
PlayerTextDrawSetPreviewModel(playerid, InvSlotTextD[playerid][slotid], 1239);
}
return 1;
}
stock HideInventory(playerid)
{
for(new i; i < sizeof(InVTEXTD); i++) PlayerTextDrawHide(playerid, InVTEXTD[playerid][i]);
for(new i; i < sizeof(InvSlotTextD); i++) PlayerTextDrawHide(playerid, InvSlotTextD[playerid][i]);
CancelSelectTextDraw(playerid), TogglePlayerControllable(playerid,0);
return 1;
}