Пример #1
0
        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;
        }
Пример #2
0
        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);
                };
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
        }