public static void Postfix(ref Job __result, Pawn pawn, float ___radius) { if (__result != null) { return; } Predicate <Thing> validator = delegate(Thing t) { Pawn pawn3 = (Pawn)t; return(pawn3.Downed && pawn3.Faction == pawn.Faction && !pawn3.InBed() && pawn.CanReserve(pawn3, 1, -1, null, false) && !pawn3.IsForbidden(pawn) && !GenAI.EnemyIsNear(pawn3, 25f)); }; Pawn pawn2 = (Pawn)GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.Pawn), PathEndMode.OnCell, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), ___radius, validator, null, 0, -1, false, RegionType.Set_Passable, false); if (pawn2 == null) { return; } if (!PeacekeeperUtility.IsPeacekeeper(pawn2) || PeacekeeperUtility.IsInChargeStation(pawn2)) { return; } var building_Bed = PeacekeeperUtility.GetEmptyChargeStation(pawn2); if (building_Bed == null || !pawn2.CanReserve(building_Bed, 1, -1, null, false) || building_Bed.IsForbidden(pawn)) { return; } Job job = JobMaker.MakeJob(RSDefOf.RSRescueToChargeStation, pawn2, building_Bed); job.count = 1; __result = job; }
public static void Postfix(ref List <FloatMenuOption> __result, Vector3 clickPos, Pawn pawn) { var order = __result.FirstOrDefault(cur => cur.Priority == MenuOptionPriority.RescueOrCapture && PeacekeeperUtility.IsPeacekeeper(cur.revalidateClickTarget as Pawn)); if (order != null) { var victim = order.revalidateClickTarget as Pawn; if (!pawn.CanReserve(victim)) { return; } order.action = delegate() { var building_Bed = PeacekeeperUtility.GetEmptyChargeStation(victim); if (building_Bed == null) { string t5; if (victim.RaceProps.Animal) { t5 = "NoAnimalBed".Translate(); } else { t5 = "NoNonPrisonerBed".Translate(); } Messages.Message("CannotRescue".Translate() + ": " + t5, victim, MessageTypeDefOf.RejectInput, false); return; } Job job = JobMaker.MakeJob(RSDefOf.RSRescueToChargeStation, victim, building_Bed); job.count = 1; pawn.jobs.TryTakeOrderedJob(job, JobTag.Misc); PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.Rescuing, KnowledgeAmount.Total); }; } }
protected override Job TryGiveJob(Pawn pawn) { if (pawn.Drafted) { return(null); } if (pawn.needs.rest.CurLevel > (minEnergyRechargePercentage / 100f)) { return(null); } var emptyChargeStation = PeacekeeperUtility.GetEmptyChargeStation(pawn); if (emptyChargeStation == null || emptyChargeStation.IsForbidden(pawn)) { if (pawn.needs.rest.CurLevel < (minEnergyPowercellPercentage / 100f)) { var fuel = PeacekeeperUtility.FindBestFuel(pawn); if (fuel != null) { return(JobMaker.MakeJob(RSDefOf.RSFuelRobot, pawn, fuel)); } } return(JobMaker.MakeJob(JobDefOf.Wait, 120, true)); } return(JobMaker.MakeJob(RSDefOf.RSRecharge, emptyChargeStation)); }
public static void Postfix(ref bool __result, Pawn pawn, Thing t, bool forced = false) { Pawn pawn2 = t as Pawn; if (!PeacekeeperUtility.IsPeacekeeper(pawn2)) { return; } if (!pawn2.Downed || pawn2.Faction != Faction.OfPlayer || PeacekeeperUtility.IsInChargeStation(pawn2) || !pawn.CanReserve(pawn2) || GenAI.EnemyIsNear(pawn2, 40f)) { __result = false; return; } var chargeStation = PeacekeeperUtility.GetEmptyChargeStation(pawn2); __result = chargeStation != null && pawn2.CanReserve(chargeStation, 1, -1, null, false); }
public static void Postfix(ref Job __result, Pawn pawn, Thing t, bool forced = false) { Pawn pawn2 = t as Pawn; if (!PeacekeeperUtility.IsPeacekeeper(pawn2) || PeacekeeperUtility.IsInChargeStation(pawn2) || !pawn.CanReserve(t)) { return; } Thing t2 = PeacekeeperUtility.GetEmptyChargeStation(pawn2); if (t2 == null) { return; } Job job = JobMaker.MakeJob(RSDefOf.RSRescueToChargeStation, pawn2, t2); job.count = 1; __result = job; }