I have been getting word that this works only once, but it seems that it should work multiple times.
debounce=false
script.Parent.Touched:connect(function(hit)
print(hit.Name)
plr=game.Players:GetPlayerFromCharacter(hit.Parent)
if plr then
print(plr.Name)
if debounce==true then
elseif debounce==false then
debounce=true
local PointsService = Game:GetService("PointsService")
local pointsToAward = PointsService:GetAwardablePoints()
if ( pointsToAward < 0 ) then
print("No Points left")
elseif ( pointsToAward > 0 ) then
pcall(function()
if Game:GetService("GamePassService"):PlayerHasPass(plr, 160676880) then
PointsService:AwardPoints(plr.userId, 50)
plr.PlayerGui.CollectSound:Play()
else
PointsService:AwardPoints(plr.userId, 25)
plr.PlayerGui.CollectSound:Play()
wait(5)
debounce=false
end
end)
end
-- Bind function to when points are successfully awarded
end
end
end)

7 comments
It looks fine to me. Have you tested it? By the way, your indentation could use some work. It's very difficult to read.
Yeah, what is weird is, in my game, people have been complaining that it stops working
Perhaps you're running out of Player Points to distribute?
No, I already thought if that, it isnt that. I am almost considering it could be a stack end in the part of it, causing it to work once? I thought maybe the CollectSound isnt in PlayerGui.
WAIT, does it matter if I say "plr=stuff" or "local plr=stuff"
The game has not run out of points. Its nothing to do with that. In game output tells me that "plr" is a nil value