Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

:OnUpdate() not working???????????????

Asked by
lucas4114 607 Moderation Voter
8 years ago

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?

Answer this question