public static bool IsUsableCarrier(Pawn p, Pawn forPawn, bool allowColonists) { if (p == forPawn) { return(true); } int result; if (!p.DestroyedOrNull() && p.Spawned && !p.inventory.UnloadEverything && forPawn.CanReach(p, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { if (allowColonists && p.IsColonist) { return(true); } if ((p.RaceProps.packAnimal || p.HostFaction == Faction.OfPlayer) && !p.IsBurning() && !p.Downed) { result = ((!MassUtility.IsOverEncumbered(p)) ? 1 : 0); goto IL_009b; } result = 0; goto IL_009b; } return(false); IL_009b: return((byte)result != 0); }
private Toil FindCarrier() { return(new Toil { initAction = delegate() { Pawn pawn = this.FindBestCarrier(true); if (pawn == null) { bool flag = this.pawn.GetLord() == this.job.lord; if (flag && !MassUtility.IsOverEncumbered(this.pawn)) { pawn = this.pawn; } else { pawn = this.FindBestCarrier(false); if (pawn == null) { if (flag) { pawn = this.pawn; } else { IEnumerable <Pawn> source = from x in this.job.lord.ownedPawns where JobDriver_PrepareCaravan_GatherItems.IsUsableCarrier(x, this.pawn, true) select x; if (!source.Any <Pawn>()) { base.EndJobWith(JobCondition.Incompletable); return; } pawn = source.RandomElement <Pawn>(); } } } } this.job.SetTarget(TargetIndex.B, pawn); } }); }
private Toil FindCarrier() { Toil toil = new Toil(); toil.initAction = delegate { Pawn pawn = FindBestCarrier(onlyAnimals: true); if (pawn == null) { bool flag = base.pawn.GetLord() == job.lord; if (flag && !MassUtility.IsOverEncumbered(base.pawn)) { pawn = base.pawn; } else { pawn = FindBestCarrier(onlyAnimals: false); if (pawn == null) { if (flag) { pawn = base.pawn; } else { IEnumerable <Pawn> source = from x in job.lord.ownedPawns where IsUsableCarrier(x, base.pawn, allowColonists: true) select x; if (!source.Any()) { EndJobWith(JobCondition.Incompletable); return; } pawn = source.RandomElement(); } } } } job.SetTarget(TargetIndex.B, pawn); }; return(toil); }
private Toil FindCarrier() { Toil toil = new Toil(); toil.initAction = delegate { Pawn pawn = this.FindBestCarrier(true); if (pawn == null) { bool flag = base.pawn.GetLord() == base.job.lord; if (flag && !MassUtility.IsOverEncumbered(base.pawn)) { pawn = base.pawn; } else { pawn = this.FindBestCarrier(false); if (pawn == null) { if (!flag) { IEnumerable <Pawn> source = from x in base.job.lord.ownedPawns where JobDriver_PrepareCaravan_GatherItems.IsUsableCarrier(x, base.pawn, true) select x; if (source.Any()) { pawn = source.RandomElement(); goto IL_00aa; } base.EndJobWith(JobCondition.Incompletable); return; } pawn = base.pawn; } } } goto IL_00aa; IL_00aa: base.job.SetTarget(TargetIndex.B, pawn); }; return(toil); }
public static bool IsUsableCarrier(Pawn p, Pawn forPawn, bool allowColonists) { if (!p.IsFormingCaravan()) { return(false); } if (p == forPawn) { return(true); } if (p.DestroyedOrNull() || !p.Spawned || p.inventory.UnloadEverything || !forPawn.CanReach(p, PathEndMode.Touch, Danger.Deadly)) { return(false); } if (allowColonists && p.IsColonist) { return(true); } if ((p.RaceProps.packAnimal || p.HostFaction == Faction.OfPlayer) && !p.IsBurning() && !p.Downed) { return(!MassUtility.IsOverEncumbered(p)); } return(false); }
public static bool IsUsableCarrier(Pawn p, Pawn forPawn, bool allowColonists) { return(p.IsFormingCaravan() && (p == forPawn || (!p.DestroyedOrNull() && p.Spawned && !p.inventory.UnloadEverything && forPawn.CanReach(p, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn) && ((allowColonists && p.IsColonist) || ((p.RaceProps.packAnimal || p.HostFaction == Faction.OfPlayer) && !p.IsBurning() && !p.Downed && !MassUtility.IsOverEncumbered(p)))))); }
public static Pawn GetPawnToFollow(Pawn forPawn) { if (!forPawn.RaceProps.packAnimal || forPawn.inventory.UnloadEverything || MassUtility.IsOverEncumbered(forPawn)) { return(null); } Lord lord = forPawn.GetLord(); if (lord == null) { return(null); } List <Pawn> ownedPawns = lord.ownedPawns; for (int i = 0; i < ownedPawns.Count; i++) { Pawn pawn = ownedPawns[i]; if (pawn != forPawn && CaravanUtility.IsOwner(pawn, forPawn.Faction) && pawn.CurJob != null && pawn.CurJob.def == JobDefOf.PrepareCaravan_GatherItems && forPawn.CanReach(pawn, PathEndMode.Touch, Danger.Deadly) && ((JobDriver_PrepareCaravan_GatherItems)pawn.jobs.curDriver).Carrier == forPawn) { return(pawn); } } Pawn pawn2 = null; for (int j = 0; j < ownedPawns.Count; j++) { Pawn pawn3 = ownedPawns[j]; if (pawn3 != forPawn && CaravanUtility.IsOwner(pawn3, forPawn.Faction) && pawn3.CurJob != null && pawn3.CurJob.def == JobDefOf.PrepareCaravan_GatherItems && forPawn.CanReach(pawn3, PathEndMode.Touch, Danger.Deadly) && (pawn2 == null || forPawn.Position.DistanceToSquared(pawn3.Position) < forPawn.Position.DistanceToSquared(pawn2.Position))) { pawn2 = pawn3; } } return(pawn2); }