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); }