public static void DestroyStartingColonistFamily(Pawn pawn)
 {
     foreach (Pawn pawn2 in pawn.relations.RelatedPawns.ToList <Pawn>())
     {
         if (!Find.GameInitData.startingAndOptionalPawns.Contains(pawn2))
         {
             WorldPawnSituation situation = Find.WorldPawns.GetSituation(pawn2);
             if (situation == WorldPawnSituation.Free || situation == WorldPawnSituation.Dead)
             {
                 Find.WorldPawns.RemovePawn(pawn2);
                 Find.WorldPawns.PassToWorld(pawn2, PawnDiscardDecideMode.Discard);
             }
         }
     }
 }
Exemple #2
0
 public static void SituationSCPEvent(Pawn p, ref WorldPawnSituation __result, WorldPawns __instance)
 {
     if (__result == WorldPawnSituation.Free && p.kindDef == PawnKindDefOf_SCP.SCP_939_PawnKindDef)
     {
         Log.Message("Checking " + p.LabelShort);
         foreach (Map map in Find.Maps)
         {
             if (map.GameConditionManager.ActiveConditions.Any(x => x is GameCondition_SCP939 && (x as GameCondition_SCP939).ActiveSCPInArea.Contains(p)))
             {
                 Log.Message("Result Changed ");
                 __result = WorldPawnSituation.InTravelingTransportPod;
                 return;
             }
         }
     }
 }
Exemple #3
0
        public int GetPawnsBySituationCount(WorldPawnSituation situation)
        {
            int num = 0;

            foreach (Pawn p in this.pawnsAlive)
            {
                if (this.GetSituation(p) == situation)
                {
                    num++;
                }
            }
            foreach (Pawn p2 in this.pawnsDead)
            {
                if (this.GetSituation(p2) == situation)
                {
                    num++;
                }
            }
            return(num);
        }
Exemple #4
0
        public int GetPawnsBySituationCount(WorldPawnSituation situation)
        {
            int num = 0;

            foreach (Pawn item in pawnsAlive)
            {
                if (GetSituation(item) == situation)
                {
                    num++;
                }
            }
            foreach (Pawn item2 in pawnsDead)
            {
                if (GetSituation(item2) == situation)
                {
                    num++;
                }
            }
            return(num);
        }
Exemple #5
0
 /// <summary>
 /// Prevent RimWorld Garbage Collection from snatching up VehiclePawn inhabitants and VehicleCaravan's VehiclePawn inhabitants by changing
 /// the WorldPawnSituation of pawns onboard vehicles
 /// </summary>
 /// <param name="p"></param>
 /// <param name="__result"></param>
 public static void SituationBoardedVehicle(Pawn p, ref WorldPawnSituation __result)
 {
     if (__result == WorldPawnSituation.Free && p.Faction != null && p.Faction == Faction.OfPlayerSilentFail)
     {
         if (p is VehiclePawn aerialVehicle && aerialVehicle.CompVehicleLauncher.inFlight)
         {
             __result = WorldPawnSituation.InTravelingTransportPod;
             return;
         }
         foreach (Map map in Find.Maps)
         {
             foreach (VehiclePawn vehicle in map.mapPawns.AllPawnsSpawned.Where(v => v is VehiclePawn vehicle && v.Faction == Faction.OfPlayer))
             {
                 if (vehicle.AllPawnsAboard.Contains(p))
                 {
                     __result = WorldPawnSituation.CaravanMember;
                     return;
                 }
             }
         }
         foreach (Caravan c in Find.WorldObjects.Caravans)
         {
             foreach (VehiclePawn vehicle in c.PawnsListForReading.Where(v => v is VehiclePawn vehicle))
             {
                 if (vehicle.AllPawnsAboard.Contains(p))
                 {
                     __result = WorldPawnSituation.CaravanMember;
                     return;
                 }
             }
         }
         foreach (VehiclePawn vehicle in Find.WorldPawns.AllPawnsAlive.Where(v => v is VehiclePawn vehicle))
         {
             if (vehicle.AllPawnsAboard.Contains(p))
             {
                 __result = WorldPawnSituation.InTravelingTransportPod;
                 return;
             }
         }
     }
 }
Exemple #6
0
        public void LogWorldPawns()
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("======= World Pawns =======");
            stringBuilder.AppendLine("Count: " + this.AllPawnsAliveOrDead.Count <Pawn>());
            stringBuilder.AppendLine(string.Format("(Live: {0} - Mothballed: {1} - Dead: {2}; {3} forcefully kept)", new object[]
            {
                this.pawnsAlive.Count,
                this.pawnsMothballed.Count,
                this.pawnsDead.Count,
                this.pawnsForcefullyKeptAsWorldPawns.Count
            }));
            WorldPawnSituation[] array = (WorldPawnSituation[])Enum.GetValues(typeof(WorldPawnSituation));
            for (int i = 0; i < array.Length; i++)
            {
                WorldPawnSituation worldPawnSituation = array[i];
                if (worldPawnSituation != WorldPawnSituation.None)
                {
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine("== " + worldPawnSituation + " ==");
                    foreach (Pawn current in from x in this.GetPawnsBySituation(worldPawnSituation)
                             orderby(x.Faction != null) ? x.Faction.loadID : -1
                             select x)
                    {
                        string text = (current.Name == null) ? current.LabelCap : current.Name.ToStringFull;
                        stringBuilder.AppendLine(string.Concat(new object[]
                        {
                            text,
                            ", ",
                            current.KindLabel,
                            ", ",
                            current.Faction
                        }));
                    }
                }
            }
            stringBuilder.AppendLine("===========================");
            Log.Message(stringBuilder.ToString(), false);
        }
Exemple #7
0
 public IEnumerable <Pawn> GetPawnsBySituation(WorldPawnSituation situation)
 {
     return(from x in this.AllPawnsAliveOrDead
            where this.GetSituation(x) == situation
            select x);
 }
Exemple #8
0
 public IEnumerable <Pawn> GetPawnsBySituation(WorldPawnSituation situation)
 {
     return(AllPawnsAliveOrDead.Where((Pawn x) => GetSituation(x) == situation));
 }