I've been working on this for like 5 days and can't figure it out because I have tiny brain. I've asked for help here multiple times but no matter what I do it won't work. I know the saving won't work because the data loading works completely fine.
Here's the code I have:
-- Written by MattVSNNL local PlayersService = game:GetService("Players") local dataStoreService = game:GetService("DataStoreService") local boolDataStore = dataStoreService:GetDataStore("BoolDataStore") PlayersService.PlayerAdded:Connect(function(player) local onMenu = Instance.new("BoolValue") onMenu.Name = "onMenu" onMenu.Parent = player local onMenuData = nil pcall(function() onMenuData = boolDataStore:GetAsync(player.UserId.."-onMenu") end) if onMenuData ~= nil then onMenu.Value = onMenuData else onMenu.Value = true end end) local bindableEvent = Instance.new("BindableEvent") PlayersService.PlayerRemoving:Connect(function(player) pcall(function() boolDataStore:SetAsync(player.UserId.."-onMenu", player.onMenu.Value) end) bindableEvent:Fire() print("Saved!") end) game:BindToClose(function() while #PlayersService:GetPlayers() > 0 do bindableEvent.Event:Wait() wait() end end)
Hello! Here is what you need to do:
-- Written by MattVSNNL
local PlayersService = game:GetService("Players") local dataStoreService = game:GetService("DataStoreService") local boolDataStore = dataStoreService:GetDataStore("BoolDataStore") PlayersService.PlayerAdded:Connect(function(player) local onMenu = Instance.new("BoolValue") onMenu.Name = "onMenu" onMenu.Parent = player onMenu.Changed:Connect(function() boolDataStore:SetAsync(plr.UserId, onMenu.Value) end) end) game.Players.PlayerRemoving:Connect(function(plr) ds:SetAsync(plr.UserId, plr.leaderstats.onMenu.Value) end)
Also make sure that "Enable Studio Access to API Services" is enabled in your game.
I'm not 100% sure if it's going to work, but if it does not, I'm here to help!
-KoalaKo_XD
Make sure "Enable Studio Access to API Services" is enabled in your game settings.
-- Written by MattVSNNL local PlayersService = game:GetService("Players") local RunService = game:GetService("RunService") local dataStoreService = game:GetService("DataStoreService") local boolDataStore = dataStoreService:GetDataStore("BoolDataStore") function loadData(player) local key = player.UserId .. "-onMenu" local onMenu = Instance.new("BoolValue") onMenu.Name = "onMenu" onMenu.Parent = player local success, data repeat success, data = pcall(boolDataStore.GetAsync, boolDataStore, key) until success or not PlayersService:FindFirstChild(player.Name) if success then onMenu.Value = data or true end end function saveData(player) local key = player.UserId .. "-onMenu" local onMenu = player:FindFirstChild("onMenu") if onMenu then local onMenuValue = onMenu.Value local success, result repeat success, result = pcall(boolDataStore.UpdateAsync, boolDataStore, key, function() return onMenuValue end) until success end end PlayersService.PlayerAdded:Connect(loadData) PlayersService.PlayerRemoving:Connect(saveData) game:BindToClose(function() if RunService:IsStudio() then task.wait(2) else local finished = Instance.new("BindableEvent") local allPlayers = PlayersService:GetPlayers() local leftPlayers = #allPlayers for _,player in ipairs(allPlayers) do coroutine.wrap(function() saveData(player) leftPlayers -= 1 if leftPlayers == 0 then finished:Fire() end end)() end finished.Event:Wait() end end)