Script flood | Optimization

function OnTouch(part)
	if (part.Parent:FindFirstChild("Humanoid") ~= nil) then
		local p = game.Players:GetPlayerFromCharacter(part.Parent)
		i    f (p ~= nil) then
    			print("Awarding BadgeID: " ..script.Parent.BadgeID.Value .. " to UserID: " .. p.userId)
    			local b = game:GetService("BadgeService")
    			b:AwardBadge(p.userId, script.Parent.BadgeID.Value)
    		end
    	end
    end

    script.Parent.Touched:connect(OnTouch)

How can i fix scripts like this?

1 Like

Oh dear

Here’s a fixed version, just simply check if the player has the badge or not using UserHasBadgeAsync()

local BadgeService = game:GetService("BadgeService")
local BadgeID = script.Parent.BadgeID

local function onTouched(Part)
	local Player = game.Players:GetPlayerFromCharacter(Part.Parent)
	
	if Player then
		if not BadgeService:UserHasBadgeAsync(Player.UserId, BadgeID.Value) then
			BadgeService:AwardBadge(Player.UserId, BadgeID.Value)
			print("Awarding Badge to: "..Player.Name.."| Badge ID: ", BadgeID.Value)
		end
	end
end

script.Parent.Touched:Connect(onTouched)