Tried making an auto updating system that sync the data across every servers but it doesn’t seem to work. Somehow the table gets resorted or something and the server thinks the data is different so it updates the data again ![]()
no errors
local Sync = {};
print("Syning")
local DataStoreService = game:GetService("DataStoreService")
local DataStore = game:GetService("DataStoreService"):GetDataStore("Sync");
Sync.Data = {};
for _,Module in pairs(script:GetChildren()) do
local Data = require(Module);
Sync.Data[Module.Name] = Data;
end
warn(game:GetService("HttpService"):JSONEncode(Sync.Data));
warn(game:GetService("HttpService"):JSONEncode(DataStore:GetAsync("Sync2")));
local function CanRead()
local budget = DataStoreService:GetRequestBudgetForRequestType(Enum.DataStoreRequestType.GetAsync);
if budget > 0 then
return true; else return false;
end
end
local function LoadSync()
if DataStore:GetAsync("Sync2") == nil then
warn("First time loading sync, setting sync data")
DataStore:SetAsync("Sync2", Sync.Data);
end
local NewData = game:GetService("HttpService"):JSONEncode((Sync.Data));
local OldData = game:GetService("HttpService"):JSONEncode(DataStore:GetAsync("Sync2"));
if NewData ~= OldData then
warn("1: " .. OldData)
warn("2: " .. NewData)
DataStore:SetAsync("Sync2", Sync.Data);
print("Sync Overrided");
end
spawn(function()
while true do
wait(10)
if CanRead() then
local OldData = game:GetService("HttpService"):JSONEncode((Sync.Data));
local NewData = game:GetService("HttpService"):JSONEncode(DataStore:GetAsync("Sync2"))
if NewData ~= OldData then
Sync.Data = DataStore:GetAsync("Sync2");
warn("Updating Game...");
game.ReplicatedStorage.Updating:FireAllClients();
end
end
end
end)
end
print("Syning...");
local Success,Error = pcall(LoadSync);
if Success then
print("Synced");
else
warn("Error: " .. Error);
if CanRead() then
local OldData = game:GetService("HttpService"):JSONEncode((Sync.Data));
local NewData = game:GetService("HttpService"):JSONEncode(DataStore:GetAsync("Sync"));
if NewData ~= OldData then
Sync.Data = (NewData);
end
end
end
return Sync;