Help with inventory system

Im making an inventor system and cant make it to work normally.

This is a function of adding item

function system:AddItem(PlayerInstance,ItemId,HowMuch)
	if PlayerInstance == nil or ItemId == nil then return nil end
	
	local Inventory = system:GetInventory(PlayerInstance)
	local ItemInfo = GetItemInfo(ItemId)
	local Category = Inventory[ItemInfo.Category]
	print(Category)
	local Item,Index = GetItem(Category,ItemInfo.Id)
	
	if Item == nil then
		print("NewSlot")
		local Slot = #Category+1
		Category[Slot] = ItemInfo
		if (Category[Slot].Stack + HowMuch) > ItemInfo.MaxStack then
			--print("NewSlot")
			local TimesToInsert = math.floor((Category[Slot].Stack + HowMuch) / ItemInfo.MaxStack)
			local Rest = (Category[Slot].Stack + HowMuch) - ItemInfo.MaxStack*TimesToInsert
			
			Category[Slot].Stack = ItemInfo.MaxStack
			
			print(TimesToInsert)
			print(Rest)
			--local LastSlot
			
			for i=1,TimesToInsert do
				print("NewSlot")
				Slot = #Category+1
				Category[Slot] = ItemInfo
				Category[Slot].Stack = ItemInfo.MaxStack
			end
			if Rest ~= 0 then
				print("Adding Rest")
				Category[Slot].Stack = Rest
			end
		else
			Category[Slot].Stack += HowMuch
		end
	else
		local Slot = Index
		if (Category[Slot].Stack + HowMuch) > ItemInfo.MaxStack then
			--print("NewSlot")
			local TimesToInsert = math.floor((Category[Slot].Stack + HowMuch) / ItemInfo.MaxStack)
			local Rest = (Category[Slot].Stack + HowMuch) - ItemInfo.MaxStack*TimesToInsert
			
			Category[Slot].Stack = ItemInfo.MaxStack
			
			print(TimesToInsert)
			print(Rest)
			--local LastSlot

			for i=1,TimesToInsert do
				print("NewSlot")
				Slot = #Category+1
				Category[Slot] = ItemInfo
				Category[Slot].Stack = ItemInfo.MaxStack
			end
			if Rest ~= 0 then
				print("Adding Rest")
				Category[Slot].Stack = Rest
			end
		else
			Category[Slot].Stack += HowMuch
		end
	end
	
	print(Inventory)
	
end

And it works strange. Any help?

1 Like