public static bool Prefix(BehaviorNode __instance, ref BehaviorTreeResults __result, ref BehaviorTree ___tree, ref AbstractActor ___unit)
 {
     try {
         List <AbstractActor> allAlliesOf = ___unit.Combat.GetAllAlliesOf(___unit);
         AuraBubble           sensors     = ___unit.sensorAura();
         for (int index1 = 0; index1 < ___tree.enemyUnits.Count; ++index1)
         {
             ICombatant    enemyUnit     = ___tree.enemyUnits[index1];
             AbstractActor abstractActor = enemyUnit as AbstractActor;
             float         magnitude     = (enemyUnit.CurrentPosition - ___unit.CurrentPosition).magnitude;
             if (AIUtil.UnitHasVisibilityToTargetFromPosition(___unit, enemyUnit, ___unit.CurrentPosition, allAlliesOf))
             {
                 if (___unit.CanEngageTarget(enemyUnit) || ___unit.CanDFATargetFromPosition(enemyUnit, ___unit.CurrentPosition))
                 {
                     __result = new BehaviorTreeResults(BehaviorNodeState.Success);
                     return(false);
                 }
                 if ((double)magnitude <= (double)___unit.MaxWalkDistance)
                 {
                     __result = new BehaviorTreeResults(BehaviorNodeState.Success);
                     return(false);
                 }
                 if (abstractActor != null && abstractActor.IsGhosted)
                 {
                     float num   = Mathf.Lerp(___unit.MaxWalkDistance, ___unit.MaxSprintDistance, ___unit.BehaviorTree.GetBehaviorVariableValue(BehaviorVariableName.Float_SignalInWeapRngWhenEnemyGhostedWithinMoveDistance).FloatVal);
                     float range = sensors.collider.radius;
                     if ((double)Vector3.Distance(___unit.CurrentPosition, abstractActor.CurrentPosition) - (double)range >= (double)num)
                     {
                         continue;
                     }
                 }
                 for (int index2 = 0; index2 < ___unit.Weapons.Count; ++index2)
                 {
                     Weapon weapon = ___unit.Weapons[index2];
                     if (weapon.CanFire && (double)weapon.MaxRange >= (double)magnitude)
                     {
                         __result = new BehaviorTreeResults(BehaviorNodeState.Success);
                         return(false);
                     }
                 }
             }
         }
         __result = new BehaviorTreeResults(BehaviorNodeState.Failure);
         return(false);
     } catch (Exception e) {
         Log.Debug?.Write(e.ToString() + "\n");
         __result = new BehaviorTreeResults(BehaviorNodeState.Failure);
         return(false);
     }
 }