Need help fixing a time played script

Hello, I Need help fixing my time played script, i need it to increase +4 per second when the player buy a gamepass, do anyone know how can i fix this bug?

local Players = game:GetService(“Players”)
local MarketplaceService = game:GetService(“MarketplaceService”)

local GamePassID_X2 = 113157057 – Replace with your Game Pass ID for X2
local GamePassID_X4 = 264808140 – Replace with your Game Pass ID for X4
local GamePassID_X2_PerSecond = 26017526 – Replace with your Game Pass ID for X2 per second
local DeveloperProductID = 1839918053 – Replace with your Developer Product ID for +250 seconds
local DeveloperProductID_500 = 1840210818 – Replace with your Developer Product ID for +500 seconds
local DeveloperProductID_1000 = 1840971653 – Replace with your Developer Product ID for +1000 seconds

local function createLeaderstats(player)
local leaderstats = Instance.new(“Folder”)
leaderstats.Name = “leaderstats”
leaderstats.Parent = player

local playTime = Instance.new("IntValue")
playTime.Name = "TimePlayed"
playTime.Parent = leaderstats
playTime.Value = 0

end

local function updatePlaytime(player, increment)
while player.Parent do
local playTimeAttribute = player:GetAttribute(“PlayTime”) or 0
player:SetAttribute(“PlayTime”, playTimeAttribute + increment)

	-- Update leaderboard value
	if player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("TimePlayed") then
		player.leaderstats.TimePlayed.Value = player.leaderstats.TimePlayed.Value + increment
	end

	wait(1) -- Update every second
end

end

local function checkAndStartUpdatingPlaytime(player)
local increment = 1
local success_X2, hasPass_X2 = pcall(function() return MarketplaceService:UserOwnsGamePassAsync(player.UserId, GamePassID_X2) end)
local success_X4, hasPass_X4 = pcall(function() return MarketplaceService:UserOwnsGamePassAsync(player.UserId, GamePassID_X4) end)
local success_X2_PerSecond, hasPass_X2_PerSecond = pcall(function() return MarketplaceService:UserOwnsGamePassAsync(player.UserId, GamePassID_X2_PerSecond) end)

if success_X2 and hasPass_X2 then
	increment = 2 -- Default multiplier
	print("Player has Game Pass X2: Increment set to 2")
end
if success_X4 and hasPass_X4 then
	increment = 4 -- X4 multiplier
	print("Player has Game Pass X4: Increment set to 4")
end
if success_X2_PerSecond and hasPass_X2_PerSecond then
	increment = increment + 4 -- X2PerSecond multiplier
	print("Player has Game Pass X2 Per Second: Increment increased by 4")
end

-- Debug logs to ensure correct increment value is being set
print("Player:", player.Name, "Final Increment set to:", increment)

spawn(function() updatePlaytime(player, increment) end)

end

local function onPlayerAdded(player)
createLeaderstats(player)
player:SetAttribute(“PlayTime”, 0)
checkAndStartUpdatingPlaytime(player)
end

Players.PlayerAdded:Connect(onPlayerAdded)

for _, player in pairs(Players:GetPlayers()) do
onPlayerAdded(player)
end

MarketplaceService.PromptGamePassPurchaseFinished:Connect(function(player, gamePassId, wasPurchased)
if wasPurchased then
if gamePassId == GamePassID_X2 or gamePassId == GamePassID_X4 or gamePassId == GamePassID_X2_PerSecond then
checkAndStartUpdatingPlaytime(player)
end
end
end)

MarketplaceService.ProcessReceipt = function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if player then
local playTimeAttribute = player:GetAttribute(“PlayTime”) or 0
if receiptInfo.ProductId == DeveloperProductID then
player:SetAttribute(“PlayTime”, playTimeAttribute + 250)
elseif receiptInfo.ProductId == DeveloperProductID_500 then
player:SetAttribute(“PlayTime”, playTimeAttribute + 500)
elseif receiptInfo.ProductId == DeveloperProductID_1000 then
player:SetAttribute(“PlayTime”, playTimeAttribute + 1000)
end

	if player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("TimePlayed") then
		player.leaderstats.TimePlayed.Value = player:GetAttribute("PlayTime")
	end
end
return Enum.ProductPurchaseDecision.PurchaseGranted

end

1 Like