local DataStoreService = game:GetService("DataStoreService") local DataStore = game:GetService("DataStoreService"):GetDataStore("Testin") local Players = game:GetService("Players")
local failedToGet = {} local IS_BIND_TO_CLOSE = false
local function WaitForRequestBudget(requestType, requestsNeeded) local currentBudget = DataStoreService:GetRequestBudgetForRequestType(requestType) while currentBudget < (requestsNeeded or 1) do currentBudget = DataStoreService:GetRequestBudgetForRequestType(requestType) wait(5) end end
local function SaveData(player, dontWaitForRequest) if not failedToGet[player.Name] then
local success, errormessage local retries = 0 local data = { player.Strength.Value, player.Tokens.Value, player.Endurance.Value, player.Psp.Value, player.Agility.Value, player.Multipliers.Multi.Value, player.Multipliers.eMulti.Value, player.Multipliers.pMulti.Value, player.Multipliers.aMulti.Value, player.TotalPower.Value, player.Powers.hasFly.Value, player.Powers.hasEnergyPunch.Value, player.Powers.hasInvisability.Value, player.Class.Value, player.leaderstats.Killstreak.Value, player.leaderstats.Status.Value, player.Reputation.Value, } repeat if not dontWaitForRequest then --I use this so the requestbudget function doesnt yield when a server is shutting down, there is only 30 seconds to save every players data WaitForRequestBudget(Enum.DataStoreRequestType.GetAsync) end success, errormessage = pcall(function() DataStore:UpdateAsync(player.UserId, function(data) -- Only save data if it was updated since it was loaded return data ~= data and data or nil end) retries += 1 end) until success or retries >= 5 if retries >= 5 then warn(("Error saving %s's data: %s"):format(player.Name, errormessage)) end end failedToGet[player.Name] = nil
end
Players.PlayerAdded:Connect(function(player)
local stats = Instance.new("Folder", player) stats.Name = "leaderstats" local Multis = Instance.new("Folder", player) Multis.Name = "Multipliers" local Lbs = Instance.new("Folder", player) Lbs.Name = "Leaderboard" local Title = Instance.new("StringValue", stats) Title.Name = "Status" Title.Value = "Innocent" local Streak = Instance.new("IntValue", stats) Streak.Name = "Killstreak" Streak.Value = 0 local Rep = Instance.new("NumberValue", player) Rep.Name = "Reputation" Rep.Value = 0 local Class = Instance.new("StringValue", player) Class.Name = "Class" Class.Value = "F-Class" local Tokens = Instance.new("IntValue", player) Tokens.Name = "Tokens" Tokens.Value = 1e6 local strength = Instance.new("NumberValue", player) strength.Name = "Strength" strength.Value = 0 local quest = Instance.new("NumberValue", player) quest.Name = "Quest" quest.Value = 0 local lbstrength = Instance.new("NumberValue", Lbs) lbstrength.Name = "LBStrength" lbstrength.Value = 0 local agility = Instance.new("NumberValue", player) agility.Name = "Agility" agility.Value = 0 local psp = Instance.new("NumberValue", player) psp.Name = "Psp" psp.Value = 0 local lbpsp = Instance.new("NumberValue", Lbs) lbpsp.Name = "LBPsp" lbpsp.Value = 0 local Mult = Instance.new("IntValue", Multis) Mult.Name = "Multi" Mult.Value = 1 local eMult = Instance.new("IntValue", Multis) eMult.Name = "eMulti" eMult.Value = 1 local pMult = Instance.new("IntValue", Multis) pMult.Name = "pMulti" pMult.Value = 1 local aMult = Instance.new("IntValue", Multis) aMult.Name = "aMulti" aMult.Value = 1 local zoneMult = Instance.new("IntValue", player) zoneMult.Name = "ZoneMulti" zoneMult.Value = 1 local pZoneMult = Instance.new("IntValue", player) pZoneMult.Name = "pZoneMulti" pZoneMult.Value = 1 local aZoneMult = Instance.new("IntValue", player) aZoneMult.Name = "aZoneMulti" aZoneMult.Value = 1 local End = Instance.new("NumberValue", player) End.Name = "Endurance" End.Value = 0 local lbEnd = Instance.new("NumberValue", Lbs) lbEnd.Name = "LBEndurance" lbEnd.Value = 0 local TotalPower = Instance.new("NumberValue", player) TotalPower.Name = "TotalPower" TotalPower.Value = strength.Value + psp.Value + End.Value + agility.Value local powers = Instance.new("Folder", player) powers.Name = "Powers" local hasAura = Instance.new("BoolValue", powers) hasAura.Name = "hasAura" hasAura.Value = false local hasFly = Instance.new("BoolValue", powers) hasFly.Name = "hasFly" hasFly.Value = true local hasEnergyPunch = Instance.new("BoolValue", powers) hasEnergyPunch.Name = "hasEnergyPunch" hasEnergyPunch.Value = true local IsInvisible = Instance.new("BoolValue", player) IsInvisible.Name = "IsInvisible" IsInvisible.Value = false local hasInvisability = Instance.new("BoolValue", powers) hasInvisability.Name = "hasInvisability" hasInvisability.Value = true local ctrl = Instance.new("BoolValue", player) ctrl.Name = "Ctrl" ctrl.Value = false player.CharacterAdded:connect(function() local hum = player.Character:WaitForChild("Humanoid") if hum then hum.MaxHealth = (End.Value + 100) * 10 hum.Health = hum.MaxHealth * 0.7 end end) local success, errormessage success, errormessage = pcall(function() WaitForRequestBudget(Enum.DataStoreRequestType.GetAsync) local data = DataStore:GetAsync("Player_"..player.UserId) if data then player.Strength.Value = data[1] player.Tokens.Value = data[2] player.Endurance.Value = data[3] player.Psp.Value = data[4] player.Agility.Value = data[5] player.Multipliers.Multi.Value = data[6] player.Multipliers.eMulti.Value = data[7] player.Multipliers.pMulti.Value = data[8] player.Multipliers.aMulti.Value = data[9] player.TotalPower.Value = data[10] player.Powers.hasFly.Value = data [11] player.Powers.hasEnergyPunch.Value = data[12] player.Powers.hasInvisability.Value = data[13] player.Class.Value = data[14] player.leaderstats.Killstreak.Value = data[15] player.leaderstats.Status.Value = data[16] player.Reputation.Value = data[17] player.Leaderboard.LBStrength.Value = math.floor(player.Strength.Value / 1e12) player.Leaderboard.LBPsp.Value = math.floor(player.Psp.Value / 1e12) player.Leaderboard.LBEndurance.Value = math.floor(player.Endurance.Value / 1e12) end end) local Player = game:GetService("Players").LocalPlayer strength.Changed:Connect(function() TotalPower.Value = strength.Value + psp.Value + End.Value end) psp.Changed:Connect(function() TotalPower.Value = strength.Value + psp.Value + End.Value end) End.Changed:Connect(function() TotalPower.Value = strength.Value + psp.Value + End.Value end) Rep.Changed:Connect(function() if Rep.Value == 0 then Title.Value = "Innocent" elseif Rep.Value >= 1 and Rep.Value < 5 then Title.Value = "Protector" elseif Rep.Value >= 5 and Rep.Value < 20 then Title.Value = "Guardian" elseif Rep.Value > 19 then Title.Value = "Superhero" elseif Rep.Value <= -1 and Rep.Value > -5 then Title.Value = "Lawbreaker" elseif Rep.Value <= -5 and Rep.Value > -20 then Title.Value = "Criminal" elseif Rep.Value < -19 then Title.Value = "Supervillain" end end)
end)
Players.PlayerRemoving:Connect(SaveData)
game:BindToClose(function() IS_BIND_TO_CLOSE = true
for _, player in ipairs(Players:GetPlayers()) do coroutine.wrap(SaveData)(player, true) end
end)
while not IS_BIND_TO_CLOSE do wait(10)
for _, player in ipairs(Players:GetPlayers()) do if IS_BIND_TO_CLOSE then -- dont save data if server is about to shutdown return end coroutine.wrap(SaveData)(player) end
end
-- Change this local data = DataStore:GetAsync("Player_"..player.UserId) -- To this local data = DataStore:GetAsync(player.UserId)
Your key wasn't matching.