コード例 #1
0
 private static void JobGiver_AIGotoNearestHostilePostfix(JobGiver_AIGotoNearestHostile __instance, ref Job __result, Pawn pawn)
 {
     ZLogger.Message(pawn + " got response 4: " + __result, true);
     if (__result == null && !recursiveTrap)
     {
         recursiveTrap = true;
         CombatPatches_BestAttackTarget_Patch.multiMapSearch = true;
         var job = __instance.TryGiveJob(pawn);
         if (job != null)
         {
             ZLogger.Message("Second block: " + job, true);
             if (job.targetA.Thing?.Map != null && job.targetA.Thing.Map != pawn.Map)
             {
                 ZUtils.ZTracker.ResetJobTrackerFor(pawn);
                 ZUtils.ZTracker.BuildJobListFor(pawn, job.targetA.Thing.Map, __result);
                 ZUtils.ZTracker.jobTracker[pawn].targetDest       = new TargetInfo(job.targetA.Thing);
                 ZUtils.ZTracker.jobTracker[pawn].forceGoToDestMap = true;
                 __result = ZUtils.ZTracker.jobTracker[pawn].activeJobs[0];
                 ZUtils.ZTracker.jobTracker[pawn].activeJobs.RemoveAt(0);
             }
             else
             {
                 __result = job;
             }
         }
         recursiveTrap = false;
         CombatPatches_BestAttackTarget_Patch.multiMapSearch = false;
     }
     else if (__result != null && __result.targetA.Thing?.Map != null && __result.targetA.Thing.Map != pawn.Map)
     {
         ZLogger.Message("Second block: " + __result, true);
         ZUtils.ZTracker.ResetJobTrackerFor(pawn);
         ZUtils.ZTracker.BuildJobListFor(pawn, __result.targetA.Thing.Map, __result);
         ZUtils.ZTracker.jobTracker[pawn].targetDest       = new TargetInfo(__result.targetA.Thing);
         ZUtils.ZTracker.jobTracker[pawn].forceGoToDestMap = true;
         __result = ZUtils.ZTracker.jobTracker[pawn].activeJobs[0];
         ZUtils.ZTracker.jobTracker[pawn].activeJobs.RemoveAt(0);
     }
     ZLogger.Message(pawn + " got result 4: " + __result + " in " + pawn.Map + " - " + __result?.targetA.Thing?.Map + " - mind enemy: " + pawn.mindState.enemyTarget, true);
 }