Shooting an effect from a weapon.

I’m trying to make a smoke like effect come from my weapon, but I’m not sure about a few things.
How would I make it come from the weapon, and not my head?
How would I actually get it to fire forward? Right now it fires behind me at odd angles.
How would I make it look good in both third person and first person?

Currently this is my effect script
[lua]
function EFFECT:Init(data)

local pos = data:GetOrigin()
local dir = data:GetAngle()

local emitter = ParticleEmitter(pos)
for i=1, 2 do
	local X = math.Rand(-2, 2)
	local Y = math.Rand(-2, 2)
	local ppos = pos + Vector(X, Y, 0)
	local spray = emitter:Add("particle/particle_smokegrenade", ppos)
	if (spray) then
		
		spray:SetVelocity(dir*2)
		
		spray:SetLifeTime(0)
		spray:SetDieTime(math.Rand(0.5,1.5))
		
		local color = math.Rand(220,250)
		spray:SetColor(color, color, color)
		spray:SetStartAlpha(math.Rand(190,200))
		spray:SetEndAlpha(0)
		
		spray:SetStartSize(math.Rand(1,4))
		spray:SetEndSize(math.Rand(4,8))
		
		spray:SetRoll(math.Rand(0,360))
		spray:SetRollDelta(math.Rand(-4,4))
		
		local grav = math.Rand(-1,1)
		spray:SetGravity(Vector(grav, grav, grav))
		spray:SetAirResistance(math.Rand(0,10))
		
		spray:SetCollide(true)
		spray:SetBounce(0.5)
		
	end
end
emitter:Finish()

end

function EFFECT:Think()

return false

end

function EFFECT:Render()

end[/lua]

and this is in SWEP:PrimaryAttack()
[lua]local ply = self:GetOwner()
local ED = EffectData()
ED:SetOrigin(ply:GetShootPos())
ED:SetAngle(ply:GetAimVector())
util.Effect(“effect_bugspray”,ED)[/lua]


local ply = self:GetOwner()

should be


local ply = self.Owner

That doesn’t fix any problem I had, but thank you, I will change it.

I still can’t figure this out, anyone know how I’d do this?


(User was banned for this post ("Bump bumpity bump" - mahalis))