How to make script run only once

I have a ‘‘VIP’’ gamepass which is basically supposed to give you 1500 Coins only once

I’m getting 1500 coins each time I join a game how do i make it so that Its only a one time thing?

local gamepassID = 22222
local stat = "Coins"
local gamepassSTAT = 1500

game.Players.PlayerAdded:Connect(function(plar)

	local awarded = Instance.new("BoolValue", plar)
	awarded.Name = "Awarded"
	if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(plar.UserId, gamepassID) and plar.Awarded.Value == false then
		plar.Awarded.Value = true
		plar:WaitForChild("leaderstats").Coins.Value = plar:WaitForChild("leaderstats").Coins.Value + gamepassSTAT
	end
end)


while wait(10) do
	for i, v in pairs(game.Players:GetChildren()) do
		if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(v.UserId, gamepassID) and v:WaitForChild("Awarded").Value == false then
			v.Awarded.Value = true
			v.leaderstats:FindFirstChild(stat).Value = v.leaderstats:FindFirstChild(stat).Value + gamepassSTAT
		end
	end
end

You would use a datastore to check whether they had already gotten the reward.

local dss = game:GetService("DataStoreService")
local ds = dss:GetDataStore("ClaimedVIPReward")

local gamepassID = 22222
local stat = "Coins"
local gamepassSTAT = 1500

game.Players.PlayerAdded:Connect(function(plar)

	local awarded = Instance.new("BoolValue", plar)
	awarded.Name = "Awarded"
	awarded.Value = ds:GetAsync(plar.UserId) or false

	if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(plar.UserId, gamepassID) and plar.Awarded.Value == false then
		ds:SetAsync(plar.UserId, true)
		plar.Awarded.Value = true
		plar:WaitForChild("leaderstats").Coins.Value = plar:WaitForChild("leaderstats").Coins.Value + gamepassSTAT
	end
end)


while wait(10) do
	for i, v in pairs(game.Players:GetChildren()) do
		if game:GetService("MarketplaceService"):UserOwnsGamePassAsync(v.UserId, gamepassID) and v:WaitForChild("Awarded").Value == false then
			v.Awarded.Value = true
			v.leaderstats:FindFirstChild(stat).Value = v.leaderstats:FindFirstChild(stat).Value + gamepassSTAT
		end
	end
end
1 Like