Esta funcionalidade está em estado experimental, então você pode testá-la, fornecer feedback e ver o que estamos planejando. No momento, não é possível publicar um projeto que utilize o sistema de itens.
É importante ressaltar que não podemos garantir a retrocompatibilidade para ativos criados em fase experimental. As APIs dessas funcionalidades estão sujeitas a alterações, e podemos remover funcionalidades experimentais inteiras ou uma funcionalidade específica a nosso exclusivo critério. Confira a lista de problemas conhecidos antes de começar a trabalhar com a funcionalidade.
O inventory_component é um componente do Scene Graph usado como um contêiner para itens. Para saber como adicionar um componente à sua entidade, consulte Como trabalhar com entidades e componentes.
As entidades serão consideradas itens apenas se tiverem um item_component. Sem um, as entidades não serão adicionadas aos inventários adequadamente, bem como a funcionalidade de itens e inventários personalizados pode ser interrompida.
Referências a um "item" estão se referindo a uma entidade com um
item_component.As referências a "inventários" referem-se a uma entidade com um
inventory_component.
Descrição da Classe
O inventory_component é usado como um contêiner para armazenar itens. Os itens adicionados ao inventário tornam-se filhos da entidade do inventory_component. Juntamente com a funcionalidade normal de hierarquia do Scene Graph, os inventários podem gerenciar a si mesmos e seus itens de propriedade com propriedades e métodos específicos:
Adicione ou remova itens usando
AddItem()eRemoveItem().Para recuperar itens,
GetItem()eFindItems()podem ser usados. As funções Get retornam filhos imediatos, enquanto as funções Find retornam todos os descendentes.Para encontrar outros inventários, há
GetInventories()eFindInventories().Eventos para assinatura, como
AddItemEventeRemoveItemEvent.GetEquippedItems()pode ser usado para equipamentos, e os eventosEquipItemEventeUnequipItemEventusados para rastreá-los.
Com um inventory_component, qualquer entidade pode se tornar uma pasta ou mochila, um baú contendo saques ou até mesmo um conjunto de personagem com armas e habilidades.
Inventários podem controlar quais itens são adicionados ou removidos de diferentes maneiras. Um método útil envolve eventos de cena. Quando a função AddItem() é chamada, um evento de cena é transmitido e pode ser respondendo por componentes. Quando um evento de cena chega a um componente, o evento OnReceive() é acionado, o que pode ser substituído pela lógica de acionamento.
A versão Experimental de Itens e Inventários Personalizados também inclui outro método para controlar a adição, remoção e mesclagem de itens. Ao criar uma subclasse para o tipo inventory_rule_interface, novas substituições podem ser escritas para CanAdd(), CanRemove() e CanMerge(). Essas regras podem ser adicionadas a InventoryRuleList com AddRule(). Observe que não se espera que essa funcionalidade persista além da versão Experimental.
O componente é listado como inventory_component na lista suspensa de componentes. Para obter mais informações, confira
a referência da API inventory_component da API do Verse.
Inventários e Scene Graph
O sistema de Itens e Inventários Personalizados oferece uma configuração básica que deve ser compreendida para aproveitar ao máximo.
Todos os jogadores começarão com um inventário-raiz, que é uma entidade com um vehicles_component anexado à entidade do jogador. Este inventário-raiz também tem vários subinventários fort_inventory_component. Isso é necessário para preservar a funcionalidade do Fortnite. Consulte componente do inventário do Fortnite para obter detalhes sobre esses componentes.
Devido ao método de travessia do Scene Graph, o inventário-raiz sempre será o primeiro inventário encontrado ao pesquisar em uma árvore de entidade para uma entidade com um inventory_component. Por esse motivo, o inventário-raiz é um alvo útil para anexar novos inventários.
# Helper function that gets the first descendant inventory component from an agent.
# This will be the root inventory.
GetAgentInventory(Agent:agent)<decides><transacts>:inventory_component=
TargetInventory := (for (I : Agent.FindDescendantComponents(inventory_component)) { I })[0]O inventário-raiz é anexado ao jogador, e todos os subinventários são anexados ao inventário-raiz. Novos inventários devem ser adicionados ao inventário-raiz para que outros sistemas só precisem encontrar e fazer a interface com um inventário-raiz.
Exemplo
Adicionar um inventory_component a uma entidade no Editor de Estruturas Pré-fabricadas permite que ela armazene itens como um inventário.
O baú abaixo tem um inventory_component. Agora, ele pode aproveitar todas as funcionalidades dentro do componente.
No entanto, para aproveitar ao máximo a capacidade de itens personalizados e inventários, você precisará usar Verse:
using { /Fortnite.com/Devices }
using { /Fortnite.com/Itemization }
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Itemization }
# This device will give an inventory to all players
# It will then make a dummy item and give it to the inventory.
inventory_giver_device := class(creative_device) :
Um requisito comum de inventários é aplicar regras a quais itens podem existir dentro deles. Abaixo está um script para um inventory_component personalizado que substitui o componente
método OnReceive(). Aqui ele foi usado para criar uma regra de tamanho máximo de inventário:
# This custom inventory component overrides the OnReceive function.
# This will allow us to determine whether or not we want an entity with this inventory component, to receive items.
custom_inventory_component := class(inventory_component) :
# What is the maximum number of items allowed in this inventory?
@editable
MaximumItemSlots:int = 5
Para ver exemplos de jogabilidade com inventários e de como usar o inventory_component, consulte os tutoriais em Itens e inventários personalizados com o Scene Graph.