local DataStoreService = game:GetService("DataStoreService")
local SaveData = DataStoreService:GetDataStore("SaveData")
local ToolFolder = game:GetService("ServerStorage"):FindFirstChild("SavedTools")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player)
local ToolData = SaveData:GetAsync(Player.UserId)
local Backpack = Player:WaitForChild("Backpack")
local StarterGear = Player:WaitForChild("StarterGear")
if ToolData then
for i, v in pairs(ToolData) do
if ToolFolder:FindFirstChild(v) and not Backpack:FindFirstChild(v) and not StarterGear:FindFirstChild(v) then
ToolFolder[v]:Clone().Parent = Backpack
ToolFolder[v]:Clone().Parent = StarterGear
end
end
end
Player.CharacterRemoving:Connect(function(Character)
Character:WaitForChild("Humanoid"):UnequipTools()
end)
end)
Players.PlayerRemoving:Connect(function(Player)
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)
game:BindToClose(function()
task.wait(2)
end)
Ok⦠thatās odd I didnāt buy anything but I remembered a item I bought last time even though last time it didnāt save lol.
what do you mean? char limitation
Ok so it does save the items but if I didnāt have that small code there it wouldnāt save them
ye, this is because the script stops running cause the server no longer exists.
or something along the lines of this
I recommend using pcall
function when you loading data
.
local ToolData
local success, errMsg = pcall(function()
ToolData = SaveData:GetAsync(Player.UserId)
end)
if not success then
player:Kick()
warn(errMsg)
end
if success and ToolData then
-- next code
end
yes, I was going to mention this but had a feeling this is what you were going to say
So like this?
local success, errMsg = pcall(function()
ToolData = SaveData:GetAsync(Player.UserId)
end)
if not success then
player:Kick()
warn(errMsg)
end
if success and ToolData then
local DataStoreService = game:GetService("DataStoreService")
local SaveData = DataStoreService:GetDataStore("SaveData")
local ToolFolder = game:GetService("ServerStorage"):FindFirstChild("SavedTools")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player)
local ToolData = SaveData:GetAsync(Player.UserId)
local Backpack = Player:WaitForChild("Backpack")
local StarterGear = Player:WaitForChild("StarterGear")
if ToolData then
for i, v in pairs(ToolData) do
if ToolFolder:FindFirstChild(v) and not Backpack:FindFirstChild(v) and not StarterGear:FindFirstChild(v) then
ToolFolder[v]:Clone().Parent = Backpack
ToolFolder[v]:Clone().Parent = StarterGear
end
end
end
Player.CharacterRemoving:Connect(function(Character)
Character:WaitForChild("Humanoid"):UnequipTools()
end)
end)
Players.PlayerRemoving:Connect(function(Player)
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)
game:BindToClose(function()
task.wait(2)
end)
end
Also when you using SetAsync
, I recommend pcall
function.
Could you give me a example to a pcall function Iām new thanks
local success, errMsg = pcall(function()
ToolData = SaveData:GetAsync(Player.UserId)
end)
if not success then
player:Kick("Error while loading data")
warn(errMsg)
end
if success and ToolData then
local DataStoreService = game:GetService("DataStoreService")
local SaveData = DataStoreService:GetDataStore("SaveData")
local ToolFolder = game:GetService("ServerStorage"):FindFirstChild("SavedTools")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player)
local ToolData = SaveData:GetAsync(Player.UserId)
local Backpack = Player:WaitForChild("Backpack")
local StarterGear = Player:WaitForChild("StarterGear")
if ToolData then
for i, v in pairs(ToolData) do
if ToolFolder:FindFirstChild(v) and not Backpack:FindFirstChild(v) and not StarterGear:FindFirstChild(v) then
ToolFolder[v]:Clone().Parent = Backpack
ToolFolder[v]:Clone().Parent = StarterGear
end
end
end
Player.CharacterRemoving:Connect(function(Character)
Character:WaitForChild("Humanoid"):UnequipTools()
end)
end)
Players.PlayerRemoving:Connect(function(Player)
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
local success, errMsg = pcall(function()
ToolData = SaveData:SetAsync(Player.UserId, ToolTable)
end)
end)
game:BindToClose(function()
task.wait(2)
end)
end
Thatās it I think
Ok its broke again⦠I swear its the animations I go too change one and it breaks I thinkā¦
And the output says
ServerScriptService.SaveTools:6: attempt to index nil with āKickā
ooh try :kick
lowercase. I made a typo :<
output says
ServerScriptService.SaveTools:6: attempt to index nil with ākickā
on line 6 which is
Player:kick(āError while loading dataā)
what is parameter name of player?
parameter Sorry what is that is it a players name?
parameter is like
game.Players.PlayerAdded:Connect(function(player) -- this variable
end)
so try this
player:kick("Error while loading data")
Output: says:
ServerScriptService.SaveTools:6: attempt to index nil with ākickā