I made a playerGui that stores the amount of gold a player currently has after buying a citizen. I read that setting ResetPlayerGuiOnSpawn = false would prevent this. I put this script into both a Local and regular script and the playerGui still resets after they die. I use print(guiReset) and it comes back with false.
wait(3) -- Waits for the player to load before starting the script. Will change to a WaitForChild later
while wait(0.5) do
for i,v in pairs (game.Players:GetPlayers()) do -- GetPlayers return the players in the game. V refers to any objects in the players tab
wait(1)
guiReset = game:GetService("StarterGui").ResetPlayerGuiOnSpawn
guiReset = false
print(guiReset)
goldGui = v.PlayerGui.resources.resourcesFrame.Gold
goldGui.Text = goldGui.amount.Value
end
end

4 comments
Not a full answer, but my suggestion is to keep ResetPlayerGuiOnSpawn to true but have a :Destroy() script for when the player resets
What would I destroy? If I destroy the gui when the player dies, the new one will still respawn and reset. if I destroy the new one after they die, they wont have a gui
I have an idea, cant test it yet but the idea is that anytime their gold value is updated it sends the amount to a table. In the script towards the bottom I will put in some code that tells the script, send their gold value to TableA. Then, send it back to their gold value.
I gave it a try and it didn't work. Though I'm still new to LUA but improving. If I ever find a way to make the playerGui not reset after death I will post it