is there anything wrong with this script

this is a machine gun script that i put into the gun on my game but the gun does not work. im not sure what is wrong with it but i want to make sure if there is any thing wrong with the script below.

var damage = 5.0;
var bulletsPerClip = 40; 
var clips = 20; 
var reloadTime = 0.5; 
private var hitParticles : ParticleEmitter; 
var muzzleFlash : Renderer;

private var bulletsLeft : int = 0; 
private var nextFireTime = 0.0; 
private var m_LastFrameShot = -1;

function Start () { 
  hitParticles = GetComponentInChildren(ParticleEmitter);
  // We don't want to emit particles all the time, only when we hit something.
  if (hitParticles) hitParticles.emit = false;
  bulletsLeft = bulletsPerClip;
}

function LateUpdate() { 
  if (muzzleFlash) { 
    // We shot this frame, enable the muzzle flash 
    if (m_LastFrameShot == Time.frameCount) { 
      muzzleFlash.transform.localRotation = Quaternion.AngleAxis(Random.value * 360, Vector3.forward);
      muzzleFlash.enabled = true;

      if (audio) {
        if (!audio.isPlaying)
           audio.Play();
        audio.loop = true;
      }
    } else {
      // We didn't, disable the muzzle flash
      muzzleFlash.enabled = false;
      enabled = false;
      // Play sound
      if (audio)
      {
        audio.loop = false;
      }
    }
  }
}

function Fire () { 
  if (bulletsLeft == 0) return;
  // If there is more than one bullet between the last and this frame
  // Reset the nextFireTime
  if (Time.time - fireRate > nextFireTime)
    nextFireTime = Time.time - Time.deltaTime;

  // Keep firing until we used up the fire time
  while( nextFireTime < Time.time && bulletsLeft != 0) {
    FireOneShot();
    nextFireTime += fireRate;
  }
}

function FireOneShot () { 
  var direction = transform.TransformDirection(Vector3.forward); 
  var hit : RaycastHit;

  // Did we hit anything?
  if (Physics.Raycast (transform.position, direction, hit, range)) {
    // Apply a force to the rigidbody we hit
    if (hit.rigidbody)
       hit.rigidbody.AddForceAtPosition(force * direction, hit.point);

    // Place the particle system for spawing out of place where we hit the surface!
    // And spawn a couple of particles
    if (hitParticles) {
       hitParticles.transform.position = hit.point;
       hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
       hitParticles.Emit();
    }

    // Send a damage message to the hit object        
    hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
  }

  bulletsLeft--;

  // Register that we shot this frame,
  // so that the LateUpdate function enabled the muzzleflash renderer for one frame
  m_LastFrameShot = Time.frameCount;
  enabled = true;

// Reload gun in reload Time       
  if (bulletsLeft == 0) Reload();       
}

function Reload () {
  // Wait for reload time first - then add more bullets!
  yield WaitForSeconds(reloadTime);
  // We have a clip left reload
  if (clips > 0) {
    clips--;
    bulletsLeft = bulletsPerClip;
  }
}

Well, this is the widely known MachineGun.js script, from the old and good FPS Tutorial. You should follow the instructions of that tutorial, because this script is closely related to the gun model: it should have muzzle flash model attached to the gun, and you should drag this muzzle model to the field muzzleFlash in the Inspector. You should also add an AudioSource to your gun and set its clip to the shot sound you prefer. To fire, you must call the function Fire in this script, or (like in the tutorial) call it with BroadcastMessage(“Fire”) from the player script. Additionally, you should add a ApplyDamage(damage: float) function to your enemies, because this function will be called by the script above when something is hit. Finally, you should have a particle effect childed to the weapon.

In a brief: read the tutorial instructions! You will learn a lot!