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?
