Пример #1
0
        /// <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
        }
Пример #2
0
        /// <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
                }
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }