/// <summary> /// Tells the actor when to block /// </summary> public void DetermineBlock() { if (_Target == null) { return; } #if USE_SWORD_SHIELD_MP || OOTII_SSMP Vector3 lToTarget = _Target.transform.position - transform.position; float lToTargetDistance = lToTarget.magnitude; BasicMeleeBlock lMeleeBlock = mMotionController.GetMotion <BasicMeleeBlock>(); if (lMeleeBlock != null) { if (lMeleeBlock.IsActive) { if (lMeleeBlock.Age > 1f) { CombatMessage lMessage = CombatMessage.Allocate(); lMessage.ID = CombatMessage.MSG_COMBATANT_CANCEL; lMessage.Defender = gameObject; lMeleeBlock.OnMessageReceived(lMessage); CombatMessage.Release(lMessage); mActorCore.SetStateValue("State", IDLE); } } else { BasicMeleeAttack lMeleeAttack = mTargetMotionController.GetMotion <BasicMeleeAttack>(); if (lMeleeAttack != null && lMeleeAttack.IsActive) { if (lMeleeAttack.Age < 0.1f && !lMeleeBlock.IsActive) { if (mActorCore.GetStateValue("Stance") == EnumControllerStance.COMBAT_MELEE) { mMotionController.ActivateMotion(lMeleeBlock); mActorCore.SetStateValue("State", BLOCKING); } } } #if USE_ARCHERY_MP || OOTII_AYMP BasicRangedAttack lRangedAttack = mTargetMotionController.GetMotion <BasicRangedAttack>(); if (lRangedAttack != null && lRangedAttack.IsActive) { } #endif } } #endif }
/// <summary> /// Tells the actor when to attack /// </summary> /// <param name="rMeleeMax"></param> /// <param name="rRangedMin"></param> /// <param name="rRangedMax"></param> public void DetermineAttack(float rMeleeMax, float rRangedMin, float rRangedMax) { if (_Target == null) { return; } Vector3 lToTarget = _Target.transform.position - transform.position; float lToTargetDistance = lToTarget.magnitude; int lStance = mActorCore.GetStateValue("Stance"); if (UseSword && lStance == EnumControllerStance.COMBAT_MELEE) { if (lToTargetDistance < rMeleeMax) { #if USE_SWORD_SHIELD_MP || OOTII_SSMP BasicMeleeAttack lAttack = mMotionController.GetMotion <BasicMeleeAttack>(); if (lAttack != null && !lAttack.IsActive) { mMotionController.ActivateMotion(lAttack); mActorCore.SetStateValue("State", ATTACKING); } #endif } } else if (UseBow && ArrowCount > 0 && lStance == EnumControllerStance.COMBAT_RANGED) { if (lToTargetDistance > rRangedMin && lToTargetDistance < rRangedMax) { #if USE_ARCHERY_MP || OOTII_AYMP BasicRangedAttack lAttack = mMotionController.GetMotion <BasicRangedAttack>(); if (lAttack != null && !lAttack.IsActive) { mMotionController.ActivateMotion(lAttack); mActorCore.SetStateValue("State", ATTACKING); } #endif } } }
private static void BasicMeleeAttack_OnEnter(On.EntityStates.BasicMeleeAttack.orig_OnEnter orig, BasicMeleeAttack self) { var c**k = self as EntityStates.Loader.SwingComboFist; if (c**k.gauntlet == 2) { c**k.damageCoefficient *= 2f; c**k.overlapAttack.pushAwayForce = 35f; c**k.overlapAttack.forceVector = Vector3.up; } orig(c**k); }
private static void BasicMeleeAttack_PlayAnimation(On.EntityStates.BasicMeleeAttack.orig_PlayAnimation orig, BasicMeleeAttack self) { var isSkillDef = IsSkillDef(self, KnuckleBoomSkillDef); if (!isSkillDef) { orig(self); return; } var c**k = self as EntityStates.Loader.SwingComboFist; string animationStateName = ""; float duration = Mathf.Max(self.duration, 0.2f); switch (c**k.gauntlet) { case 0: animationStateName = "SwingFistRight"; break; case 1: animationStateName = "SwingFistLeft"; break; case 2: animationStateName = "BigPunch"; //base.PlayAnimation("FullBody, Override", "BigPunch", "BigPunch.playbackRate", duration); //BigPunch break; } self.PlayCrossfade("Gesture, Additive", animationStateName, "SwingFist.playbackRate", duration, 0.1f); self.PlayCrossfade("Gesture, Override", animationStateName, "SwingFist.playbackRate", duration, 0.1f); }