Is there any other way to improve and make my code any more simple than it is now?
Script
local sp = script.Parent;
local Main = sp.Parent;
local Modules = Main:WaitForChild("Module");
local DataStoreSettings = require(Modules:WaitForChild("Settings"));
local StatsData = game:GetService("DataStoreService"):GetDataStore(DataStoreSettings.StatsDataStore);
local DataStoreModule = require(Modules:WaitForChild("DataStore"));
local Stats = {
{"Coins","NumberValue",0};
};
function PlayerAdded(Player)
local leaderstats = Instance.new("Folder");
leaderstats.Name = "leaderstats";
leaderstats.Parent = Player;
for i,v in next,Stats do
local Value = Instance.new(v[2]);
Value.Name = v[1];
Value.Value = v[3];
Value.Parent = leaderstats;
end
DataStoreModule.LoadData(Player,leaderstats,StatsData);
end
function PlayerLeft(Player)
pcall(function()
StatsData:SetAsync(Player.UserId,DataStoreModule.SaveData(Player.leaderstats));
end)
end
function Shutdown()
local Players = {};
for i,v in next,game.Players:GetChildren() do
PlayerLeft(v);
table.insert(Players,v);
end
for i,v in next,Players do
game:GetService("TeleportService"):Teleport(game.PlaceId,v);
end
end
game.Players.PlayerRemoving:Connect(PlayerLeft);
game.Players.PlayerAdded:Connect(PlayerAdded);
game:BindToClose(function()
Shutdown();
while wait() do
-- keep the server run as longest possible
end
-- ahh we are all gonna die
end)
DataStoreModule
This is the script that handles the Data Load and Save.
local function LoadData(Player,Inventory,Data)
local UserData;
pcall(function()
UserData = Data:GetAsync(Player.UserId);
end)
if (UserData) then
for i,v in next,UserData do
--[[
v = {name = v.Name;value = v.Value};
--]]
if (Inventory:FindFirstChild(v.name)) then
Inventory[v.name].Value = v.value;
else
warn(v.name.." is not a valid member of "..Inventory.Name)
end
end
end
end
local function SaveData(Inventory)
local DataSave = {};
for i,v in next,Inventory:GetChildren() do
local TempData = {
name = v.Name;
value = v.Value;
};
-- TempData = {name = v.Name;value = v.Value};
table.insert(DataSave,TempData);
end
return DataSave;
end
local Module = {};
Module.LoadData = LoadData;
Module.SaveData = SaveData;
return Module;
Data Key
return {
StatsDataStore = "randkey";
};
Looks like