Datastore2's OnUpdate function doesn't seem to be working

Hello! I have a very similar issue to this topic here:

You can skim through the topic and see my problem. I’ve been waiting for a bit and nobody seemed to reply, so I thought that I will make a new topic just for this since that topic already was marked as solved.

More Info on this:

  • I have many other things I use for DataStore2, I’m not to sure if its because I have too much of data to keep up with the update. (they are: Currency(Combined to Coins, Level), Inventory(Combined), and Slots(Combined) ~ this is the one giving me issues).

If you have any questions, don’t understand, or need more code please tell me! Thank you.

I am not sure myself what did the 2nd Arguement did Datastore2 return but the reason why it’s not update because it didn’t return Instance you want to update i edit some code

for key, stringValue in pairs(slotsStore) do
		local curSlot = player.Slots:FindFirstChild(key)
		
		updateEquippedSlots(stringValue:Get(defaultEquippedSlots[key]), curSlot)
		stringValue:OnUpdate(function(newString)
			updateEquippedSlots(newString, curSlot)
		end)
	end

Basically just pass the Instance you want to update to the updateEquippedSlots function
(tell me if there still problem)

I replaced it with your code and it’s still the same issue. It only changes when I rejoin not when in-game.

So that mean the value is change and save but won’t fire onUpdate Event?

Yup! It won’t change when I’m in-game equipping something.

Can I see the code where you change value? Or you edit value on explorers?

I change the value by when someone clicks a button it fires a remote function to the server.

game:GetService("ReplicatedStorage"):WaitForChild("Functions").Equip.OnServerInvoke = function(player, itemName)
	local char = player.Character
	local slotsStore = {
		GearSlot1 = DataStore2("GearSlot1", player),
		GearSlot2 = DataStore2("GearSlot2", player),
		GearSlot3 = DataStore2("GearSlot3", player),
		PerkSlot =  DataStore2("PerkSlot", player),
	}


	local item, inInventory, isEquipped

	item = game:GetService("ServerStorage").GameItems.Gears:FindFirstChild(itemName)

	for _, category in pairs(player.Inventory:GetChildren()) do
		if category:FindFirstChild(itemName) then
			inInventory = true
			if category:FindFirstChild(itemName).Value == true then
				isEquipped = true
			else
				isEquipped = false
			    end
			break
		end
	end


	if inInventory then
		-- If the player owns the item
		print("in inventory")
		wait(1)
		for index, slot in pairs(player.Slots:GetChildren()) do
			print(index)
			print(slotsStore[slot.Name])
			print(slot.Name)
			local slotStore = slotsStore[slot.Name]
			if slotStore:Get(defaultEquippedSlots[slot.Name]) == itemName then
				print("no")
				print(slot)
				slotStore:Set("", slot)
				print(slot.Value)
				--[[if player.Backpack:FindFirstChild(itemName) then
					player.Backpack:FindFirstChild(itemName):Destroy()
					player.StarterGear:FindFirstChild(itemName):Destroy()
				elseif player.Character:FindFirstChild(itemName) then
					player.Character:FindFirstChild(itemName):Destroy()
					player.StarterGear:FindFirstChild(itemName):Destroy()
					break
				end]]
				return "Unequip"
			elseif slotStore:Get(defaultEquippedSlots[slot.Name]) == "" then
				print(item.Parent)
				print(item.Name)
				print("item set")
				slotStore:Set(item.Name, slot)
				print(slotStore:Get(defaultEquippedSlots[slot.Name]))
				return "Equip"
			end

		end
    end
end

hmm maybe change this to

slotStore:Set("")

I think set only accept 1 Argument

this one too set to

slotStore:Set(item.Name)
1 Like