public static void MountOperation(NPCHumanContext c, MountOperator.MountOperationType type)
        {
            switch (type)
            {
            case MountOperator.MountOperationType.Mount:
                if (c.GetFact(NPCPlayerApex.Facts.IsMounted) != (byte)0 || AI.npc_ignore_chairs)
                {
                    break;
                }
                BaseChair chairTarget = c.ChairTarget;
                if (!Object.op_Inequality((Object)chairTarget, (Object)null))
                {
                    break;
                }
                c.Human.Mount((BaseMountable)chairTarget);
                break;

            case MountOperator.MountOperationType.Dismount:
                if (c.GetFact(NPCPlayerApex.Facts.IsMounted) != (byte)1)
                {
                    break;
                }
                c.Human.Dismount();
                break;
            }
        }
        public static void NavigateToEnemy(NPCHumanContext c)
        {
            if (c.GetFact(NPCPlayerApex.Facts.HasEnemy) <= (byte)0 || !c.AIAgent.IsNavRunning())
            {
                return;
            }
            if (c.GetFact(NPCPlayerApex.Facts.HasLineOfSight) > (byte)0)
            {
                Vector3 enemyPosition = c.EnemyPosition;
                if ((double)((Vector3) ref enemyPosition).get_sqrMagnitude() > 0.0)
                {
                    HumanNavigateToOperator.MakeUnstuck(c);
                    c.Human.StoppingDistance = 1.5f;
                    c.Human.Destination      = c.EnemyPosition;
                    goto label_6;
                }
            }
            Memory.SeenInfo info = c.Memory.GetInfo(c.AIAgent.AttackTarget);
            if (Object.op_Inequality((Object)info.Entity, (Object)null) && (double)((Vector3) ref info.Position).get_sqrMagnitude() > 0.0)
            {
                HumanNavigateToOperator.MakeUnstuck(c);
                c.Human.StoppingDistance = 1.5f;
                c.Human.Destination      = info.Position;
            }
label_6:
            c.Human.SetTargetPathStatus(0.05f);
        }
 private static void NavigateToWaypointLoc(NPCHumanContext c)
 {
     if (c.GetFact(NPCPlayerApex.Facts.HasWaypoints) > 0 && c.Human.IsNavRunning())
     {
         c.Human.StoppingDistance = 0.3f;
         WaypointSet.Waypoint item = c.Human.WaypointSet.Points[c.Human.CurrentWaypointIndex];
         bool    flag      = false;
         Vector3 transform = item.Transform.position;
         if ((c.Human.Destination - transform).sqrMagnitude > 0.01f)
         {
             HumanNavigateToOperator.MakeUnstuck(c);
             c.Human.Destination = transform;
             c.Human.SetTargetPathStatus(0.05f);
             flag = true;
         }
         float single = 0f;
         int   num    = c.Human.PeekNextWaypointIndex();
         if (c.Human.WaypointSet.Points.Count > num && Mathf.Approximately(c.Human.WaypointSet.Points[num].WaitTime, 0f))
         {
             single = 1f;
         }
         if ((c.Position - c.Human.Destination).sqrMagnitude > c.Human.SqrStoppingDistance + single)
         {
             c.Human.LookAtPoint = null;
             c.Human.LookAtEyes  = null;
             if (c.GetFact(NPCPlayerApex.Facts.IsMoving) != 0 || flag)
             {
                 c.SetFact(NPCPlayerApex.Facts.IsMovingTowardWaypoint, 1, true, true);
                 return;
             }
             c.Human.CurrentWaypointIndex = c.Human.GetNextWaypointIndex();
             c.SetFact(NPCPlayerApex.Facts.IsMovingTowardWaypoint, 0, true, true);
             return;
         }
         if (HumanNavigateToOperator.IsWaitingAtWaypoint(c, ref item))
         {
             if (!IsClosestPlayerWithinDistance.Test(c, 4f))
             {
                 c.Human.LookAtEyes = null;
                 c.Human.LookAtRandomPoint(5f);
             }
             else
             {
                 LookAtClosestPlayer.Do(c);
             }
             c.SetFact(NPCPlayerApex.Facts.IsMovingTowardWaypoint, 0, true, true);
             return;
         }
         c.Human.CurrentWaypointIndex = c.Human.GetNextWaypointIndex();
         c.Human.LookAtPoint          = null;
     }
 }
        public static void AttackEnemy(NPCHumanContext c, AttackOperator.AttackType type)
        {
            if (c.GetFact(NPCPlayerApex.Facts.IsWeaponAttackReady) == (byte)0)
            {
                return;
            }
            BaseCombatEntity target = (BaseCombatEntity)null;

            if (Object.op_Inequality((Object)c.EnemyNpc, (Object)null))
            {
                target = (BaseCombatEntity)c.EnemyNpc;
            }
            if (Object.op_Inequality((Object)c.EnemyPlayer, (Object)null))
            {
                target = (BaseCombatEntity)c.EnemyPlayer;
            }
            if (Object.op_Equality((Object)target, (Object)null))
            {
                return;
            }
            c.AIAgent.StartAttack(type, target);
            c.SetFact(NPCPlayerApex.Facts.IsWeaponAttackReady, (byte)0, true, true);
            if ((double)Random.get_value() >= 0.100000001490116 || c.Human.OnAggro == null)
            {
                return;
            }
            c.Human.OnAggro();
        }
示例#5
0
        public static void AttackEnemy(NPCHumanContext c, AttackOperator.AttackType type)
        {
            if (c.GetFact(NPCPlayerApex.Facts.IsWeaponAttackReady) == 0)
            {
                return;
            }
            BaseCombatEntity enemyNpc = null;

            if (c.EnemyNpc != null)
            {
                enemyNpc = c.EnemyNpc;
            }
            if (c.EnemyPlayer != null)
            {
                enemyNpc = c.EnemyPlayer;
            }
            if (enemyNpc == null)
            {
                return;
            }
            c.AIAgent.StartAttack(type, enemyNpc);
            c.SetFact(NPCPlayerApex.Facts.IsWeaponAttackReady, 0, true, true);
            if (UnityEngine.Random.@value < 0.1f && c.Human.OnAggro != null)
            {
                c.Human.OnAggro();
            }
        }
        public override float GetScore(BaseContext ctx)
        {
            NPCHumanContext npcHumanContext = ctx as NPCHumanContext;

            if (npcHumanContext != null && (NPCPlayerApex.EnemyRangeEnum)npcHumanContext.GetFact(NPCPlayerApex.Facts.RangeToSpawnLocation) >= npcHumanContext.Human.GetStats.MaxRangeToSpawnLoc && (!float.IsNaN(npcHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition) && !float.IsNegativeInfinity(npcHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition)) && !float.IsInfinity(npcHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition))
            {
                return((double)npcHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition >= (double)npcHumanContext.Human.GetStats.OutOfRangeOfSpawnPointTimeout ? 1f : 0.0f);
            }
            return(0.0f);
        }
        private static void NavigateToWaypointLoc(NPCHumanContext c)
        {
            if (c.GetFact(NPCPlayerApex.Facts.HasWaypoints) <= (byte)0 || !c.Human.IsNavRunning())
            {
                return;
            }
            c.Human.StoppingDistance = 0.3f;
            WaypointSet.Waypoint point = c.Human.WaypointSet.Points[c.Human.CurrentWaypointIndex];
            bool    flag      = false;
            Vector3 position  = point.Transform.get_position();
            Vector3 vector3_1 = Vector3.op_Subtraction(c.Human.Destination, position);

            if ((double)((Vector3) ref vector3_1).get_sqrMagnitude() > 0.00999999977648258)
            {
                HumanNavigateToOperator.MakeUnstuck(c);
                c.Human.Destination = position;
                c.Human.SetTargetPathStatus(0.05f);
                flag = true;
            }
            float num   = 0.0f;
            int   index = c.Human.PeekNextWaypointIndex();

            if (c.Human.WaypointSet.Points.Count > index && Mathf.Approximately(c.Human.WaypointSet.Points[index].WaitTime, 0.0f))
            {
                num = 1f;
            }
            Vector3 vector3_2 = Vector3.op_Subtraction(c.Position, c.Human.Destination);

            if ((double)((Vector3) ref vector3_2).get_sqrMagnitude() > (double)c.Human.SqrStoppingDistance + (double)num)
            {
                c.Human.LookAtPoint = (Transform)null;
                c.Human.LookAtEyes  = (PlayerEyes)null;
                if (c.GetFact(NPCPlayerApex.Facts.IsMoving) == (byte)0 && !flag)
                {
                    c.Human.CurrentWaypointIndex = c.Human.GetNextWaypointIndex();
                    c.SetFact(NPCPlayerApex.Facts.IsMovingTowardWaypoint, (byte)0, true, true);
                }
                else
                {
                    c.SetFact(NPCPlayerApex.Facts.IsMovingTowardWaypoint, (byte)1, true, true);
                }
            }
 public static void NavigateToEnemy(NPCHumanContext c)
 {
     if (c.GetFact(NPCPlayerApex.Facts.HasEnemy) > 0 && c.AIAgent.IsNavRunning())
     {
         if (c.GetFact(NPCPlayerApex.Facts.HasLineOfSight) <= 0 || c.EnemyPosition.sqrMagnitude <= 0f)
         {
             Memory.SeenInfo info = c.Memory.GetInfo(c.AIAgent.AttackTarget);
             if (info.Entity != null && info.Position.sqrMagnitude > 0f)
             {
                 HumanNavigateToOperator.MakeUnstuck(c);
                 c.Human.StoppingDistance = 1.5f;
                 c.Human.Destination      = info.Position;
             }
         }
         else
         {
             HumanNavigateToOperator.MakeUnstuck(c);
             c.Human.StoppingDistance = 1.5f;
             c.Human.Destination      = c.EnemyPosition;
         }
         c.Human.SetTargetPathStatus(0.05f);
     }
 }
示例#9
0
 public static void MountOperation(NPCHumanContext c, MountOperator.MountOperationType type)
 {
     if (type != MountOperator.MountOperationType.Mount)
     {
         if (type != MountOperator.MountOperationType.Dismount)
         {
             return;
         }
         if (c.GetFact(NPCPlayerApex.Facts.IsMounted) == 1)
         {
             c.Human.Dismount();
         }
     }
     else if (c.GetFact(NPCPlayerApex.Facts.IsMounted) == 0 && !ConVar.AI.npc_ignore_chairs)
     {
         BaseChair chairTarget = c.ChairTarget;
         if (chairTarget != null)
         {
             c.Human.Mount(chairTarget);
             return;
         }
     }
 }
        public static bool Evaluate(NPCHumanContext c, float minThreshold, float maxThreshold)
        {
            if (Mathf.Approximately(c.Human.TimeLastMovedToCover, 0f))
            {
                return(true);
            }
            float timeLastMovedToCover = Time.realtimeSinceStartup - c.Human.TimeLastMovedToCover;

            if (c.GetFact(NPCPlayerApex.Facts.IsMovingToCover) > 0 || timeLastMovedToCover < minThreshold)
            {
                return(false);
            }
            if (timeLastMovedToCover >= maxThreshold)
            {
                return(true);
            }
            float single = maxThreshold - minThreshold;

            return(UnityEngine.Random.@value < (maxThreshold - timeLastMovedToCover) / single);
        }
        public static bool Evaluate(NPCHumanContext c, float minThreshold, float maxThreshold)
        {
            if (Mathf.Approximately(c.Human.TimeLastMovedToCover, 0.0f))
            {
                return(true);
            }
            float num1 = Time.get_realtimeSinceStartup() - c.Human.TimeLastMovedToCover;

            if (c.GetFact(NPCPlayerApex.Facts.IsMovingToCover) > (byte)0 || (double)num1 < (double)minThreshold)
            {
                return(false);
            }
            if ((double)num1 >= (double)maxThreshold)
            {
                return(true);
            }
            float num2 = maxThreshold - minThreshold;

            return((double)Random.get_value() < (double)(maxThreshold - num1) / (double)num2);
        }
        public override float GetScore(BaseContext ctx)
        {
            object          obj;
            NPCHumanContext nPCHumanContext = ctx as NPCHumanContext;

            if (nPCHumanContext == null || nPCHumanContext.GetFact(NPCPlayerApex.Facts.RangeToSpawnLocation) < (byte)nPCHumanContext.Human.GetStats.MaxRangeToSpawnLoc)
            {
                return(0f);
            }
            if (float.IsNaN(nPCHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition) || float.IsNegativeInfinity(nPCHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition) || float.IsInfinity(nPCHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition))
            {
                return(0f);
            }
            if (nPCHumanContext.Human.SecondsSinceLastInRangeOfSpawnPosition >= nPCHumanContext.Human.GetStats.OutOfRangeOfSpawnPointTimeout)
            {
                obj = 1;
            }
            else
            {
                obj = null;
            }
            return((float)obj);
        }
        public static bool Evaluate(NPCHumanContext c, NavMeshPathStatus s)
        {
            byte fact = c.GetFact(NPCPlayerApex.Facts.PathToTargetStatus);

            return(c.Human.ToPathStatus(fact) == s);
        }
 public static bool Evaluate(NPCHumanContext c)
 {
     return(c.GetFact(NPCPlayerApex.Facts.IsRoamReady) > (byte)0);
 }