示例#1
0
        public static GraveDig_JobParameters RetrieveGDJP(this Pawn p, GraveDiggerDef GDD, bool MyDebug = false)
        {
            string myDebugStr = MyDebug ? p.LabelShort + " RetrieveGraveDiggerDef RetrieveGDJP " : "";

            GraveDig_JobParameters GDJP = p.WorkerFulfillsRequirements(GDD);

            if (GDJP == null)
            {
                if (MyDebug)
                {
                    Log.Warning(myDebugStr + "pawns does not fulfil requirements; exit");
                }
                return(null);
            }

            if (!GDJP.target.HasEligibleGraves)
            {
                if (MyDebug)
                {
                    Log.Warning(myDebugStr + "CRS has no eligible category def; exit");
                }
                return(null);
            }

            return(GDJP);
        }
        protected override Job TryGiveJob(Pawn pawn)
        {
            string myDebugStr = PreRetrieveDebug ? pawn.LabelShort + " Ai_GraveDigger_JobGiver TryGiveJob " : "";

            if (pawn.NegligiblePawn())
            {
                if (PreRetrieveDebug)
                {
                    Log.Warning(myDebugStr + "negligible; exit");
                }
                return(null);
            }

            GraveDiggerDef         DefToUse = pawn.RetrieveGDD(out MyDebug, PreRetrieveDebug);
            GraveDig_JobParameters GDJP     = pawn.RetrieveGDJP(DefToUse, MyDebug);

            if (!pawn.GetClosestCompatibleGrave(GDJP.target, out Thing FoundGrave, out Thing FoundCorpse, MyDebug))
            {
                if (MyDebug)
                {
                    Log.Warning(myDebugStr + "grave or corpse " + FoundGrave?.Label + " " + FoundGrave?.Position + " is not ok; exit");
                }
                return(null);
            }

            if (MyDebug)
            {
                Log.Warning(myDebugStr + " accepting " + DefToUse.jobDef.defName + " for grave " + FoundGrave?.Label + " " + FoundGrave?.Position + " => go go");
            }
            Job job = JobMaker.MakeJob(DefToUse.jobDef, FoundGrave, FoundCorpse);

            return(job);
        }
示例#3
0
        private bool CheckAndFillWorkFlow()
        {
            if (!HasGDJP)
            {
                if (MyCsDebug || MyDebug)
                {
                    Log.Warning("Ai_GraveDig_JobDriver cant work without workflow, Loading it");
                }

                if (pawn.RetrieveGDD(out MyDebug, MyCsDebug) is GraveDiggerDef DefToUse && pawn.RetrieveGDJP(DefToUse, MyDebug) is GraveDig_JobParameters GDJP)
                {
                    RetrievedGDJP = GDJP;
                    return(true);
                }
                return(false);
            }
            return(true);
        }