I created a script that should save purchased items in a folder. And it seems to work in Roblox Studio, but in game it doesn’t work and gives an error. I tried to use the function waitforchild, but it doesn’t work either.
script
local Players = game:GetService("Players")
local dataStoreService = game:GetService("DataStoreService")
local dataStore = dataStoreService:GetDataStore("SaveMyData")
function saveData(player)
local tycoon = player:FindFirstChild("TycoonOwned").Value
local purchases = player:FindFirstChild("TycoonOwned").Value.Purchases
local tycoonData = {}
for i, object in ipairs(purchases:GetChildren()) do
table.insert(tycoonData, object.Name)
end
local success, Error = pcall(function()
dataStore:SetAsync(player.UserId, tycoonData)
end)
if not success then
warn(Error)
end
local newTycoon = game.ServerStorage:FindFirstChild(tycoon.Name):Clone()
newTycoon.Parent = tycoon.Parent
tycoon:Destroy()
end
local function Buttons(button)
button.Button.CanCollide = false
button.Button.Transparency = 1
button.Button.BillboardGui.Enabled = false
end
script.Parent.ClaimTycoon.Event:Connect(function(tycoon)
local tycoonOwner = tycoon.Values.OwnerValue.Value
local tycoonData
local success, Error = pcall(function()
tycoonData = dataStore:GetAsync(tycoonOwner.UserId)
end)
if not success then
warn(Error)
end
if success and tycoonData then
local tycoonClone = game.ServerStorage:FindFirstChild(tycoon.Name):Clone()
tycoonClone.Parent = tycoon.Parent
tycoonClone.Values.OwnerValue.Value = tycoon.Values.OwnerValue.Value
tycoonOwner.TycoonOwned.Value = tycoonClone
tycoonClone.MainItems.OwnerDoor.Title.SurfaceGui.TextLabel.Text = tycoon.MainItems.OwnerDoor.Title.SurfaceGui.TextLabel.Text
tycoonClone.MainItems.OwnerDoor.Door.Transparency = 1
tycoon:Destroy()
tycoon = tycoonClone
local purchasesFolder = tycoonClone:FindFirstChild("Purchases")
local purchasedItemsFolder = tycoonClone:FindFirstChild("PurchasedItems")
local buttonsFolder = tycoonClone:FindFirstChild("Buttons")
for i, button in ipairs(buttonsFolder:GetChildren()) do
if button:FindFirstChild("Object") then
local object = purchasedItemsFolder:FindFirstChild(button.Object.Value)
if object and table.find(tycoonData, object.Name) then
object.Parent = purchasesFolder
Buttons(button)
end
end
end
end
end)
Players.PlayerRemoving:Connect(function(player)
saveData(player)
end)
game:BindToClose(function()
for i, player in ipairs(game.Players:GetPlayers()) do
saveData(player)
end
end)