Why is it no delaying?

For some reason you can go trigger happy and kill the enemy.

var TheDammage : int = 50;
var Distance : float;
var MaxDistance : float = 1.5;
var TheAnimator : Animator;
var DammageDelay : float = .6;

function Update () 
{
	if (Input.GetButtonDown("Fire1"))
	{
		AttackDammage();
	}
}

function AttackDammage() 
{
yield WaitForSeconds(DammageDelay);
	var hit : RaycastHit;
	var ray = Camera.main.ScreenPointToRay(Vector3(Screen.width/2, Screen.height/2, 0));
	if (Physics.Raycast (ray, hit))
	{
		Distance = hit.distance;
		if (Distance < MaxDistance)
		{
			
			hit.transform.SendMessage("ApplyDammage", TheDammage, SendMessageOptions.DontRequireReceiver);
			yield WaitForSeconds(1);
		}
	}

On the initial call, a yield returns control to the place where the function was called. That is your yields in AttackDamage() are not stopping the Update() loop, so the user can continue to hit the “Fire1” button. An each time AttachDamage() is called, a new coroutine is created, and each coroutine will do an attack. One simple fix is to lockout calling AttachDamage() while damage is in progress:

At the top of the file:

private var doingDamage = false;

Insert just before line 17:

doingDamage = true;

Insert just after line 28:

doingDamage = false;

And line 9 becomes:

if (!doingDamage && Input.GetButtonDown("Fire1"))