public static void MakePawnsLeave(IEnumerable <Pawn> pawns, bool sendLetter, Quest quest) { bool flag = pawns.Any((Pawn x) => x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer); List <Pawn> list = pawns.Where((Pawn x) => x.Spawned || x.IsCaravanMember()).ToList(); if (sendLetter && list.Any()) { Pawn singlePawn; string value = GenLabel.BestGroupLabel(list, definite: false, out singlePawn); string value2 = GenLabel.BestGroupLabel(list, definite: true, out singlePawn); if (flag) { if (singlePawn != null) { Find.LetterStack.ReceiveLetter("LetterLabelPawnLeaving".Translate(value), "LetterPawnLeaving".Translate(value2), LetterDefOf.NeutralEvent, singlePawn, null, quest); } else { Find.LetterStack.ReceiveLetter("LetterLabelPawnsLeaving".Translate(value), "LetterPawnsLeaving".Translate(value2), LetterDefOf.NeutralEvent, list[0], null, quest); } } else if (singlePawn != null) { Messages.Message("MessagePawnLeaving".Translate(value2), singlePawn, MessageTypeDefOf.NeutralEvent); } else { Messages.Message("MessagePawnsLeaving".Translate(value2), list[0], MessageTypeDefOf.NeutralEvent); } } foreach (Pawn pawn2 in pawns) { MakePawnLeave(pawn2, quest); } IEnumerable <Pawn> enumerable = pawns.Where((Pawn p) => p.Spawned && !p.Downed); if (enumerable.Any()) { Pawn pawn = enumerable.First(); LordJob_ExitMapBest lordJob = new LordJob_ExitMapBest(LocomotionUrgency.Walk, canDig: true, canDefendSelf: true); LordMaker.MakeNewLord(pawn.Faction, lordJob, pawn.MapHeld, enumerable); } }