I am making a Gui that checks for a BoolValue using DataStoreService when a player joins the game.
How this works is, when a player clicks on a TextButton, a TextLabel will become visible and so does a GuiValue inside a folder in the player. When the player leaves the game, the GuiValue saves and remains true. When the player joins back, the GuiValue should still remain true for that player and the TextLabel checks if the GuiValue is true so then the TextLabel should remain visible.
Now here's the problem, when the player joins back into the game, the GuiValue remains True, but the TextLabel's Visibility remains False.
The only error i could find is: " Infinite yield possible on 'Players.Player1.PlayerGui:WaitForChild("SaveScreenGui")' " 'ServerScriptService.GuiDataStore', Line 11 - global loadGuiValue 'ServerScriptService.GuiDataStore', Line 24
Datastore Script in ServerScriptService:
local DSS = game:GetService("DataStoreService"):GetDataStore("GuiStore1")
local event = game.ReplicatedStorage.PlayerGuiEvent
function saveGuiValue(player)
DSS:SetAsync(player.userId, player.GuiFolder.GuiValue.Value)
print("Saved Gui Value")
end
function loadGuiValue(player)
player.GuiFolder.GuiValue.Value = DSS:GetAsync(player.userId)
local Gui = player:WaitForChild("PlayerGui"):WaitForChild("SaveScreenGui").TextLabel
event:FireClient(player, Gui)
end
function onPlayerEntered(newPlayer)
local GuiFolder = Instance.new("Folder", newPlayer)
GuiFolder.Name = "GuiFolder"
local guiValue = Instance.new("BoolValue", GuiFolder)
guiValue.Name = "GuiValue"
guiValue.Value = false
newPlayer:WaitForDataReady()
loadGuiValue(newPlayer)
end
function onPlayerRemoving(player)
local guiValue = player.GuiFolder:FindFirstChild("GuiValue")
if (guiValue ~= nil) then
saveGuiValue(player)
end
end
game.Players.PlayerAdded:Connect(onPlayerEntered)
game.Players.PlayerRemoving:Connect(onPlayerRemoving)
LocalScript inside the button with MouseButton1Click and checks for GuiValue:
local plr = game.Players.LocalPlayer
local event = game.ReplicatedStorage.PlayerGuiEvent
event.OnClientEvent:Connect(function(plr,Gui)
if plr.GuiFolder.GuiValue.Value == true then
Gui.Visible = true
else
Gui.Visible = false
end
end)
script.Parent.MouseButton1Click:Connect(function()
local guiValue = plr:WaitForChild("GuiFolder"):FindFirstChild("GuiValue")
local TextLabel = plr:WaitForChild("PlayerGui").SaveScreenGui.TextLabel
guiValue.Value = true
TextLabel.Visible = true
end)
