weapon script please help!!!

know someone C#? please read here… I need help…

here is weapon script a have to add reload animation and reload sound… and when reload I want zoom out camera… can anyone help my?

using UnityEngine;
using System.Collections;

[System.Serializable]
public class Stuffs{
public string staffName;
public bool hasStuff;
public Transform stuff;
}

public class WeaponController : MonoBehaviour {
public AudioClip ReloadSound;
public Weapons[] weaponsSet;
public Stuffs[] staffsSet;
public ScreenCenter _reticle;
public GameObject _mainCam;
[HideInInspector]
public Animation _animationComponent;
[HideInInspector]
public Camera _mainCamCamera;
[HideInInspector]
public string hitTag = "No Object Hitted";
[HideInInspector]
public float distanceToTarget;
[HideInInspector]
public float maxSpeedWithGun = 2.79f;
[HideInInspector]
public CharacterMotor motor;
[HideInInspector]
public HeadLookController headLookController;
[HideInInspector]
public HeadLook headLook;
[HideInInspector]
public Vector3 V3;
public bool _lockCursor;
public bool _info;
public GameObject[] _hitParticles;
//public ParticleEmitter particleTrail;
public Transform _center;
//public Transform WPOS;
//public Vector3 aimTargetPos;

public Transform aimTarget;
public Transform _detailsObject;
public ShakeSettings _shakeSettings;
private int weaponIndex = 1;
private int stuffIndex;
public GUIStyle inGameTextStyle = new GUIStyle();
public GUIStyle debugTextStyle = new GUIStyle();

bool inFire { get { return animation[weaponsSet[weaponIndex].shootAnimation.name].enabled; } }
bool inAim { get { return animation[weaponsSet[weaponIndex].aimAnimation.name].enabled; } }
private void SetupTrailCreationChance(){
for (int i = 0; i < weaponsSet.Length; i++) {
if(weaponsSet[i].createTrailChance == Weapons._createTrailChanceType._EveryShot){
weaponsSet[i]._trailChanceIndex = 1;
}
if(weaponsSet[i].createTrailChance == Weapons._createTrailChanceType._High){
weaponsSet[i]._trailChanceIndex = 2;
}
if(weaponsSet[i].createTrailChance == Weapons._createTrailChanceType._Normal){
weaponsSet[i]._trailChanceIndex = 3;
}
if(weaponsSet[i].createTrailChance == Weapons._createTrailChanceType._Low){
weaponsSet[i]._trailChanceIndex = 4;
}
if(weaponsSet[i].createTrailChance == Weapons._createTrailChanceType._VeryLow){
weaponsSet[i]._trailChanceIndex = 5;
}
}
}
private void SetupAmmo(){
for (int i = 0; i < weaponsSet.Length; i++) {
weaponsSet[i].currentBulletsCount = weaponsSet[i].clipSize;
if(weaponsSet[i].haveBullets > weaponsSet[i].maxAmmo){
weaponsSet[i].haveBullets = weaponsSet[i].maxAmmo;
}
}
}
private void GetNeededComponents(){
_mainCamCamera = _mainCam.gameObject.GetComponent<Camera>();
headLookController = GetComponent(typeof(HeadLookController)) as HeadLookController;
_animationComponent = GetComponent(typeof(Animation)) as Animation;
headLook = GetComponent(typeof(HeadLook)) as HeadLook;
motor = GetComponent(typeof(CharacterMotor)) as CharacterMotor;
LegController legC = GetComponent(typeof(LegController)) as LegController;


IMotionAnalyzer[] motions = legC.motions;

foreach (IMotionAnalyzer motion in motions) {
if (motion.name == "run"){
maxSpeedWithGun = motion.cycleSpeed;
}
}
}






private void Start () {
if (_lockCursor){
Screen.lockCursor = true;
}
SelectWeapon(0);
SetupAmmo();
SetupTrailCreationChance();
GetNeededComponents();
}

private void CreateShootFlash(){
weaponsSet[weaponIndex].shootFlashPosition.transform.localRotation *= Quaternion.Euler(0, 0, Random.Range(0, 360));
Quaternion rot = weaponsSet[weaponIndex].shootFlashPosition.transform.rotation;
Vector3 pos = weaponsSet[weaponIndex].shootFlashPosition.transform.position;

GameObject _flash = (GameObject)Instantiate(weaponsSet[weaponIndex].shootFlash,pos,rot);
FBase.SetParentToObject(_flash,weaponsSet[weaponIndex].shootFlashPosition);
}

private void CreateCapsule(){
GameObject _shell = (GameObject)Instantiate(weaponsSet[weaponIndex].capsule, weaponsSet[weaponIndex].weapon.transform.position,Random.rotation);
_shell.transform.parent = _detailsObject;
_shell.rigidbody.AddForce(transform.right * (weaponsSet[weaponIndex].capsuleForce+Random.Range(1,50)));
}
/*
void CreateShootParticles(int _type,int _muzz){
Instantiate(_shootParticles[_type], muzzleFlashies[_muzz].transform.position,muzzleFlashies[_muzz].transform.rotation);
Debug.Log(_shootParticles[_type].name + " [CreateShootParticles]");
}
*/

private void CalculateDistance(float _range){
RaycastHit hit;
Ray ray = Camera.main.ViewportPointToRay (new Vector3(0.5f,0.5f,0.0f));

if (Physics.Raycast(ray, out hit, _range)){
hitTag = hit.collider.tag;
Debug.DrawLine (_center.transform.position, hit.point,Color.blue);
distanceToTarget = Vector3.Distance(hit.point,_center.transform.posit ion);
}
else{
hitTag = "No Object Hitted";
Debug.DrawLine (_center.transform.position, aimTarget.transform.position,Color.blue);
distanceToTarget = _range;
}
}	

#region CastRAY
private void CastRAY(){
for (int _i = 0; _i < weaponsSet[weaponIndex].bulletPerShot; _i ++){	
Vector3 dir;
RaycastHit hit;
Ray ray = Camera.main.ViewportPointToRay (new Vector3(0.5f+
Random.Range(-weaponsSet[weaponIndex].accuracy,weaponsSet[weaponIndex].accuracy),0.5f+
Random.Range(-weaponsSet[weaponIndex].accuracy,weaponsSet[weaponIndex].accuracy),0.0f));	
int _trailChanceRandomize = Random.Range(0,weaponsSet[weaponIndex]._trailChanceIndex); 
if (Physics.Raycast(ray, out hit,weaponsSet[weaponIndex].shootRange)){	
if(Vector3.Distance(hit.point,_center.transform.po sition) > 5.0f  _trailChanceRandomize == 0){
GameObject _pTrailObj = (GameObject)Instantiate(weaponsSet[weaponIndex].trail);
_pTrailObj.transform.parent = _detailsObject;
ParticleEmitter _emitter = _pTrailObj.gameObject.GetComponent<ParticleEmitter >();
Particle[] _particlesInTrail;
int emits = (int)(Vector3.Distance(weaponsSet[weaponIndex].shootFlashPosition.transform.position,hit.point) * weaponsSet[weaponIndex]._particlesCountMultipler);
_emitter.Emit(emits);
_particlesInTrail = _emitter.particles;
for (int i = 0; i < _particlesInTrail.Length ; i++){
Vector3 pPos = Vector3.Lerp(weaponsSet[weaponIndex].shootFlashPosition.transform.position, hit.point, (1f / (float)emits) * (float)i);
_particlesInTrail[i].position = pPos;
}
_emitter.particles = _particlesInTrail;
}

dir = (-(hit.point - _center.transform.position)).normalized;	
Debug.DrawLine (_center.transform.position, hit.point,Color.green);
if (hit.rigidbody){
hit.rigidbody.AddForceAtPosition(-weaponsSet[weaponIndex].power * dir, hit.point);
}

if(hit.collider.tag == "Raggdoll"){
Quaternion rot = Quaternion.FromToRotation(Vector3.up, hit.normal);
Vector3 pos = hit.point;
GameObject _hitParticlesObject = (GameObject)Instantiate(_hitParticles[1], pos, rot);
FBase.SetParentToObject(_hitParticlesObject,_detai lsObject);
_hitParticlesObject.transform.DetachChildren();
}
if(hit.collider.tag == "Ground"){
Quaternion rot = Quaternion.FromToRotation(Vector3.up, hit.normal);
Vector3 pos = hit.point;
GameObject _hitParticlesObject = (GameObject)Instantiate(_hitParticles[0], pos, rot);
FBase.SetParentToObject(_hitParticlesObject,_detai lsObject);
_hitParticlesObject.transform.DetachChildren();
}

hit.collider.SendMessageUpwards("ApplyDamage", weaponsSet[weaponIndex].damage, SendMessageOptions.DontRequireReceiver);
}
else{
if (_trailChanceRandomize == 0){
GameObject _pTrailObj = (GameObject)Instantiate(weaponsSet[weaponIndex].trail);
_pTrailObj.transform.parent = _detailsObject;
ParticleEmitter _emitter = _pTrailObj.gameObject.GetComponent<ParticleEmitter >();
Particle[] _particlesInTrail;
int emits = (int)(Vector3.Distance(weaponsSet[weaponIndex].shootFlashPosition.transform.position,aimTarget.p osition) * weaponsSet[weaponIndex]._particlesCountMultipler);
_emitter.Emit(emits);
_particlesInTrail = _emitter.particles;

Vector3 _randomPos = new Vector3(Random.Range(-0.05f,0.1f),Random.Range(-0.05f,0.1f),Random.Range(-0.05f,0.1f));

for (int i = 0; i < _particlesInTrail.Length ; i++){
Vector3 pPos = Vector3.Lerp(weaponsSet[weaponIndex].shootFlashPosition.transform.position, aimTarget.position + _randomPos, (1f / (float)emits) * (float)i);
_particlesInTrail[i].position = pPos;
}
_emitter.particles = _particlesInTrail;
}
}
}
}
#endregion

private void Fire(){
AnimationState _aimingAnim = animation[weaponsSet[weaponIndex].aimAnimation.name];

if (inAim  !inFire  _aimingAnim.weight == 1  distanceToTarget > 1.7f  weaponsSet[weaponIndex].currentBulletsCount > 0){ //åñëè ïðèöåëèâàåìñÿ ,åñëè íå ñòðåëÿåì, åñëè àíèìàöèÿ ïðèöåëèâàíèÿ àêòèâíà ïîëíîñòüþ
if (_shakeSettings._shake){
iTween.ShakeRotation(_shakeSettings._target,
new Vector3(_shakeSettings._shakeX,_shakeSettings._sha keY,_shakeSettings._shakeZ) ,
_shakeSettings._time);
}
AnimationState fireAS = animation[weaponsSet[weaponIndex].shootAnimation.name];
FBase.PlaySoundInPosition(weaponsSet[weaponIndex].shootSound, weaponsSet[weaponIndex].shootFlashPosition.transform.position, 0.5f, weaponsSet[weaponIndex].shootFlashPosition);
weaponsSet[weaponIndex].currentBulletsCount --;
CreateCapsule();
CreateShootFlash();
CastRAY();
fireAS.wrapMode = WrapMode.Once;
fireAS.enabled = true;
fireAS.weight = 1;
}
}

private void Reload () {

Debug.Log("Reload [" + weaponsSet[weaponIndex].weaponName+"]");
int needBullets = (weaponsSet[weaponIndex].clipSize - weaponsSet[weaponIndex].currentBulletsCount);

if (weaponsSet[weaponIndex].haveBullets >= needBullets){
weaponsSet[weaponIndex].haveBullets -= needBullets;
weaponsSet[weaponIndex].currentBulletsCount = weaponsSet[weaponIndex].clipSize;

}
else{
weaponsSet[weaponIndex].currentBulletsCount = weaponsSet[weaponIndex].haveBullets;
weaponsSet[weaponIndex].haveBullets = 0;
}

}	

private void LateUpdate(){
CalculateDistance(1000.0f);
}

#region Update
private void Update () {	


if (inFire){
_reticle._curretSize = Mathf.SmoothDamp(_reticle._curretSize, _reticle._maxSize, ref _reticle.ret_animSpeed, _reticle.ret_smoothTime);
}
else{
_reticle._curretSize = Mathf.SmoothDamp(_reticle._curretSize, _reticle._minSize, ref _reticle.ret_animSpeed, _reticle.ret_smoothTime);
}


if (Input.GetKeyDown(KeyCode.Mouse1)){
StartCoroutine(FBase.BodyRotMultiplerBlend(headLoo k,12.0f,true,false));
StartCoroutine(FBase.CameraBlendFov(_mainCamCamera ,weaponsSet[weaponIndex].zoomFov,12.0f,true,true));
StartCoroutine(FBase.AnimWeightBlend(_animationCom ponent, 12.0f,weaponsSet[weaponIndex].aimAnimation,true,false));
StartCoroutine(FBase.AimBlendBody(headLookControll er,12.0f,true,true));
}

if (Input.GetKeyUp(KeyCode.Mouse1)){
StartCoroutine(FBase.BodyRotMultiplerBlend(headLoo k,12.0f,true,true));
StartCoroutine(FBase.AnimWeightBlend(_animationCom ponent,12.0f,weaponsSet[weaponIndex].aimAnimation,true,true));
StartCoroutine(FBase.CameraBlendFov(_mainCamCamera ,60.0f,12.0f,true,false));
StartCoroutine(FBase.AimBlendBody(headLookControll er,12.0f,true,false));
}

if (Input.GetKeyDown(KeyCode.R) || weaponsSet[weaponIndex].currentBulletsCount == 0){
if (weaponsSet[weaponIndex].haveBullets > 0){
audio.PlayOneShot(ReloadSound);
animation.CrossFade("aiming_pistol");
Reload();

}

}
if (Input.GetKey(KeyCode.Mouse0)){
if (weaponsSet[weaponIndex].fireSystem == Weapons._fireSystemType.rayCastBased){
Fire();
}
if (weaponsSet[weaponIndex].fireSystem == Weapons._fireSystemType.physicalBodyLaunch){
Fire();
}
if (weaponsSet[weaponIndex].fireSystem == Weapons._fireSystemType.advancedSystem){
Fire();
}
}

// weapon selection block--------------------------------------------
if (Input.GetAxis("Mouse ScrollWheel") > 0){
if (!inAim  !inFire){
weaponIndex ++;
if(weaponIndex > weaponsSet.Length - 1){
weaponIndex = 0;

}
SelectWeapon(weaponIndex);
}
}

if (Input.GetAxis("Mouse ScrollWheel") < 0){
if (!inAim  !inFire){
weaponIndex --;
if(weaponIndex < 0){
weaponIndex = weaponsSet.Length - 1 ;
}
SelectWeapon(weaponIndex);
}
}
/*if (Input.GetAxis("Mouse ScrollWheel") > 0){
if (!inAim  !inFire){
if (weaponIndex == weaponsSet.Length - 2  !weaponsSet[weaponsSet.Length-1].hasWeapon){
weaponIndex = -1;
}

if (weaponIndex < weaponsSet.Length-1){
if (weaponsSet[weaponIndex+1].hasWeapon){
weaponIndex++;
}
else{
for (int i = weaponIndex+1; i < weaponsSet.Length; i ++){
if (weaponsSet[i].hasWeapon){
weaponIndex = i;
break;
}
}
}
}
else{
if (weaponIndex == weaponsSet.Length-1){
weaponIndex = 0;
}
}
SelectWeapon(weaponIndex);
}	
}

if (Input.GetAxis("Mouse ScrollWheel") < 0) {
if (!inAim  !inFire){	
if (weaponIndex == 1  !weaponsSet[0].hasWeapon){
weaponIndex = weaponsSet.Length - 1;
}

if (weaponIndex > 0){
if (weaponsSet[weaponIndex-1].hasWeapon){
weaponIndex--;
}
else{
for (int i = weaponIndex -1; i > 0 ; i --){
if (weaponsSet[i].hasWeapon){
weaponIndex = i;
break;
}
}
}
}
else{
if (weaponIndex == 0){
weaponIndex = weaponsSet.Length-1;
}
}
SelectWeapon(weaponIndex);
}
}*/

//--------------------------------------------------------------------	
}


#endregion
void OnGUI(){
GUI.depth = 0;
GUI.DrawTexture(new Rect(400, 50, 130, 130), weaponsSet[weaponIndex].iconGUI, ScaleMode.ScaleToFit, true, 0f);
GUI.Label(new Rect(400, 130,300,50),weaponsSet[weaponIndex].weaponName +" "+weaponsSet[weaponIndex].currentBulletsCount+" / "+weaponsSet[weaponIndex].haveBullets,inGameTextStyle);

if(_info){
GUI.Label(new Rect(Screen.width/2+30, Screen.height/2 ,150,50), "Dist. to target: ["+distanceToTarget.ToString("f3")+"]",debugTextStyle);
GUI.Label(new Rect(Screen.width/2+30, Screen.height/2+15,170,50),"Weapon Index: ["+weaponIndex.ToString()+"]" + " " + "["+stuffIndex.ToString()+"]",debugTextStyle);
GUI.Label(new Rect(Screen.width/2+30, Screen.height/2+30,170,50),"Hit Tag: " + hitTag,debugTextStyle);
GUI.Label(new Rect(Screen.width/2+30, Screen.height/2+45,170,50),"Obj.: " + _detailsObject.transform.childCount.ToString(),deb ugTextStyle);
GUI.Label(new Rect(Screen.width/2+30, Screen.height/2+60,170,50),"X:" + transform.position.x.ToString("f3") + " Y:" + transform.position.y.ToString("f3") + " Z:" + transform.position.z.ToString("f3"),debugTextStyle );
}

/*
Vector3 screenPosition = Camera.main.WorldToScreenPoint(gameObject.transfor m.position + V3);
Vector3 cameraRelative = Camera.main.transform.InverseTransformPoint(transf orm.position);
if (cameraRelative.z > 0){
Rect position = new Rect(screenPosition.x+100, Screen.height - screenPosition.y + 100, 500f, 100f);
GUI.Label (position,"Weapon Index "+weaponIndex.ToString(),newStyle);

}
*/
if (Time.time != 0  Time.timeScale != 0  _reticle.drawReticle  headLookController.facing){
if(hitTag == "Raggdoll"){
GUI.DrawTexture(new Rect(Screen.width/2-(_reticle._curretSize * 0.5f), Screen.height/2-(_reticle._curretSize*0.5f), _reticle._curretSize, _reticle._curretSize), _reticle.deadBodyDetect,ScaleMode.ScaleToFit, true, 0f);
}
else{
GUI.DrawTexture(new Rect(Screen.width/2-(_reticle._curretSize * 0.5f), Screen.height/2-(_reticle._curretSize*0.5f), _reticle._curretSize, _reticle._curretSize), _reticle.reticle,ScaleMode.ScaleToFit, true, 0f);
}
}
}

private void SelectWeapon(int index){
weaponIndex = index;
for (int k=0; k <weaponsSet.Length; k++)
{

if (k == index){
weaponsSet[k].weapon.gameObject.SetActiveRecursively(true);
}
else{
weaponsSet[k].weapon.gameObject.SetActiveRecursively(false);
}
}
}

private IEnumerator CrossFadeMaxSpeed (float goalValue, float fadeLength) {
float startTime = Time.time;
float startValue = motor.maxForwardSpeed;
while (Time.time < startTime + fadeLength) {
motor.maxForwardSpeed = Mathf.Lerp (
startValue,
goalValue,
Mathf.InverseLerp (startTime, startTime + fadeLength, Time.time));
yield return 0;
}
motor.maxForwardSpeed = goalValue;
}
}

To play the animation, take a look on this: Unity - Scripting API: Animation.Play
To zoom in and zoom out, just modify the Camera.fieldOfView.
[Edit]
Sorry In your case might be better to use
Unity - Scripting API: Animation.CrossFade

can I add animation this script ? bool inreload { get { return animation[weaponsSet[weaponIndex].reloadAnimation.name].enabled ?