/// <summary>
        /// Use by the preist to Select a character to Heal, Regen, Attack buff, and defense Buff.
        /// </summary>
        public override void HealPlayers()
        {
            if (hp > 0 && isHealer && target != null && target.layer != MyStaticGameObjects.monsterLayer)
            {
                myCharacterControllerHealingCached = targetMyCharacterStats;
                if (!myCharacterControllerHealingCached.isInDeathTimeout())
                {
                    if (myCharacterControllerHealingCached.GetHp() < myCharacterControllerHealingCached.GetMaxHP())
                    {
                        myCharacterControllerHealingCached.GiveHealth(GetAttackPoint());

                        particle = MyObjectPools.healParticlePoolTransform.GetChild(MyObjectPools.instance.healParticlePool.GetMyObjectIndex()).gameObject;
                        particle.transform.position = targetTransform.position + particleOffset;
                        particle.GetComponent <ParticleSystem>().Play(true);
                    }
                    else if (!myCharacterControllerHealingCached.hasRegen && MyStaticGameObjects.instance.CheckIfAnyMonsterAreInRange())
                    {
                        myCharacterControllerHealingCached.StartRegen(GetAttackPoint());
                    }
                    else if (!myCharacterControllerHealingCached.hasAttackBuff && MyStaticGameObjects.instance.CheckIfAnyMonsterAreInRange())
                    {
                        myCharacterControllerHealingCached.StartAttackBuff(GetAttackPoint());
                    }
                    else if (!myCharacterControllerHealingCached.hasDefenseBuff && MyStaticGameObjects.instance.CheckIfAnyMonsterAreInRange())
                    {
                        myCharacterControllerHealingCached.StartDefenseBuff(GetAttackPoint());
                    }

                    if (weaponAudioSource != null && !weaponAudioSource.audioSource.isPlaying)
                    {
                        weaponAudioSource.Play();
                    }
                }
            }
        }
        /// <summary>
        /// Find Healing Target
        /// </summary>
        private void FindHealingTarget()
        {
            if (hp < GetMaxHP() || ((MyStaticGameObjects.instance.CheckIfAnyMonsterAreInRange() && (!hasRegen || !hasAttackBuff || !hasDefenseBuff))))
            {
                SetTarget(gameObject);
            }
            else
            {
                for (int index = 0; index < MyStaticGameObjects.instance.companionsAndPlayer.Length; index++)
                {
                    healingGameObject = MyStaticGameObjects.instance.companionsAndPlayer[index];

                    targetVector2.x = healingGameObject.transform.position.x;
                    targetVector2.y = healingGameObject.transform.position.z;

                    companionVector2.x = theTransform.position.x;
                    companionVector2.y = theTransform.position.z;
                    //           if (healingGameObject != gameObject && Vector3.Distance(healingGameObject.transform.position, theTransform.position) < healingDistance)
                    if (healingGameObject != gameObject && (targetVector2 - companionVector2).sqrMagnitude < healingDistance)
                    {
                        myhealingCharacterStatsCached = healingGameObject.transform.gameObject.GetComponent <MyCharacterStats>();
                        if (!myhealingCharacterStatsCached.isInDeathTimeout())
                        {
                            if (myhealingCharacterStatsCached.GetHp() < myhealingCharacterStatsCached.GetMaxHP() ||
                                ((MyStaticGameObjects.instance.CheckIfAnyMonsterAreInRange() && (!myhealingCharacterStatsCached.hasRegen ||
                                                                                                 !myhealingCharacterStatsCached.hasAttackBuff ||
                                                                                                 !myhealingCharacterStatsCached.hasDefenseBuff))))
                            {
                                SetTarget(healingGameObject.transform.gameObject);
                                break;
                            }
                        }
                    }
                }
            }
        }