public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { StartCoroutine(CheckChanceToBlock(chanceToBlockAttack, 0)); var attackPos = (attacker != null && attacker.character != null) ? attacker.character.transform.position : damage.hitPosition; if (!damage.ignoreDefense && isBlocking && meleeManager != null && meleeManager.CanBlockAttack(attackPos)) { var damageReduction = meleeManager != null?meleeManager.GetDefenseRate() : 0; if (damageReduction > 0) { damage.ReduceDamage(damageReduction); } if (attacker != null && meleeManager != null && meleeManager.CanBreakAttack()) { attacker.OnRecoil(meleeManager.GetDefenseRecoilID()); } meleeManager.OnDefense(); } // apply tag from the character that hit you and start chase if (!passiveToDamage && damage.sender != null) { SetCurrentTarget(damage.sender); currentState = AIStates.Chase; } damage.hitReaction = !isBlocking; if (!passiveToDamage) { SetAgressive(true); } TakeDamage(damage); }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { if (overrideReactionID) { damage.reaction_id = reactionID; } if (ragdoll && !ragdoll.iChar.isDead) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); ragdoll.gameObject.ApplyDamage(_damage, attacker); } else { if (!iChar) { iChar = GetComponentInParent <vCharacter>(); } if (iChar) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); iChar.gameObject.ApplyDamage(_damage, attacker); } } }
public override void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { //character is blocking if (!damage.ignoreDefense && isBlocking && meleeManager != null && meleeManager.CanBlockAttack(damage.sender.position)) { var damageReduction = meleeManager.GetDefenseRate(); if (damageReduction > 0) { damage.ReduceDamage(damageReduction); } if (attacker != null && meleeManager != null && meleeManager.CanBreakAttack()) { attacker.BreakAttack(meleeManager.GetDefenseRecoilID()); } meleeManager.OnDefense(); cc.currentStaminaRecoveryDelay = damage.staminaRecoveryDelay; cc.currentStamina -= damage.staminaBlockCost; } //apply damage damage.hitReaction = !isBlocking; if (GetComponent <PhotonView>().IsMine == true) { cc.TakeDamage(damage); } else { GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.Others, JsonUtility.ToJson(damage)); } }
/// <summary> /// Init properties /// </summary> protected virtual void Init() { fighter = gameObject.GetMeleeFighter(); ///Initialize all bodyMembers and weapons foreach (vBodyMember member in Members) { ///damage of member will be always the defaultDamage //member.attackObject.damage = defaultDamage; member.attackObject.damage.damageValue = defaultDamage.damageValue; if (member.bodyPart == HumanBodyBones.LeftLowerArm.ToString()) { var weapon = member.attackObject.GetComponentInChildren <vMeleeWeapon>(true); leftWeapon = weapon; } if (member.bodyPart == HumanBodyBones.RightLowerArm.ToString()) { var weapon = member.attackObject.GetComponentInChildren <vMeleeWeapon>(true); rightWeapon = weapon; } member.attackObject.meleeManager = this; member.SetActiveDamage(false); } if (leftWeapon != null) { leftWeapon.SetActiveDamage(false); leftWeapon.meleeManager = this; } if (rightWeapon != null) { rightWeapon.meleeManager = this; rightWeapon.SetActiveDamage(false); } }
public override void ClearTarget() { base.ClearTarget(); healthController = null; meleeFighter = null; character = null; combateController = null; }
/// <summary> /// This makes this action only callable by the owner and networked /// players will not react to the input of the owner players. /// </summary> public override void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { if (GetComponent <PhotonView>().IsMine == false) { return; } base.OnReceiveAttack(damage, attacker); }
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { mFighter = animator.GetComponent <vIMeleeFighter>(); isAttacking = true; if (mFighter != null) { mFighter.OnEnableAttack(); } }
public override void InitTarget(Transform target) { base.InitTarget(target); if (target) { healthController = target.GetComponent <vIHealthController>(); _hadHealthController = this.healthController != null; meleeFighter = target.GetComponent <vIMeleeFighter>(); character = target.GetComponent <vICharacter>(); combateController = target.GetComponent <vIControlAICombat>(); } }
protected virtual void TryApplyRecoil(vIMeleeFighter fighter) { if (MeleeManager && fighter != null) { if (isBlocking && MeleeManager.CanBlockAttack(fighter.transform.position)) { if (MeleeManager.CanBreakAttack()) { fighter.OnRecoil(MeleeManager.GetDefenseRecoilID()); } } } }
/// <summary> /// Apply damage using OnReeiveAttack method if receiver dosent has a vIAttackReceiver, the Simple ApplyDamage is called /// </summary> /// <param name="receiver">target damage receiver</param> /// <param name="damage">damage</param> /// <param name="attacker">damage sender</param> public static void ApplyDamage(this GameObject receiver, vDamage damage, vIMeleeFighter attacker) { var attackReceiver = receiver.GetComponent <vIAttackReceiver>(); if (attackReceiver != null) { attackReceiver.OnReceiveAttack(damage, attacker); } else { receiver.ApplyDamage(damage); } }
/// <summary> /// Apply damage using OnReeiveAttack method if receiver dosent has a vIAttackReceiver, the Simple ApplyDamage is called /// </summary> /// <param name="receiver">target damage receiver</param> /// <param name="damage">damage</param> /// <param name="attacker">damage sender</param> public static void ApplyDamage(this GameObject receiver, vDamage damage, vIMeleeFighter attacker) { var attackReceiver = receiver.GetComponent <vIAttackReceiver>(); if (attackReceiver != null) { attackReceiver.OnReceiveAttack(damage, attacker); } else { receiver.ApplyDamage(damage); } if (receiver.transform.root.gameObject.GetComponent <PhotonView>() && receiver.transform.root.gameObject.GetComponent <PhotonView>().IsMine == false) { receiver.transform.root.gameObject.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.Others, JsonUtility.ToJson(damage)); } }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { if ((ragdoll && !ragdoll.iChar.isDead)) { var _damage = ApplyDamageModifiers(damage); ragdoll.gameObject.ApplyDamage(ApplyDamageModifiers(_damage), attacker); onReceiveDamage.Invoke(ApplyDamageModifiers(_damage)); } else if (targetReceiver) { var _damage = ApplyDamageModifiers(damage); targetReceiver.gameObject.ApplyDamage(ApplyDamageModifiers(_damage), attacker); onReceiveDamage.Invoke(ApplyDamageModifiers(_damage)); } else { TakeDamage(damage); } }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { if (!ragdoll) { return; } if (!ragdoll.iChar.isDead) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); if (ragdoll.gameObject.IsAMeleeFighter()) { ragdoll.gameObject.GetMeleeFighter().OnReceiveAttack(_damage, attacker); } else { ragdoll.gameObject.ApplyDamage(_damage); } } }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { // character is blocking if (!damage.ignoreDefense && isBlocking && meleeManager != null && meleeManager.CanBlockAttack(attacker.Character().transform.position)) { var damageReduction = meleeManager.GetDefenseRate(); if (damageReduction > 0) { damage.ReduceDamage(damageReduction); } if (attacker != null && meleeManager != null && meleeManager.CanBreakAttack()) { attacker.OnRecoil(meleeManager.GetDefenseRecoilID()); } meleeManager.OnDefense(); cc.currentStaminaRecoveryDelay = damage.staminaRecoveryDelay; cc.currentStamina -= damage.staminaBlockCost; } // apply damage cc.TakeDamage(damage, !isBlocking); }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { if (overrideReactionID) { damage.reaction_id = reactionID; } if (ragdoll && !ragdoll.iChar.isDead) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); ragdoll.gameObject.ApplyDamage(_damage, attacker); onReceiveDamage.Invoke(_damage); } else { if (healthController == null) { healthController = GetComponentInParent <vIHealthController>(); } if (healthController != null) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); try { healthController.gameObject.ApplyDamage(_damage, attacker); onReceiveDamage.Invoke(_damage); } catch { this.enabled = false; } } } }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { TakeDamage(damage); TryApplyRecoil(attacker); }
public void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { float multiplier = (useRandomValues && !fixedValues) ? Random.Range(minDamageMultiplier, maxDamageMultiplier) : (useRandomValues && fixedValues) ? randomChange ? maxDamageMultiplier : minDamageMultiplier : damageMultiplier; if (overrideReactionID) { if (useRandomValues && !fixedValues) { damage.reaction_id = Random.Range(minReactionID, maxReactionID); } else if (useRandomValues && fixedValues) { damage.reaction_id = randomChange ? maxReactionID : minReactionID; } else { damage.reaction_id = reactionID; } } if (ragdoll && !ragdoll.iChar.isDead) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * multiplier); if (multiplier == maxDamageMultiplier) { OnGetMaxValue.Invoke(); } ragdoll.gameObject.ApplyDamage(_damage, attacker); onReceiveDamage.Invoke(_damage); } else { if (healthController == null && targetReceiver) { healthController = targetReceiver.GetComponent <vIHealthController>(); } else if (healthController == null) { healthController = GetComponentInParent <vIHealthController>(); } if (healthController != null) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * multiplier); if (multiplier == maxDamageMultiplier) { OnGetMaxValue.Invoke(); } try { healthController.gameObject.ApplyDamage(_damage, attacker); onReceiveDamage.Invoke(_damage); } catch { this.enabled = false; } } } }
public virtual void OnReceiveAttack(vIControlAICombat controller, ref vDamage damage, vIMeleeFighter attacker, ref bool canBlock) { //HandleDefensiveCombat(controller, true); if (damage.damageValue > 0) { if (attacker != null && attacker.character != null && !attacker.character.isDead) { controller.SetCurrentTarget(attacker.transform); } } }
public override void OnReceiveAttack(vDamage damage, vIMeleeFighter attacker) { if (overrideReactionID) { damage.reaction_id = reactionID; } if (ragdoll && !ragdoll.iChar.isDead) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); if (ragdoll.gameObject.transform.root.GetComponent <PhotonView>().IsMine == true) { ragdoll.gameObject.ApplyDamage(_damage, attacker); } else if (healthController != null) { healthController.gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage)); } else if (gameObject.transform.root.GetComponent <PhotonView>()) { gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage)); } onReceiveDamage.Invoke(_damage); } else { if (healthController == null) { healthController = GetComponentInParent <vIHealthController>(); } if (healthController != null) { var _damage = new vDamage(damage); var value = (float)_damage.damageValue; _damage.damageValue = (int)(value * damageMultiplier); try { if (healthController.gameObject.transform.root.GetComponent <PhotonView>().IsMine == true) { healthController.gameObject.ApplyDamage(_damage, attacker); } else if (healthController != null) { healthController.gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage)); } else if (gameObject.transform.root.GetComponent <PhotonView>()) { gameObject.transform.root.GetComponent <PhotonView>().RPC("ApplyDamage", RpcTarget.All, JsonUtility.ToJson(_damage)); } onReceiveDamage.Invoke(_damage); } catch { this.enabled = false; } } } }