– SERVICES
local RS = game:GetService(“ReplicatedStorage”)
local PlrService = game:GetService(“Players”)
local DSS = game:GetService(“DataStoreService”)
local HTTPService = game:GetService(“HttpService”)
– Variables
local ClassDS = DSS:GetDataStore(“_PlayerClas”);
– Tables
local PlayerClasses = { – how would I change the stats from this table from outer scripts and modules?
– [PlayerName] = {};
}
local OnJoinTable = {
– true is if there is no data and you need to add a base data
[true] = function(player, result)
local PlayerClass = require(script.PlayerClass).new(player);
PlayerClasses[PlrService:GetUserIdFromNameAsync(player.Name)] = PlayerClass
print(HTTPService:JSONEncode(PlayerClass))
task.wait(0.3)
PlayerClass:AddJujutsuTokens(50)
print(HTTPService:JSONEncode(PlayerClass))
end,
[false] = function(player, result)
local PlayerClass = require(script.PlayerClass).new(player, HTTPService:JSONDecode(result));
PlayerClasses[PlrService:GetUserIdFromNameAsync(player.Name)] = PlayerClass
print(HTTPService:JSONEncode(PlayerClass))
task.wait(0.3)
PlayerClass:AddJujutsuTokens(50)
print(HTTPService:JSONEncode(PlayerClass))
end
}
– Functions
local function Encode(EnTable, bool)
local _Data = nil
if bool then
_Data = HTTPService:JSONEncode(EnTable)
else
_Data = HTTPService:JSONDecode(EnTable)
end
return _Data
end
local function Save(playerId, _PlayerClass)
local success, result = pcall(function()
local JSONStructure = HTTPService:JSONEncode(_PlayerClass)
ClassDS:SetAsync(playerId, JSONStructure)
end)
end
local function PlayerLeave(player)
local UserId = PlrService:GetUserIdFromNameAsync(player.Name)
Save(player, PlayerClasses[UserId])
end
local function PlayerJoined(Player)
local UserID = PlrService:GetUserIdFromNameAsync(Player.Name)
local success, result = pcall(function()
return ClassDS:GetAsync(UserID)
end)
if not success then
warn("UNABLE TO RETRIEVE" .. Player.Name .. " DATA! SUGGESTIVE ACTION : KICK USER TO PREVENT DATA LOSS DAMAGE")
end
OnJoinTable[result == nil or result == "null"](Player, result)
RS.Remotes.DataChangeRequest.OnInvoke(function()
print("A")
end)
end
– Events
PlrService.PlayerAdded:Connect(PlayerJoined);
PlrService.PlayerRemoving:Connect(PlayerLeave);
game:BindToClose(function()
require(script.ForILoop).PairsForLoop(Save, PlayerClasses)
end)