Designing an Inventory system using DataStore2

Hello,

I am trying to design an inventory system using data store 2. The issue i am having is that my data is not being updated when i buy a weapon from my shop. When a weapon is purchased, the purchased event fires and all the print statements in the connected function print what you would expect them to.

local DataStore2 = require(1936396537)
local SS = game:GetService('ServerStorage')
local SSS = game:GetService('ServerScriptService')
local RS = game:GetService('ReplicatedStorage')
local playableSwords = SS.PlayableSwords
local ItemsModule = require(SS.ItemsModule:WaitForChild('ItemsModule'))
local Items = ItemsModule.ReturnTable()

local updateUIInvEvent = RS.DataStoreEvents.UpdateUIInvEvent
local purchaseEvent = RS.ShopEvents.PurchaseEvent
local poorEvent = RS.ShopEvents.PoorEvent
local ownedEvent = RS.ShopEvents.OwnedEvent
local dataLoadedEvent = RS.DataStoreEvents.DataStoreLoaded

function updateInventory(folder,items,player)
	for name,bool in pairs(items) do
		local newItem = Instance.new("ObjectValue")
		newItem.Name = name
		newItem.Parent = folder
	end
	print('updating ui')
	updateUIInvEvent:FireClient(player)
end

DataStore2.Combine("DATA","cash","inventory")
function playerAdded(player)
	
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = 'leaderstats'
	leaderstats.Parent = player
	
	local cashStore = DataStore2("cash",player)
	local inventoryStore = DataStore2("inventory",player)
	
	local cash = Instance.new("IntValue")
	cash.Name = 'cash'
	cash.Value = cashStore:Get(0)
	cash.Parent = leaderstats
	
	local inventory = Instance.new('Folder')
	inventory.Name = 'Inventory'
	inventory.Parent = player
	
	local chosenWep = Instance.new('Folder')
	chosenWep.Name = 'ChosenWeapon'
	chosenWep.Parent = player
	
	cashStore:OnUpdate(function()
		cash.Value = cashStore:Get(0)
	end)
	
	local items = inventoryStore:GetTable({
		RayCastKatana = true
	})
	
	updateInventory(inventory,items,player)
	
	dataLoadedEvent:Fire()
	
	inventoryStore:OnUpdate(function()
		print('getting ready to update')
		local items = inventoryStore:GetTable({
			RayCastKatana = true
		})
		updateInventory(inventory,items,player)
	end)
end

for i,player in ipairs(game.Players:GetPlayers()) do
	playerAdded(player)
end

game.Players.PlayerAdded:Connect(playerAdded)

purchaseEvent.OnServerEvent:Connect(function(player,toolName)
	local cashStore = DataStore2("cash",player)
	local inventoryStore = DataStore2("inventory",player)
	print(toolName)
	local Item = Items[toolName]
	print(Item)
	local price = Item.Price
	if cashStore:Get(0) >= price then
		local inventory = inventoryStore:GetTable({
			RayCastKatana = true
		})
		print(inventory)
		if inventory[Item.Name] then
			print('You already own this item')
			ownedEvent:FireClient(player)
		else
			print('purchasing Item')
			cashStore:Increment(-price)
			print(Item.Name)
			inventory[Item.Name] = true
			inventoryStore:Update()
			print(inventory['RayCastKatana'])
			print(inventory['AetherBlade'])
		end
	else
		poorEvent:FireClient(player)
	end
end)

Except the print statement at line 61. This means that when I append the inventory on line 94, the inventory store does not update, or else it would print the statement on line 61.

How am I supposed to use Data Store 2 to solve my problem?

Thank you for your time.

1 Like