예제 #1
0
        IEnumerator EnemyInvisCoroutine(Creature creature)
        {
            float startTime = Time.time;

            //give speed and attackspeed
            creature.locomotion.speedMultiplier *= 2f;
            BrainHuman brain = creature.brain as BrainHuman;

            brain.attackMinMaxDelay *= 0.1f;
            brain.parryMinMaxDelay  *= 0.1f;
            brain.parryEnabled       = false;

            //Make enemy invis and items
            while (Time.time - startTime < enemyInvisDuration)
            {
                foreach (Renderer renderer in creature.GetComponentsInChildren <Renderer>())
                {
                    renderer.enabled = false;
                }
                yield return(new WaitForEndOfFrame());
            }

            brain.attackMinMaxDelay             /= 0.1f;
            creature.locomotion.speedMultiplier /= 2f;
            brain.parryMinMaxDelay /= 0.1f;
            brain.parryEnabled      = true;

            EnemyInvis = false;
        }
예제 #2
0
        public IEnumerator ChangeFaction(Creature creature)
        {
            int fac = creature.factionId;

            creature.SetFaction(-1);
            BrainHuman brain = creature.brain as BrainHuman;

            brain.canLeave = false;
            yield return(new WaitUntil(() => !bossPlayer.isInvis));

            creature.SetFaction(fac);
            brain.canLeave = true;
        }
예제 #3
0
        public static Vector3 NpcAimingAngle(BrainHuman NPCBrain, Vector3 initial, float npcDistanceToFire = 10.0f)
        {
            if (NPCBrain == null)
            {
                return(initial);
            }
            var inaccuracyMult = 0.2f * (NPCBrain.aimSpreadCone / npcDistanceToFire);

            return(new Vector3(
                       initial.x + (UnityEngine.Random.Range(-inaccuracyMult, inaccuracyMult)),
                       initial.y + (UnityEngine.Random.Range(-inaccuracyMult, inaccuracyMult)),
                       initial.z));
        }
예제 #4
0
        IEnumerator EnemyAttackSpeedCoroutine(Creature creature)
        {
            //give speed and attackspeed
            creature.locomotion.speedMultiplier *= 2f;
            BrainHuman brain = creature.brain as BrainHuman;

            brain.attackMinMaxDelay *= 0.1f;
            brain.parryMinMaxDelay  *= 0.1f;
            brain.parryEnabled       = false;

            while (Time.time - lastPlayerHitTime < enemyBoostDuration)
            {
                yield return(new WaitForEndOfFrame());
            }

            brain.attackMinMaxDelay             /= 0.1f;
            creature.locomotion.speedMultiplier /= 2f;
            brain.parryMinMaxDelay /= 0.1f;
            brain.parryEnabled      = true;
        }
        public void OnMainGripGrabbed(RagdollHand interactor, Handle handle, EventTime eventTime)
        {
            if (interactor.playerHand == Player.local.handRight)
            {
                gunGripHeldRight = true;
            }
            if (interactor.playerHand == Player.local.handLeft)
            {
                gunGripHeldLeft = true;
            }

            if (!gunGripHeldLeft && !gunGripHeldRight)
            {
                if (isEmpty)
                {
                    ReloadWeapon();
                }

                thisNPC             = interactor.ragdoll.creature;
                thisNPCBrain        = (BrainHuman)thisNPC.brain.instance;
                npcPrevMeleeEnabled = thisNPCBrain.meleeEnabled;
                if (npcPrevMeleeEnabled)
                {
                    npcPrevMeleeDistMult        = thisNPCBrain.meleeMax;
                    npcPrevParryDetectionRadius = thisNPCBrain.parryDetectionRadius;
                    npcPrevParryMaxDist         = thisNPCBrain.parryMaxDistance;
                    thisNPCBrain.meleeEnabled   = module.npcMeleeEnableFlag;
                    if (!module.npcMeleeEnableFlag)
                    {
                        thisNPCBrain.meleeDistMult        = thisNPCBrain.bowDist * module.npcDistanceToFire;
                        thisNPCBrain.parryDetectionRadius = thisNPCBrain.bowDist * module.npcDistanceToFire;
                        thisNPCBrain.parryMaxDistance     = thisNPCBrain.bowDist * module.npcDistanceToFire;
                    }
                }
            }
        }