public static Lord FindLord(int transportersGroup, Map map) { List <Lord> lords = map.lordManager.lords; for (int i = 0; i < lords.Count; i++) { LordJob_LoadAndEnterTransporters lordJob_LoadAndEnterTransporters = lords[i].LordJob as LordJob_LoadAndEnterTransporters; if (lordJob_LoadAndEnterTransporters != null && lordJob_LoadAndEnterTransporters.transportersGroup == transportersGroup) { return(lords[i]); } } return(null); }
public static void MakeLordsAsAppropriate(List <Pawn> pawns, List <CompTransporter> transporters, Map map) { int groupID = transporters[0].groupID; Lord lord = null; IEnumerable <Pawn> enumerable = pawns.Where((Pawn x) => x.IsColonist && !x.Downed && x.Spawned); if (enumerable.Any()) { lord = map.lordManager.lords.Find((Lord x) => x.LordJob is LordJob_LoadAndEnterTransporters && ((LordJob_LoadAndEnterTransporters)x.LordJob).transportersGroup == groupID); if (lord == null) { lord = LordMaker.MakeNewLord(Faction.OfPlayer, new LordJob_LoadAndEnterTransporters(groupID), map); } foreach (Pawn item in enumerable) { if (!lord.ownedPawns.Contains(item)) { item.GetLord()?.Notify_PawnLost(item, PawnLostCondition.ForcedToJoinOtherLord); lord.AddPawn(item); item.jobs.EndCurrentJob(JobCondition.InterruptForced); } } for (int num = lord.ownedPawns.Count - 1; num >= 0; num--) { if (!enumerable.Contains(lord.ownedPawns[num])) { lord.Notify_PawnLost(lord.ownedPawns[num], PawnLostCondition.NoLongerEnteringTransportPods); } } } for (int num2 = map.lordManager.lords.Count - 1; num2 >= 0; num2--) { LordJob_LoadAndEnterTransporters lordJob_LoadAndEnterTransporters = map.lordManager.lords[num2].LordJob as LordJob_LoadAndEnterTransporters; if (lordJob_LoadAndEnterTransporters != null && lordJob_LoadAndEnterTransporters.transportersGroup == groupID && map.lordManager.lords[num2] != lord) { map.lordManager.RemoveLord(map.lordManager.lords[num2]); } } }