27/12/2022 16:33
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
SA:MP Dev Tools
Faça mais, ganhe mais e poupe tempo!
Viper Anti-Cheat
Torne seu servidor mais seguro!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140
Faça mais, ganhe mais e poupe tempo!
Viper Anti-Cheat
Torne seu servidor mais seguro!
________________________________________
Soluções personalizadas para SA:MP
Discord: .eduardoac | Eduardo AC#3140