local DataStoreService = game:GetService("DataStoreService") local playerData = DataStoreService:GetDataStore("PlayerData") local function playerAdded(player) local progress = Instance.new("Folder", player) progress.Name = "Progress" local playerUserId = '-progress'..player.UserId local data = playerData:GetAsync(playerUserId) if data then for i, v in pairs(progress:GetChildren()) do v.Value = data["Trees"] --Trees as example end else print("New Game") end end local function create_table(player) local playerProgress = {} for i, progress in pairs(player.Progress:GetChildren()) do playerProgress[progress.Name] = progress.Value end return playerProgress end local function onPlayerExit(player) local playerProgress = create_table(player) local success, err = pcall(function() local playerUserID = '-progress'..player.UserId playerData:SetAsync(playerUserID, playerProgress) end) if not success then warn("Could not save tycoon") end end game.Players.PlayerAdded:Connect(playerAdded) game.Players.PlayerRemoving:Connect(onPlayerExit)
hi, im trying to make an autosave for my tycoon game and this is my script so far what im trying to achieve is that when a player purchase something, an ObjectValue will be created into the Progress Folder... When the player leaves the game, the Progress Folder and its object value will be saved. Meanwhile, when the player enter the game and touched the claim button, i want it to check the player's Progress Folder and load what he/she bought. The claim button script is below. But i dont know if my idea is efficient or not. I tried to play the game, but the tycoon doesn't save. If you guys think i should change how the autosave works, feel free to comment.. Im still new to scripting thank you
local button = script.Parent local tycoon = script.Parent.Parent local buttonBase = script.Parent.Parent.ClaimBase local manage = tycoon.Management local function getPlayerFromPart(part) local character = part.Parent if character then local player = game.Players:GetPlayerFromCharacter(character) return player end end local function assignTycoon(player) local playerValue = Instance.new("ObjectValue") playerValue.Name = "TycoonOwned" playerValue.Value = tycoon playerValue.Parent = player tycoon.TycoonOwner.Value = player end local function tycoonSave(player) local progress = player:WaitForChild("Progress") for i, v in pairs(progress:GetChildren()) do if v.Value then v.Value.BuyButon:Destroy() for j, k in pairs(v.Value.PurchasedItem:GetChildren()) do k.Transparency = 0 k.CanCollide = true end end end end local function onTouched(otherPart) local player = getPlayerFromPart(otherPart) if player then local tycoonOwned = player:FindFirstChild("TycoonOwned") if not tycoonOwned then assignTycoon(player) tycoonSave(player) button:Destroy() buttonBase:Destroy() end end end button.Touched:Connect(onTouched)