my problem is that every save script i have is broken and i need an script that will save like this one
local ds = game:GetService("DataStoreService"):GetDataStore("-tCodes01") game.Players.PlayerAdded:Connect(function(player) local key = "codes-"..player.userId local folder = Instance.new("Folder",player) folder.Name = "Codes" local save = ds:GetAsync(key) if save then for i = 1,#save do local temp = Instance.new("BoolValue",folder) temp.Name = save[i] end end end) game.ReplicatedStorage.EnterCode.OnServerEvent:Connect(function(player,reward,code) local key = "codes-"..player.userId local currency = player.leaderstats:FindFirstChild("Money") -- Name of your currency currency.Value = currency.Value + reward local bool = Instance.new("BoolValue",player.Codes) bool.Name = code bool.Value = true local activated = {} for i,v in pairs(player.Codes:GetChildren()) do if v:isA("BoolValue") then table.insert(activated, v.Name) ds:SetAsync(key,activated) end end end)
I have a script for leaderstats but if you ever want to reset the leaderstats, it won't work since the data is burned onto the game. Here is the script:
local dataStoreService = game:GetService("DataStoreService") local myDataStore = dataStoreService:GetDataStore("myDataStore") local players = game:GetService("Players") local plrsLeft = 0
players.PlayerAdded:Connect(function(player) plrsLeft = plrsLeft + 1 local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player
local cash = Instance.new("IntValue") cash.Name = "Coins"
--Change this name to the name of your currency. cash.Parent = leaderstats
local success1,response1 = pcall(myDataStore.GetAsync,myDataStore,player.UserId) if success1 then cash.Value = response1 else warn(response1) end while true do wait(30) local success2,response2 = pcall(myDataStore.UpdateAsync,myDataStore,player.UserId,function(oldValue) return cash.Value end) if not success2 then warn(response2) end end
end)
local BindEvent = Instance.new("BindableEvent") players.PlayerRemoving:Connect(function(player) plrsLeft = plrsLeft - 1
local success,response = pcall(myDataStore.UpdateAsync,myDataStore,player.UserId,function(oldValue) return player.leaderstats.Coins.Value end) if success then BindEvent:Fire() else warn(response) end
end)
game:BindToClose(function() while plrsLeft > 0 do BindEvent.Event:Wait() end end)