Particle Emmiter 'forgets' to stop emitting?

I have this script:

var projectile : Rigidbody;
var initialSpeed = 20.0;
var reloadTime = 0.5;
var ammoCount = 20;
private var lastShot = -10.0;
var MuzzleParticles : GameObject;
function Start () {
MuzzleParticles.particleEmitter.emit = false;

}

function Fire () {
    // Did the time exceed the reload time?
    if (Time.time > reloadTime + lastShot && ammoCount > 0) {
        // create a new projectile, use the same position and rotation as the Launcher.
        var instantiatedProjectile : Rigidbody = Instantiate (projectile, transform.position, transform.rotation);

        // Give it an initial forward velocity. The direction is along the z-axis of the missile launcher's transform.
        instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, initialSpeed));

        // Ignore collisions between the missile and the character controller
        Physics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);

        audio.Play();
        lastShot = Time.time;
        ammoCount--;
        MuzzleParticles.particleEmitter.emit = true;
    }
    else {
    MuzzleParticles.particleEmitter.emit = false;
    }
}

It's a variation of the FPS tut's Rocket Launcher Script. What i'm trying to get happen, is that, user presses fire, particles (MuzzleParticles) Start, but if he's not firing, turn them off. However, if i keep the trigger down, sometimes the particles carry on emitting. What can I do to fix this?

When you fire, you set emit to true, but then you don't set it to false unless you call fire again and your boolean condition proves false. To get this code to stop emitting, you would either have to call Fire twice within 1/2 a second or call Fire 21 times.

You could try something like calling a co-routine which will stop emission after n seconds. To prevent unwanted shut-offs, don't forget to stop the running co-routine before starting a new one.