You would have to make a IntValue which you would then listen to see when its value is changed. When it is you would see if newValue > requiredAmountForReward, and if it is you would reward it to them however you want to. To hold the reward milestones you can make a module to look back on in your script.
Hopefully this helps you with awarding the rewards, sorry I can’t type out the entire code right now!
Then you could go in another script and call that value inside the module script by requiring the module and going through the hierarchy.
local coolModule = require(PathToModule)
—now assume this code is inside a event that
—fires when the players IntValue is changed.
if newValue > coolModule[currentLevel].Level then
— find coolModule[currentLevel].Item
—and change the redeemed value to true
—so that you know they have redeemed it.
end
Hopefully this explains everything a little more in depth