PlayerRemoving issue!

  1. What do you want to achieve?
    I want this script working better than now :joy:
  2. What is the issue?
    I get this error : Script timeout: exhausted allowed execution time
  3. What solutions have you tried so far?
    I’ve tried to reduce the script timeout in the setting of roblox studio to -1 and it’s work a bit better than if I do nothing but I get the error …
local MarketplaceService = game:GetService("MarketplaceService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TeleportService = game:GetService("TeleportService")
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")

local PlayerData = DataStoreService:GetDataStore("PlayerData")

local Purchased = ReplicatedStorage.Purchased
local Save = ReplicatedStorage.Save

local SavingValue = nil

local Success, CurrentPlayerData

local function ProcessReceipt(ReceiptInfo)
	local Player = Players:GetPlayerByUserId(ReceiptInfo.PlayerId)
	if not Player then
		return Enum.ProductPurchaseDecision.NotProcessedYet
	end
	Purchased:FireClient(Player)
	return Enum.ProductPurchaseDecision.PurchaseGranted
end

MarketplaceService.ProcessReceipt = ProcessReceipt

Save.OnServerEvent:Connect(function(Player, ServerInfo)
	local Access = TeleportService:ReserveServer(10998435944)
	ServerInfo = {ServerInfo}
	table.insert(ServerInfo, Player)
	table.insert(ServerInfo, "Access")
	if SavingValue == nil then	
		SavingValue = {ServerInfo}
	else
		table.insert(SavingValue, ServerInfo)
	end
end)

Players.PlayerRemoving:Connect(function(Player)
	repeat
		Success, CurrentPlayerData = pcall(function()
			return PlayerData:GetAsync(Player.UserId)
		end)
	until Success
	if SavingValue ~= nil then
		for Count = 1, #SavingValue do
			if Player == SavingValue[Count][2] then
				if CurrentPlayerData ~= nil then
					table.insert(CurrentPlayerData[2], SavingValue[Count])					
				else
					CurrentPlayerData = {{}, {SavingValue[Count]}}
				end
			end
		end
	end
	repeat
		Success = pcall(function()
			PlayerData:SetAsync(Player.UserId, CurrentPlayerData)
		end)
	until Success
end)

You need to add a task.wait() inside the repeats because it won’t wait for the return PlayerData:GetAsync(Player.UserId) to finish executing.

	repeat
        task.wait()
		Success, CurrentPlayerData = pcall(function()
			return PlayerData:GetAsync(Player.UserId)
		end)
	until Success
1 Like

Please I still need help !
Every help will be helpful !

add task wait in loop will reduce the lag
task.wait(0.5)

repeat
task.wait(0.5)
		Success, CurrentPlayerData = pcall(function()
			return PlayerData:GetAsync(Player.UserId)
		end)
	until Success