public static bool ReleaseAllObsoleteClaimedBy(PawnDestinationReservationManager __instance, Pawn p) { if (p.Faction == null) { return(false); } PawnDestinationReservationManager.PawnDestinationSet destinationSet = GetPawnDestinationSetFor2(p.Faction); List <PawnDestinationReservationManager.PawnDestinationReservation> list = destinationSet.list; int index = 0; lock (list) { while (index < list.Count) { if (list[index].claimant == p && list[index].obsolete) { list[index] = list[list.Count - 1]; list.RemoveLast(); } else { ++index; } } } return(false); }
public static bool ObsoleteAllClaimedBy(PawnDestinationReservationManager __instance, Pawn p) { if (p.Faction == null) { return(false); } PawnDestinationReservationManager.PawnDestinationSet destinationSet = GetPawnDestinationSetFor2(p.Faction); List <PawnDestinationReservationManager.PawnDestinationReservation> list = destinationSet.list; lock (list) { for (int index = 0; index < list.Count; ++index) { if (list[index].claimant == p) { list[index].obsolete = true; if (list[index].job == null) { list[index] = list[list.Count - 1]; list.RemoveLast(); --index; } } } } return(false); }
public static bool Reserve(PawnDestinationReservationManager __instance, Pawn p, Job job, IntVec3 loc) { if (p.Faction == null) { return(false); } Pawn claimant; if (p.Drafted && p.Faction == Faction.OfPlayer && (__instance.IsReserved(loc, out claimant) && claimant != p) && (!claimant.HostileTo((Thing)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, true, true); } ObsoleteAllClaimedBy2(p); PawnDestinationReservationManager.PawnDestinationSet destinationSet = GetPawnDestinationSetFor2(p.Faction); List <PawnDestinationReservationManager.PawnDestinationReservation> list = destinationSet.list; lock (list) { list.Add(new PawnDestinationReservationManager.PawnDestinationReservation() { target = loc, claimant = p, job = job }); } return(false); }
public static PawnDestinationReservationManager.PawnDestinationSet GetPawnDestinationSetFor2(Faction faction) { PawnDestinationReservationManager.PawnDestinationSet value = reservedDestinations.GetOrAdd(faction, new PawnDestinationReservationManager.PawnDestinationSet()); return(value); }
public static bool GetPawnDestinationSetFor(PawnDestinationReservationManager __instance, ref PawnDestinationReservationManager.PawnDestinationSet __result, Faction faction) { PawnDestinationReservationManager.PawnDestinationSet value = reservedDestinations.GetOrAdd(faction, new PawnDestinationReservationManager.PawnDestinationSet()); __result = value; return(false); }