public static void GetInsultCandidatesFor(Pawn bully, List <Pawn> outCandidates, bool allowPrisoners = true)
        {
            outCandidates.Clear();
            Region region = bully.GetRegion(RegionType.Set_Passable);

            if (region == null)
            {
                return;
            }
            TraverseParms traverseParams = TraverseParms.For(bully, Danger.Deadly, TraverseMode.ByPawn, false);

            RegionTraverser.BreadthFirstTraverse(region, (Region from, Region to) => to.Allows(traverseParams, false), delegate(Region r)
            {
                List <Thing> list = r.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn);
                for (int i = 0; i < list.Count; i++)
                {
                    Pawn pawn = (Pawn)list[i];
                    if (InsultingSpreeMentalStateUtility.CanChaseAndInsult(bully, pawn, true, allowPrisoners))
                    {
                        outCandidates.Add(pawn);
                    }
                }
                return(false);
            }, 40, RegionType.Set_Passable);
        }
 public override void MentalStateTick()
 {
     if (this.target != null && (!this.target.Spawned || !this.pawn.CanReach(this.target, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)))
     {
         Pawn target = this.target;
         if (!this.TryFindNewTarget())
         {
             base.RecoverFromState();
         }
         else
         {
             Messages.Message("MessageTargetedInsultingSpreeChangedTarget".Translate(new object[]
             {
                 this.pawn.LabelShort,
                 target.Label,
                 this.target.Label
             }).AdjustedFor(this.pawn, "PAWN"), this.pawn, MessageTypeDefOf.NegativeEvent, true);
             base.MentalStateTick();
         }
     }
     else if (this.target == null || !InsultingSpreeMentalStateUtility.CanChaseAndInsult(this.pawn, this.target, false, false))
     {
         base.RecoverFromState();
     }
     else
     {
         base.MentalStateTick();
     }
 }
 public override void MentalStateTick()
 {
     if (base.target != null && !InsultingSpreeMentalStateUtility.CanChaseAndInsult(base.pawn, base.target, false, true))
     {
         this.ChooseNextTarget();
     }
     if (base.pawn.IsHashIntervalTick(250) && (base.target == null || base.insultedTargetAtLeastOnce))
     {
         this.ChooseNextTarget();
     }
     base.MentalStateTick();
 }
Beispiel #4
0
 public override void MentalStateTick()
 {
     if (target != null && !InsultingSpreeMentalStateUtility.CanChaseAndInsult(pawn, target))
     {
         ChooseNextTarget();
     }
     if (pawn.IsHashIntervalTick(250) && (target == null || insultedTargetAtLeastOnce))
     {
         ChooseNextTarget();
     }
     base.MentalStateTick();
 }
Beispiel #5
0
            internal bool <> m__1(Region r)
            {
                List <Thing> list = r.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn);

                for (int i = 0; i < list.Count; i++)
                {
                    Pawn pawn = (Pawn)list[i];
                    if (InsultingSpreeMentalStateUtility.CanChaseAndInsult(this.bully, pawn, true, this.allowPrisoners))
                    {
                        this.outCandidates.Add(pawn);
                    }
                }
                return(false);
            }
Beispiel #6
0
 public override void MentalStateTick()
 {
     if (base.target != null && (!base.target.Spawned || !pawn.CanReach(base.target, PathEndMode.Touch, Danger.Deadly) || !base.target.Awake()))
     {
         Pawn target = base.target;
         if (!TryFindNewTarget())
         {
             RecoverFromState();
             return;
         }
         Messages.Message("MessageTargetedInsultingSpreeChangedTarget".Translate(pawn.LabelShort, target.Label, base.target.Label, pawn.Named("PAWN"), target.Named("OLDTARGET"), base.target.Named("TARGET")).AdjustedFor(pawn), pawn, MessageTypeDefOf.NegativeEvent);
         base.MentalStateTick();
     }
     else if (base.target == null || !InsultingSpreeMentalStateUtility.CanChaseAndInsult(pawn, base.target, skipReachabilityCheck: false, allowPrisoners: false))
     {
         RecoverFromState();
     }
     else
     {
         base.MentalStateTick();
     }
 }