public static bool ReleaseAllObsoleteClaimedBy(PawnDestinationReservationManager __instance, Pawn p) { if (p.Faction == null) { return(false); } lock (__instance) { List <PawnDestinationReservation> list = new List <PawnDestinationReservation>(__instance.GetPawnDestinationSetFor(p.Faction).list); int num = 0; while (num < list.Count) { if (list[num].claimant == p && list[num].obsolete) { list[num] = list[list.Count - 1]; list.RemoveLast(); } else { num++; } } __instance.GetPawnDestinationSetFor(p.Faction).list = list; } return(false); }
public static bool ObsoleteAllClaimedBy(PawnDestinationReservationManager __instance, Pawn p) { if (p.Faction == null) { return(false); } lock (__instance) { List <PawnDestinationReservation> list = new List <PawnDestinationReservation>(__instance.GetPawnDestinationSetFor(p.Faction).list); for (int i = 0; i < list.Count; i++) { if (list[i].claimant == p) { list[i].obsolete = true; if (list[i].job == null) { list[i] = list[list.Count - 1]; list.RemoveLast(); i--; } } } __instance.GetPawnDestinationSetFor(p.Faction).list = list; } return(false); }
public static bool Reserve(PawnDestinationReservationManager __instance, Pawn p, Job job, IntVec3 loc) { if (p.Faction != null) { if (p.Drafted && p.Faction == Faction.OfPlayer && __instance.IsReserved(loc, out Pawn claimant) && claimant != p && !claimant.HostileTo(p) && claimant.Faction != p.Faction && ( claimant.mindState == null || claimant.mindState.mentalStateHandler == null || !claimant.mindState.mentalStateHandler.InMentalState || ( claimant.mindState.mentalStateHandler.CurStateDef.category != MentalStateCategory.Aggro && claimant.mindState.mentalStateHandler.CurStateDef.category != MentalStateCategory.Malicious))) { claimant.jobs.EndCurrentJob(JobCondition.InterruptForced); } __instance.ObsoleteAllClaimedBy(p); lock (__instance) { __instance.GetPawnDestinationSetFor(p.Faction).list.Add(new PawnDestinationReservation { target = loc, claimant = p, job = job }); } } return(false); }
public static bool MostRecentReservationFor(PawnDestinationReservationManager __instance, ref PawnDestinationReservation __result, Pawn p) { if (p.Faction == null) { __result = null; return(false); } List <PawnDestinationReservation> list = __instance.GetPawnDestinationSetFor(p.Faction).list; for (int i = 0; i < list.Count; i++) { PawnDestinationReservation pawnDestinationReservation; try { pawnDestinationReservation = list[i]; } catch (ArgumentOutOfRangeException) { break; } if (pawnDestinationReservation != null && pawnDestinationReservation.claimant == p && !pawnDestinationReservation.obsolete) { __result = list[i]; return(false); } } __result = null; return(false); }