So this script should run the function updatemessages() when the player's data store is changed but it doesn't, because it doesn't print "Updating Messages"?? I don't know why?..
wait(2) local MessageData = game:GetService("DataStoreService"):GetDataStore("test38Messages") local PlayerKey = "user_"..script.Parent.Parent.Parent.UserId function updatemessages() print("Updating Messages") local data = game.ServerStorage.SAVEDDATA:FindFirstChild(script.Parent.Parent.Parent.Name) for i,v in pairs (data.Messages:GetChildren()) do v:Destroy() end for number, message in pairs (MessageData:GetAsync(PlayerKey)) do local value = game.ServerStorage.messagefolder:Clone() value.Name = message["Name"] value.Text.Value = message["Text"] value.GiveReward.Value = message["GiveReward"] value.GiveReward.RewardType.Value = message["RewardType"] value.GiveReward.Reward.Value = message["Reward"]["Gold"] if message["Reward"]["Units"] ~= {} then for i, v in pairs (message["Reward"]["Units"]) do local unit = Instance.new("StringValue") unit.Name = v unit.Value = v unit.Parent = value.GiveReward.Reward end end value.Parent = data.Messages end end local MessagesUpdated = MessageData:OnUpdate(PlayerKey, updatemessages) MessagesUpdated:disconnect()
And to be sure it was :OnUpdate() that broke it I tested it with out it and it worked...
wait(2) local MessageData = game:GetService("DataStoreService"):GetDataStore("test38Messages") local PlayerKey = "user_"..script.Parent.Parent.Parent.UserId function updatemessages() print("Updating Messages") local data = game.ServerStorage.SAVEDDATA:FindFirstChild(script.Parent.Parent.Parent.Name) for i,v in pairs (data.Messages:GetChildren()) do v:Destroy() end for number, message in pairs (MessageData:GetAsync(PlayerKey)) do local value = game.ServerStorage.messagefolder:Clone() value.Name = message["Name"] value.Text.Value = message["Text"] value.GiveReward.Value = message["GiveReward"] value.GiveReward.RewardType.Value = message["RewardType"] value.GiveReward.Reward.Value = message["Reward"]["Gold"] if message["Reward"]["Units"] ~= {} then for i, v in pairs (message["Reward"]["Units"]) do local unit = Instance.new("StringValue") unit.Name = v unit.Value = v unit.Parent = value.GiveReward.Reward end end value.Parent = data.Messages end end --[[ local MessagesUpdated = MessageData:OnUpdate(PlayerKey, updatemessages) MessagesUpdated:disconnect() ]] wait(20) print"ready" while wait(1) do updatemessages() end
But this isn't what I need it to be the loop was only for testing it, I want it to run the function when the data store is changed not every second... How do I fix this? Am I using :OnUpdate() right?