コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }