Give money only once

So I’ve got this script that basically colours a part if the player touches it. And I also recently made it to give money to the player per colouring via a remote event. However, it gives money every time the player touches the part and not just once when it colours it. How can I fix this?

--COLORS:
local cork = BrickColor.new("Cork")
local green = BrickColor.new("Bright green")
--

local function onGrassTouch(part)
	
	local ReplicatedStorage = game:GetService("ReplicatedStorage")
	local remoteEvent = ReplicatedStorage:WaitForChild("GiveMoney")
	
	
	if part.Name == "Desert" and part.BrickColor ~= "Cork" then
		part.BrickColor = cork
		part.BrickColorValue.Value = part.BrickColor
		remoteEvent:FireServer() -- gives money to the player
		
	else
		print("oof")
	end
	---------------------
	if part.Name == "Grass" then
		part.BrickColor = green
		part.BrickColorValue.Value = part.BrickColor
	else
		print("oof")
	end
end

for _, object in next, character:GetChildren() do 
	if object:IsA("BasePart") then
		object.Touched:Connect(onGrassTouch)
	end
end

You can just check if the part’s color is the original color and if so, then give money, else don’t.

if part.BrickColor == OriginalColor then
    --Add Money
else
    print("Already got money.")
end

If you want multiple players to able to get the money then you can put a value in them then update if they got money and check then giving money if they already got or not. Or you can add them to a table and check if they are in the table.

local Touched = {}
remoteEvent.OnServerEvent:Connect(function(Player, Part)
    if not table.find(Touched, Part) then
        table.insert(Touched, Part)
        --Give Cash
    end
end)

When you fire your remote event make sure to pass in the Part as a parameter.