I'm trying to make it so that when you run over the touched block with a certain tool the tool will only be removed and points will only be given for a certain color.

Right now whether it is purple or gray the tool will be removed and XP will be given. I only want XP to be given and the tool to be removed if the block is purple. The particle is also not working in this current version.

I had started with a removal code which worked great when I didn't care about the color of the block. I thought part of the problem was it didn't have a debounce so I added that. I tried elseif statements which will print into Output but does not stop the tool from being removed. I tried doubling the check for purple twice so maybe it would stop it somewhere, and no.

Basically it seems like it always thinks the current color of the part is 'purple' because the if statement isn't using it as a conditional. It will remove the part and give XP.

Here's the code as it is:

local expPart = script.Parent

local debounce = true

local purple = Color3.fromRGB(100, 0, 100)
local gray = Color3.fromRGB(67, 67, 67)

currentColor = expPart.Color

local function delivery(hit)
	if currentColor == purple and debounce then
		debounce = false
		local Humanoid = hit.Parent:FindFirestChild("Humanoid")
		if currentColor == purple and Humanoid and debounce == false then
			for i,item in pairs(hit.Parent:GetChildren()) do
				if item.Name == "Box" and item:IsA("Tool") then
					local stats = game.Players[hit.Parent.Name].leaderstats
					local expGive = stats:WaitForChild("XP")
					expGive.Value = expGive.Value +10
					local playerCharacter = game.Players[hit.Parent.Name].Character
					local particle = Instance.new("ParticleEmitter")
					particle.Color = ColorSequence.new(currentColor)
					particle.Parent = playerCharacter:WaitForChild("Head")
					debounce = true
					wait(2)
					particle:Destroy()
					item:Destroy()
				end		
			end
			for i,item in pairs(game.Players[hit.Parent.Name].Backpack:GetChildren()) do
				if item.Name == "Box" and item:IsA("Tool") then
					item:Destroy()
					wait(2)
					debounce = true
				end
			end
		end
		wait(2)
		debounce = true
	elseif currentColor == gray and debounce then
		debounce = false
		print("It is gray")
		wait(2)
		debounce = true
		return
	end
end

expPart.Touched:Connect(delivery)

while true do
	local randomTimer = math.random(1,22)
	expPart.Color = purple
	wait(10)
	expPart.Color = gray
	wait(randomTimer)
end

I started with this code originally:

expPart.Touched:connect(function(hit)
	local Humanoid = hit.Parent:FindFirstChild("Humanoid")
	if Humanoid and currentColor == purple then
		for i,item in pairs(hit.Parent:GetChildren()) do
			if item.Name == "Box" and item:IsA("Tool") then
				local stats = game.Players[hit.Parent.Name].leaderstats
				local expGive = stats:WaitForChild("XP")
				expGive.Value = expGive.Value +10
				local playerCharacter = game.Players[hit.Parent.Name].Character
				local particle = Instance.new("ParticleEmitter")
				particle.Color = ColorSequence.new(currentColor)
				particle.Parent = playerCharacter:WaitForChild("Head")
				wait(1)
				particle:Destroy()
				item:Destroy()
			end
		end
		for i,item in pairs(game.Players[hit.Parent.Name].Backpack:GetChildren()) do
			if item.Name == "Box" and item:IsA("Tool") then
				item:Destroy()			
			end
		end
	end	
end)

I appreciate all of you taking a look at this!