protected override Job TryGiveJob(Pawn pawn) { if (pawn.mindState.nextMoveOrderIsWait) { Job job = JobMaker.MakeJob(JobDefOf.Wait_Wander); job.expiryInterval = waitTicks.RandomInRange; pawn.mindState.nextMoveOrderIsWait = false; return(job); } if (Rand.Value < 0.75f) { Thing thing = TryFindRandomIgniteTarget(pawn); if (thing != null) { pawn.mindState.nextMoveOrderIsWait = true; return(JobMaker.MakeJob(JobDefOf.Ignite, thing)); } } IntVec3 c = RCellFinder.RandomWanderDestFor(pawn, pawn.Position, 10f, null, Danger.Deadly); if (c.IsValid) { pawn.mindState.nextMoveOrderIsWait = true; return(JobMaker.MakeJob(JobDefOf.GotoWander, c)); } return(null); }
protected override Job TryGiveJob(Pawn pawn) { if (pawn.mindState.nextMoveOrderIsWait) { Job job = new Job(JobDefOf.WaitWander); job.expiryInterval = this.waitTicks.RandomInRange; pawn.mindState.nextMoveOrderIsWait = false; return(job); } if (Rand.Value < 0.75f) { Thing thing = this.TryFindRandomIgniteTarget(pawn); if (thing != null) { pawn.mindState.nextMoveOrderIsWait = true; return(new Job(JobDefOf.Ignite, thing)); } } IntVec3 intVec = RCellFinder.RandomWanderDestFor(pawn, pawn.Position, 10f, null, Danger.Deadly); if (intVec.IsValid) { pawn.mindState.nextMoveOrderIsWait = true; Job job2 = new Job(JobDefOf.GotoWander, intVec); pawn.Map.pawnDestinationReservationManager.Reserve(pawn, job2, intVec); return(job2); } return(null); }
protected override Job TryGiveJob(Pawn pawn) { CompEggLayer compEggLayer = pawn.TryGetComp <CompEggLayer>(); if (compEggLayer != null && compEggLayer.CanLayNow) { IntVec3 c = RCellFinder.RandomWanderDestFor(pawn, pawn.Position, 5f, null, Danger.Some); return(new Job(JobDefOf.LayEgg, c)); } return(null); }
protected override Job TryGiveJob(Pawn pawn) { CompEggLayer compEggLayer = pawn.TryGetComp <CompEggLayer>(); Job result; if (compEggLayer == null || !compEggLayer.CanLayNow) { result = null; } else { IntVec3 c = RCellFinder.RandomWanderDestFor(pawn, pawn.Position, 5f, null, Danger.Some); result = new Job(JobDefOf.LayEgg, c); } return(result); }
// Token: 0x06000424 RID: 1060 RVA: 0x0002CE84 File Offset: 0x0002B284 protected override Job TryGiveJob(Pawn pawn) { CompXenoEggLayer compEggLayer = pawn.TryGetComp <CompXenoEggLayer>(); if (compEggLayer == null || !compEggLayer.CanLayNow) { return(null); } IntVec3 c; if (pawn.GetLord() != null && pawn.GetLord().LordJob is LordJob_DefendBase lordjob) { c = lordjob.lord.Graph.StartingToil.FlagLoc; c = RCellFinder.RandomWanderDestFor(pawn, c, 5f, null, Danger.Some); } else { Thing thing = GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForDef(XenomorphDefOf.RRY_EggXenomorphFertilized), PathEndMode.OnCell, TraverseParms.For(TraverseMode.NoPassClosedDoors, Danger.Deadly, false), 9999f, null, null, 0, -1, false, RegionType.Set_Passable, false); if (thing == null) { c = RCellFinder.RandomWanderDestFor(pawn, pawn.Position, 5f, null, Danger.Some); } else { InfestationCellFinder.TryFindCell(out c, pawn.Map); if (pawn.CanReach(c, PathEndMode.OnCell, Danger.Deadly)) { c = RCellFinder.RandomWanderDestFor(pawn, c, 3f, null, Danger.Some); } else { c = RCellFinder.RandomWanderDestFor(pawn, thing.Position, 3f, null, Danger.Some); } } } return(new Job(XenomorphDefOf.RRY_Job_LayXenomorphEgg, c)); }
public static IEnumerable <LocalTargetInfo> AllMeditationSpotCandidates(Pawn pawn, bool allowFallbackSpots = true) { bool flag = false; if (pawn.royalty != null && pawn.royalty.AllTitlesInEffectForReading.Count > 0 && !pawn.IsPrisonerOfColony) { Building_Throne building_Throne = RoyalTitleUtility.FindBestUsableThrone(pawn); if (building_Throne != null) { yield return(building_Throne); flag = true; } } if (!pawn.IsPrisonerOfColony) { foreach (Building item in pawn.Map.listerBuildings.AllBuildingsColonistOfDef(ThingDefOf.MeditationSpot).Where(delegate(Building s) { if (s.IsForbidden(pawn) || !s.Position.Standable(s.Map)) { return(false); } if (s.GetAssignedPawn() != null && s.GetAssignedPawn() != pawn) { return(false); } Room room4 = s.GetRoom(); return((room4 == null || CanUseRoomToMeditate(room4, pawn)) && pawn.CanReserveAndReach(s, PathEndMode.OnCell, pawn.NormalMaxDanger())); })) { yield return(item); flag = true; } } if (flag || !allowFallbackSpots) { yield break; } List <Thing> list = pawn.Map.listerThings.ThingsInGroup(ThingRequestGroup.MeditationFocus); foreach (Thing item2 in list) { if (item2.def == ThingDefOf.Wall) { continue; } Room room = item2.GetRoom(); if ((room == null || CanUseRoomToMeditate(room, pawn)) && item2.GetStatValueForPawn(StatDefOf.MeditationFocusStrength, pawn) > 0f) { LocalTargetInfo localTargetInfo = MeditationSpotForFocus(item2, pawn); if (localTargetInfo.IsValid) { yield return(localTargetInfo); } } } Building_Bed bed = pawn.ownership.OwnedBed; Room room2 = bed?.GetRoom(); IntVec3 c2; if (room2 != null && !room2.PsychologicallyOutdoors && pawn.CanReserveAndReach(bed, PathEndMode.OnCell, pawn.NormalMaxDanger())) { foreach (LocalTargetInfo item3 in FocusSpotsInTheRoom(pawn, room2)) { yield return(item3); } c2 = RCellFinder.RandomWanderDestFor(pawn, bed.Position, WanderRadius, (Pawn p, IntVec3 c, IntVec3 r) => c.Standable(p.Map) && c.GetDoor(p.Map) == null && WanderRoomUtility.IsValidWanderDest(p, c, r), pawn.NormalMaxDanger()); if (c2.IsValid) { yield return(c2); } } if (pawn.IsPrisonerOfColony) { yield break; } IntVec3 colonyWanderRoot = WanderUtility.GetColonyWanderRoot(pawn); c2 = RCellFinder.RandomWanderDestFor(pawn, colonyWanderRoot, WanderRadius, delegate(Pawn p, IntVec3 c, IntVec3 r) { if (!c.Standable(p.Map) || c.GetDoor(p.Map) != null || !p.CanReserveAndReach(c, PathEndMode.OnCell, p.NormalMaxDanger())) { return(false); } Room room3 = c.GetRoom(p.Map); return((room3 == null || CanUseRoomToMeditate(room3, pawn)) ? true : false); }, pawn.NormalMaxDanger()); if (c2.IsValid) { yield return(c2); } }