Portal SAMP
[Include] Sistema de inventário - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] Sistema de inventário (/showthread.php?tid=3108)



Sistema de inventário - Dr Editor - 27/12/2022

Sistema de inventário

Desenvolvi este sistema há muito tempo e como estou me desligando do SA:MP gradativamente estou me desfazendo de alguns sistemas que nunca comercializei, pois foi para fins próprios.


Resumo:

Este é um dos sistemas de inventário mais completos e dinâmicos!
Possui inúmeras funcionalidades para os mais diversos modos de jogo.
Este sistema pode agregar fortemente em modos como RP, RPG, DM, DayZ/Battleground por conta dos recursos.

Configuração fácil no topo do script.
Permite adicionar novos itens em tempo de execução e validá-los ao usar/soltar caso não estejam mais disponíveis para uso.
É um sistema que não foi desenvolvido apenas para jogador, mas sim para poder ser usado em interiores (como baús), veículos (como porta-malas) e estáticos (como drops).
Como forma de include facilita o uso.


Callbacks:
Código:
* Chamada ao criar um inventario
OnCreateInventory(Inventory:id)

* Chamada ao criar um inventário estático (posicionado no mapa)
OnCreateStaticInventory(Inventory:id, Float:x, Float:y, Float:z, virtual_world, interior, destroy_delay, Inventory:copy_id)

* Chamada quando um inventário é destruído
OnDestroyInventory(Inventory:id, bool:static_inventory)

* Chamada quando o joagdor abre um inventário
OnPlayerOpenInventory(playerid, Inventory:id)

* Chamada quando o jogador fecha o inventário
OnPlayerCloseInventory(playerid, Inventory:id)

* Chamada quando um inventário é destruído, porém um jogador está com ele aberto
OnDestroyOpenedInventory(playerid, Inventory:id)

* Chamada quando o jogador clica em um item
OnPlayerSelectItem(playerid, Inventory:id, item, type_index, index)

* Chamada quando o jogador usa um item
OnPlayerUseItem(playerid, Inventory:id, item, type_index, index)

* Chamada quando o jogador solta um item
OnPlayerDropItem(playerid, Inventory:id, item, type_index, index)

* Chamada quando um item é removido do inventário (através da função RemoveInventoryItem apenas)
OnRemoveInventoryItem(Inventory:id, item, type_index, amount)

* Chamada quando o jogador pega um item do chão
OnPlayerGetDropedItem(playerid, dropped_index, item, type_index, amount)


Funções:
Código:
* Cria e inicializa o inventário do jogador (sempre usar esta função antes de qualquer outra para o jogador)
Inventory:CreatePlayerInventory(playerid)

* Cria um inventário estático
Inventory:CreateStaticInventory(Float:x, Float:y, Float:z, max_items = MAX_INVENTORY_ITEMS, vw = -1, interior = -1, modelid = -1, Float:rx = 0.0, Float:ry = 0.0, Float:rz = 0.0, const label_text[] = "", destroy_delay = 0, Inventory:id = INVALID_INVENTORY_ID)

* Cria um inventário
Inventory:CreateInventory(Inventory:id = INVALID_INVENTORY_ID, max_items = MAX_INVENTORY_ITEMS)

* Pega o inventário que o jogador está visualizando
Inventory:GetPlayerOpenedInventory(playerid)

* Adiciona um novo item ao conjunto de itens existentes de inventário
AddNewInventoryItem(item, type_index, const title[], const description[])

* Adiciona um novo item ao inventário
AddItemInventory(Inventory:id, item, type_index, amount, index = -1)

* Retorna por referência o id, tipo e quantidade do item através do index no inventário
InfoInventoryItem(Inventory:id, index, &item, &type_index, &amount)

* Retorna o inventário estático mais próximo do jogador com base em determinada área
Inventory:GetStaticInventoryNearPlayer(playerid, Float:range)

* Retorna a quantidade do item através do index no inventário
GetInventoryIndexAmount(Inventory:id, index)

* Retorna a quantidade do item através do id do item e tipo no inventário
GetInventoryItemAmount(Inventory:id, item, type_index)

* Retorna por referência o título e descrição de determinado item através do id e tipo
ItemInfo(item, type_index, title[], description[])

* Remove um item do inventário através do item, tipo e determinada quantidade (-1 remove tudo)
RemoveInventoryItem(Inventory:id, item, type_index, amount = -1)

* Remove um item do inventário com base no index no inventário
RemoveInventoryItemIndex(Inventory:id, index)

* Retorna se o jogador possui determinado item
HaveInventoryItem(Inventory:id, item, type_index)

* Reseta os itens do inventário
ClearInventory(Inventory:id)

* Retorna se o inventário é válido
IsValidInventory(Inventory:id)

* Retorna se o inventário é estático
IsStaticInventory(Inventory:id)

* Retorna se o inventário é temporário (auto-destrói)
IsTemporaryInventory(Inventory:id)

* Retorna a quantidade de itens do inventário
CountInventoryItems(Inventory:id)

* Define a quantidade máxima de itens do inventário
SetInventoryMaxItems(Inventory:id, max_items)

* Retorna a quantidade máxima de itens do inventário
GetInventoryMaxItems(Inventory:id)

* Retorna o index do último item válido do inventário
GetLastInventoryItemIndex(Inventory:id)

* Retorna se o item é válido (caso ele não exista mais no servidor e o jogador ainda o possua)
IsValidInventoryItem(item, type_index)

* Retorna o index do item com base no id e tipo
GetInventoryItemIndex(Inventory:id, item, type_index)

* Cria um item no chão
CreateDropItem(item, type_index, amount, Float:x, Float:y, Float:z, Float:rx = 0.0, Float:ry = 0.0, Float:rz = 0.0, vw = -1, interior = -1)

* Remove um item do chão
RemoveDroppedItem(dropped_index)

* Retorna o número de itens no chão com base no id e tipo
CountDroppedItem(item, type_index = 0)

* Retorna o número de itens no chão
CountDroppedItems()

* Mostra o inventário para o jogador
ShowInventory(Inventory:id, playerid, page = 1, bool:button_use = true, bool:button_drop = true)

* Mostra a aba de informações do item (título, descrição, icone e botões)
ShowInventoryItemInfo(playerid)

* Oculta a aba de informações do item (título, descrição, icone e botões)
HideInventoryItemInfo(playerid)

* Oculta o inventário para o jogador (automaticamente oculta a aba de informações do item)
HideInventory(playerid)

* Destrói o inventário
DestroyInventory(Inventory:id)


Bibliotecas adicionais:

  • td-streamer
  • streamer

Download:

https://pastebin.com/x9mSZbqL