What to do if i want to make multiple types of bullets

im thinking of making a bindable event that the bullets handler fires with the raycast resaults
while my friend is telling me to make a tag or a string value to check the type of the bullet
which one is more efficient?

I am not to sure what you are asking but I believe using a class system would make this a lot easier to handle as you could just do something like this:

local Bullet = {}

function Bullet.new(color, shape, size, ...)
	local self = {}
	return setmetatable(self, {__index = Bullet})
end

function Bullet:Init()
	
end

return Bullet

which would make your code more organized as you can just create your bullets. I am still not sure what you’re going for as you were considering using string values, but if you were to do that then I would say go with attributes as they are faster.

i mean connecting a function to a bullet