/// <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; } } } } } }