What do you want to achieve Lets say i have a shop, a player buys a tool from shop. I want that tool to be saved in a folder
What is the issue? It is not saving, no warnings or errors
What solutions have you tried so far? Tried to look at everything, still cant find a solution
--Server script
local remotecon = require(game.ServerScriptService.remotescript)
local buytool = game.ReplicatedStorage.Remotes.buytool -- wherever the remote event is
local toolactivated = game.ReplicatedStorage.Remotes.activatetool
local sell = require(game.ServerScriptService.sell)
buytool.OnServerInvoke = function(player, toolName, status)
local something = remotecon.buy(player,toolName, status)
return something
end
game.ReplicatedStorage.Remotes.strength.OnServerInvoke = function(plr , toolName)
plr.leaderstats.Strength.Changed:Connect(function(value)
math.clamp(plr.leaderstats.Strngth.Value , 0 , plr.Storage.Value)
end)
end
local buyst = game.ReplicatedStorage.Remotes.buyst -- wherever the remote event is
buyst.OnServerInvoke = function(player, storagen, status)
local something = remotecon.buyst(player,storagen, status)
return something
end
local buycl = game.ReplicatedStorage.Remotes.buycl -- wherever the remote event is
buycl.OnServerInvoke = function(player, classname, status)
local something = remotecon.buycl(player,classname, status)
return something
end
toolactivated.OnServerEvent:Connect(function(player)
remotecon.toolactive(player)
end)
local httpService = game:GetService('HttpService')
local dss = game:GetService("DataStoreService")
local ds = dss:GetDataStore("datamaSnef")
local players = game:GetService("Players")
local loadedPlayers = {}
players.PlayerAdded:Connect(function(player)
local data = ds:GetAsync(player.UserId)
if data then
data = httpService:JSONDecode(data)
local tooldata = nil
for key,value in pairs(data) do
pcall(function()
player.leaderstats[key].Value = value
tooldata = ds:GetAsync(player.UserId.."ownedtools")
tooldata = httpService:JSONDecode(tooldata)
end)
end
for _,toolname in pairs(tooldata) do
local val = Instance.new("StringValue")
val.Name = toolname
val.Parent = player.Ownedtools
end
end
table.insert(loadedPlayers,player)
end)
players.PlayerRemoving:Connect(function(player)
local found = table.find(loadedPlayers,player)
if found then
table.remove(loadedPlayers,found)
local saveData = {}
local ownedtools = {}
for _,value in pairs(player.leaderstats:GetChildren()) do
saveData[value.Name] = value.Value
end
for i,v in pairs(player.Ownedtools:GetChildren()) do
local val = Instance.new("StringValue")
val.Name = v.Name
val.Parent = player.Ownedtools
table.insert(ownedtools,val)
print("saved")
end
local function attemptSave(i)
i = i or 0
i+=1
if not pcall(function()
ds:SetAsync(player.UserId,httpService:JSONEncode(saveData))
ds:SetAsync(player.UserId.."ownedtools",httpService:JSONEncode(ownedtools))
end) then
if i <= 10 then
task.wait(1)
attemptSave()
end
end
end
attemptSave()
end
end)
local save = {}
local dss = game:GetService("DataStoreService")
local ds = dss:GetDataStore("datamaSnef")
local players = game:GetService("Players")
function save.playeraddede(player)
local coindata
pcall(function()
coindata = ds:GetAsync(player.UserId.."Coins")
end)
if coindata ~= nil then
player.leaderstats.Coins.Value = coindata
end
local strndata
local stdata
local equippedst
local equippped
local cl
local equippedcl
local ownedstr = ds:GetAsync(player.UserId.."Ownedst") or {}
local ownedtools = ds:GetAsync(player.UserId.."Ownedtools") or {}
local ownedcl = ds:GetAsync(player.UserId.."Ownedcl") or {}
pcall(function()
print("BOBOUX")
strndata = ds:GetAsync(player.UserId.."Strength")
stdata = ds:GetAsync(player.UserId.."Storage")
equippedst = ds:GetAsync(player.UserId.."Equippedst")
equippped = ds:GetAsync(player.UserId.."Equipped")
cl = ds:GetAsync(player.UserId.."Class")
equippedcl = ds:GetAsync(player.UserId.."Equippedcl")
end)
if strndata ~= nil then
player.leaderstats.Strength.Value = strndata
end
if cl ~= nil then
player.leaderstats.Class.Value = cl
end
if stdata ~= nil then
player.Storage.Value = stdata
end
if equippedst ~= nil then
player.Equippedst.Value = equippedst
end
if equippped ~= nil then
player.Equipped.Value = equippped
end
if cl ~= nil then
player.EquippedCl.Value = cl
end
for i,v in pairs(ownedstr) do
local val = Instance.new("StringValue", player.Ownedst)
val.Name = v
end
for i,v in pairs(ownedtools) do
local val = Instance.new("StringValue", player.Ownedtools)
val.Name = v
end
for i,v in pairs(ownedcl) do
local val = Instance.new("StringValue", player.Ownedcl)
val.Name = v
end
local toolinplayer = game.ReplicatedStorage.Shared.Tools:FindFirstChild(equippped):Clone()
toolinplayer.Parent = player.Backpack
local gemdata
pcall(function()
gemdata = ds:GetAsync(player.UserId.."Gems")
end)
if gemdata ~= nil then
player.leaderstats.Gems.Value = gemdata
end
end
for _,player in pairs(players:GetPlayers()) do
coroutine.wrap(save.playeraddede)(player)
end
players.PlayerAdded:Connect(save.playeraddede)
players.PlayerRemoving:Connect(function(plr)
pcall(function()
local ownedstr = {}
local ownedtools = {}
local ownedcl = {}
for i,v in pairs(plr.Ownedst:GetChildren()) do
table.insert(ownedstr,v.Name)
end
for i,v in pairs(plr.Ownedtools:GetChildren()) do
table.insert(ownedtools,v.Name)
end
for i,v in pairs(plr.Ownedcl:GetChildren()) do
table.insert(ownedcl,v.Name)
print(ownedcl)
end
ds:SetAsync(plr.UserId.."Coins", plr.leaderstats.Coins.Value)
ds:SetAsync(plr.UserId.."Strength", plr.leaderstats.Strength.Value)
ds:SetAsync(plr.UserId.."Gems", plr.leaderstats.Gems.Value)
ds:SetAsync(plr.UserId.."Equippedst" ,plr.Equippedst.Value)
ds:SetAsync(plr.UserId.."Class", plr.leaderstats.Class.Value)
ds:SetAsync(plr.UserId.."Storage",plr.Storage.Value)
ds:SetAsync(plr.UserId.."Equippedcl",plr.Equippedcl.Value)
ds:SetAsync(plr.UserId.."Ownedst",ownedstr)
ds:SetAsync(plr.UserId.."Ownedtools",ownedtools)
ds:SetAsync(plr.UserId.."Ownedcl",ownedcl)
ds:SetAsync(plr.UserId.."Equipped" ,plr.Equipped.Value)
end)
end)
game:BindToClose(function(plr)
wait(2)
pcall(function()
local ownedstr = {}
local ownedtools = {}
local ownedcl = {}
for i,v in pairs(plr.Ownedst:GetChildren()) do
table.insert(ownedstr,v.Name)
end
for i,v in pairs(plr.Ownedtools:GetChildren()) do
table.insert(ownedtools,v.Name)
end
for i,v in pairs(plr.Ownedcl:GetChildren()) do
table.insert(ownedcl,v.Name)
print(ownedcl)
end
ds:SetAsync(plr.UserId.."Coins", plr.leaderstats.Coins.Value)
ds:SetAsync(plr.UserId.."Strength", plr.leaderstats.Strength.Value)
ds:SetAsync(plr.UserId.."Gems", plr.leaderstats.Gems.Value)
ds:SetAsync(plr.UserId.."Equippedst" ,plr.Equippedst.Value)
ds:SetAsync(plr.UserId.."Class", plr.leaderstats.Class.Value)
ds:SetAsync(plr.UserId.."Storage",plr.Storage.Value)
ds:SetAsync(plr.UserId.."Equippedcl",plr.Equippedcl.Value)
ds:SetAsync(plr.UserId.."Ownedst",ownedstr)
ds:SetAsync(plr.UserId.."Ownedtools",ownedtools)
ds:SetAsync(plr.UserId.."Ownedcl",ownedcl)
ds:SetAsync(plr.UserId.."Equipped" ,plr.Equipped.Value)
end)
end)
return save