Programando o Inventário
Deixe os slots e textos prontos
A primeira coisa que nós precisamos criar são funções para atualizar os objetos invSlot e slotAmt. Isso pode ser feito com um simples looping que irá configurar cada invSlot com a ID do respectivo slot, e configurar slotAmt com a quantidade desse item nesse slot.
Recolhendo itens
Parâmetros
Param0 é a ID do item a ser adicionado no inventário.
Param1 (opcional) é a quantidade do item a ser adicionado. Se esta checagem não for atendida, o padrão será 1.
Variáveis
foundSlot - Usado para acompanhar se outro slot contendo o mesmo item foi encontrado ou não.
emptySlot - Guarda o slotID do primeiro slot vazio encontrado.
amountToAdd - Quantidade de itens que serão adicionados no inventário.
Eventos
Evento 8 - Reinicia as variáveis.
Eventos 9-10 - Checa se somente 1 parâmetro passou. Se sim, padronize amountToAdd para 1. Senão, configure ele para Param1.
Evento 11 - Olhe através de cada elemento X com um looping na array do inventário. Não se preocupe em prosseguir se um slot já foi encontrado.
(Observe que dentro deste loop, o slot atual será igual arr_inventory.CurX e o item ID atual será arr_inventory.CurValue)
Evento 12 - Se a ID do item no slot atual for 0, isto significa que ele está vazio. Se um emptySlot não foi encontrado ainda (nós queremos o primeiro empty slot, não o último) guarde o slot atual em emptySlot.
Evento 13 - Se o ID de um item no slot atual é igual ao ID do item que estamos adicionando (Param0) nós configuraremos foundSlot para corresponder ao slot atual, adicionando amountToAdd na quantidade atual do item no slot, e finalmente chamar a função UpdateInventory.
Evento 14 - Primeiro identificaremos se o slot atual é o último slot na array do inventário. Se sim, tenha certeza de que um slot combinável não foi encontrado e um slot vazio existe. Então o primeiro slot vazio (emptySlot) pode ser configurado com a ID do item a ser adicionado, e a quantidade nesse slot pode ser atualizado para amountToAdd. Então chame a função UpdateInventory.
Descartando itens
Parâmetros
Param0 é o slotID de onde iremos remover o item.
Param1 é a quantidade de itens a serem removidos.
Variáveis
itemsRemoved - A quantidade de itens que foram removidos de um slot (no caso de Param1 ser maior que o número de itens atualmente guardados)
Eventos
Event o18 - Primeiro configure itemsRemoved para min(Current Slot Amount, Param1), isto irá pegar o menor valor entre dois números para prevenir a remoção de mais itens que o existente no slot atual. Então remova a quantidade do slot que atendeu à Param0.
Evento 19 - Se este slot agora for vazio, configure o ID do slot para 0 para representar um slot vazio. Configurando a quantidade nesse slot não é totalmente necessariamente, só teremos isto aqui como uma checagem de segurança.
Evento 20 - Finalmente, chame a função UpdateInventory e retorne itemsRemoved. Retornando a variável não é necessário a não ser que você precise dela em algum outro lugar (ex. descartando aqueles itens no chão).
Outros detalhes
Para adicionar/remover itens do inventário nós simplesmente chamamos estas duas funções quando spr_groundItem or spr_invSlot forem clicados.
E isto é tudo que você precisa!