Exemplo n.º 1
0
        public static bool Prefix(int index, ref Pawn __result)
        {
            Scenario scenario = Find.Scenario;

            if (scenario != null)
            {
                if (scenario.AllParts.Any(x => x is ScenPart_ConfigPage_ConfigureStartingPawnsSpecific))
                {
                    Pawn        pawn    = Find.GameInitData.startingAndOptionalPawns[index];
                    PawnKindDef kindDef = pawn.kindDef;
                    PawnUtility.TryDestroyStartingColonistFamily(pawn);
                    pawn.relations.ClearAllRelations();
                    PawnComponentsUtility.RemoveComponentsOnDespawned(pawn);
                    Find.WorldPawns.PassToWorld(pawn, PawnDiscardDecideMode.Discard);
                    Find.GameInitData.startingAndOptionalPawns[index] = null;
                    for (int i = 0; i < Find.GameInitData.startingAndOptionalPawns.Count; i++)
                    {
                        if (Find.GameInitData.startingAndOptionalPawns[i] != null)
                        {
                            PawnUtility.TryDestroyStartingColonistFamily(Find.GameInitData.startingAndOptionalPawns[i]);
                        }
                    }
                    __result = SpecificStartingPawnUtility.NewGeneratedStartingPawn(kindDef);
                    Find.GameInitData.startingAndOptionalPawns[index] = __result;
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 2
0
        public void PrepForMapGen()
        {
            while (this.startingAndOptionalPawns.Count > this.startingPawnCount)
            {
                PawnComponentsUtility.RemoveComponentsOnDespawned(this.startingAndOptionalPawns[this.startingPawnCount]);
                Find.WorldPawns.PassToWorld(this.startingAndOptionalPawns[this.startingPawnCount], PawnDiscardDecideMode.KeepForever);
                this.startingAndOptionalPawns.RemoveAt(this.startingPawnCount);
            }
            List <Pawn> list = this.startingAndOptionalPawns;

            foreach (Pawn pawn in list)
            {
                pawn.SetFactionDirect(Faction.OfPlayer);
                PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn, false);
            }
            foreach (Pawn pawn2 in list)
            {
                pawn2.workSettings.DisableAll();
            }
            using (IEnumerator <WorkTypeDef> enumerator3 = DefDatabase <WorkTypeDef> .AllDefs.GetEnumerator())
            {
                while (enumerator3.MoveNext())
                {
                    WorkTypeDef w = enumerator3.Current;
                    if (w.alwaysStartActive)
                    {
                        foreach (Pawn pawn3 in from col in list
                                 where !col.story.WorkTypeIsDisabled(w)
                                 select col)
                        {
                            pawn3.workSettings.SetPriority(w, 3);
                        }
                    }
                    else
                    {
                        bool flag = false;
                        foreach (Pawn pawn4 in list)
                        {
                            if (!pawn4.story.WorkTypeIsDisabled(w) && pawn4.skills.AverageOfRelevantSkillsFor(w) >= 6f)
                            {
                                pawn4.workSettings.SetPriority(w, 3);
                                flag = true;
                            }
                        }
                        if (!flag)
                        {
                            IEnumerable <Pawn> source = from col in list
                                                        where !col.story.WorkTypeIsDisabled(w)
                                                        select col;
                            if (source.Any <Pawn>())
                            {
                                Pawn pawn5 = source.InRandomOrder(null).MaxBy((Pawn c) => c.skills.AverageOfRelevantSkillsFor(w));
                                pawn5.workSettings.SetPriority(w, 3);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
 public void PrepForMapGen()
 {
     while (this.startingPawns.Count > this.startingPawnCount)
     {
         PawnComponentsUtility.RemoveComponentsOnDespawned(this.startingPawns[this.startingPawnCount]);
         Find.WorldPawns.PassToWorld(this.startingPawns[this.startingPawnCount], PawnDiscardDecideMode.KeepForever);
         this.startingPawns.RemoveAt(this.startingPawnCount);
     }
     foreach (Pawn startingPawn in this.startingPawns)
     {
         startingPawn.SetFactionDirect(Faction.OfPlayer);
         PawnComponentsUtility.AddAndRemoveDynamicComponents(startingPawn, false);
     }
     foreach (Pawn startingPawn2 in this.startingPawns)
     {
         startingPawn2.workSettings.DisableAll();
     }
     foreach (WorkTypeDef allDef in DefDatabase <WorkTypeDef> .AllDefs)
     {
         if (allDef.alwaysStartActive)
         {
             foreach (Pawn item in from col in this.startingPawns
                      where !col.story.WorkTypeIsDisabled(allDef)
                      select col)
             {
                 item.workSettings.SetPriority(allDef, 3);
             }
         }
         else
         {
             bool flag = false;
             foreach (Pawn startingPawn3 in this.startingPawns)
             {
                 if (!startingPawn3.story.WorkTypeIsDisabled(allDef) && startingPawn3.skills.AverageOfRelevantSkillsFor(allDef) >= 6.0)
                 {
                     startingPawn3.workSettings.SetPriority(allDef, 3);
                     flag = true;
                 }
             }
             if (!flag)
             {
                 IEnumerable <Pawn> source = from col in this.startingPawns
                                             where !col.story.WorkTypeIsDisabled(allDef)
                                             select col;
                 if (source.Any())
                 {
                     Pawn pawn = source.InRandomOrder(null).MaxBy((Pawn c) => c.skills.AverageOfRelevantSkillsFor(allDef));
                     pawn.workSettings.SetPriority(allDef, 3);
                 }
                 else if (allDef.requireCapableColonist)
                 {
                     Log.Error("No colonist could do requireCapableColonist work type " + allDef);
                 }
             }
         }
     }
 }
Exemplo n.º 4
0
        public void PrepForMapGen()
        {
            while (startingAndOptionalPawns.Count > startingPawnCount)
            {
                PawnComponentsUtility.RemoveComponentsOnDespawned(startingAndOptionalPawns[startingPawnCount]);
                Find.WorldPawns.PassToWorld(startingAndOptionalPawns[startingPawnCount], PawnDiscardDecideMode.KeepForever);
                startingAndOptionalPawns.RemoveAt(startingPawnCount);
            }
            List <Pawn> list = startingAndOptionalPawns;

            foreach (Pawn item in list)
            {
                item.SetFactionDirect(Faction.OfPlayer);
                PawnComponentsUtility.AddAndRemoveDynamicComponents(item);
            }
            foreach (Pawn item2 in list)
            {
                item2.workSettings.DisableAll();
            }
            foreach (WorkTypeDef allDef in DefDatabase <WorkTypeDef> .AllDefs)
            {
                if (allDef.alwaysStartActive)
                {
                    foreach (Pawn item3 in from col in list
                             where !col.story.WorkTypeIsDisabled(allDef)
                             select col)
                    {
                        item3.workSettings.SetPriority(allDef, 3);
                    }
                }
                else
                {
                    bool flag = false;
                    foreach (Pawn item4 in list)
                    {
                        if (!item4.story.WorkTypeIsDisabled(allDef) && item4.skills.AverageOfRelevantSkillsFor(allDef) >= 6f)
                        {
                            item4.workSettings.SetPriority(allDef, 3);
                            flag = true;
                        }
                    }
                    if (!flag)
                    {
                        IEnumerable <Pawn> source = from col in list
                                                    where !col.story.WorkTypeIsDisabled(allDef)
                                                    select col;
                        if (source.Any())
                        {
                            Pawn pawn = source.InRandomOrder().MaxBy((Pawn c) => c.skills.AverageOfRelevantSkillsFor(allDef));
                            pawn.workSettings.SetPriority(allDef, 3);
                        }
                    }
                }
            }
        }
 public static void ClearAllStartingPawns()
 {
     for (int num = StartingAndOptionalPawns.Count - 1; num >= 0; num--)
     {
         StartingAndOptionalPawns[num].relations.ClearAllRelations();
         if (Find.World != null)
         {
             PawnUtility.DestroyStartingColonistFamily(StartingAndOptionalPawns[num]);
             PawnComponentsUtility.RemoveComponentsOnDespawned(StartingAndOptionalPawns[num]);
             Find.WorldPawns.PassToWorld(StartingAndOptionalPawns[num], PawnDiscardDecideMode.Discard);
         }
         StartingAndOptionalPawns.RemoveAt(num);
     }
 }
Exemplo n.º 6
0
 static bool Prefix(RimWorld.Planet.WorldPawns __instance, ref Pawn pawn, ref RimWorld.Planet.PawnDiscardDecideMode discardMode)
 {
     if (Current.Game.Info.RealPlayTimeInteracting > 0 &&                          // prevent this from firing when the game hasn't even started proper
         !pawn.Destroyed &&                                                        // ignore pawns destroyed for whatever reason
         !KidnapUtility.IsKidnapped(pawn) &&                                       // don't make kidnapped pawns available; vanilla handles that naturally
         !PawnsFinder.AllCaravansAndTravelingTransportPods_Alive.Contains(pawn) && // ignore caravan/pods
         (pawn.ParentHolder == null || !(pawn.ParentHolder is CompTransporter)) && // ignore pawns in shuttle
         GameComponent.ListAllySpawned.Contains(pawn.GetUniqueLoadID()))
     {
         if (PawnComponentsUtility.HasSpawnedComponents(pawn))
         {
             PawnComponentsUtility.RemoveComponentsOnDespawned(pawn);
         }
         GameComponent.ReturnToAvailable(pawn, GameComponent.ListAllySpawned, GameComponent.ListAllyAvailable);
         return(false);
     }
     return(true);
 }
Exemplo n.º 7
0
 public void PassToWorld(Pawn pawn, PawnDiscardDecideMode discardMode = PawnDiscardDecideMode.Decide)
 {
     if (pawn.Spawned)
     {
         Log.Error("Tried to call PassToWorld with spawned pawn: " + pawn + ". Despawn him first.", false);
     }
     else if (this.Contains(pawn))
     {
         Log.Error("Tried to pass pawn " + pawn + " to world, but it's already here.", false);
     }
     else
     {
         if (discardMode == PawnDiscardDecideMode.KeepForever && pawn.Discarded)
         {
             Log.Error("Tried to pass a discarded pawn " + pawn + " to world with discardMode=Keep. Discarded pawns should never be stored in WorldPawns.", false);
             discardMode = PawnDiscardDecideMode.Decide;
         }
         if (PawnComponentsUtility.HasSpawnedComponents(pawn))
         {
             PawnComponentsUtility.RemoveComponentsOnDespawned(pawn);
         }
         if (discardMode != PawnDiscardDecideMode.Decide)
         {
             if (discardMode != PawnDiscardDecideMode.KeepForever)
             {
                 if (discardMode == PawnDiscardDecideMode.Discard)
                 {
                     this.DiscardPawn(pawn, false);
                 }
             }
             else
             {
                 this.pawnsForcefullyKeptAsWorldPawns.Add(pawn);
                 this.AddPawn(pawn);
             }
         }
         else
         {
             this.AddPawn(pawn);
         }
     }
 }
        private static Pawn RegenerateStartingPawnInPlace(int index)
        {
            Pawn pawn = StartingAndOptionalPawns[index];

            PawnUtility.TryDestroyStartingColonistFamily(pawn);
            pawn.relations.ClearAllRelations();
            PawnComponentsUtility.RemoveComponentsOnDespawned(pawn);
            Find.WorldPawns.PassToWorld(pawn, PawnDiscardDecideMode.Discard);
            StartingAndOptionalPawns[index] = null;
            for (int i = 0; i < StartingAndOptionalPawns.Count; i++)
            {
                if (StartingAndOptionalPawns[i] != null)
                {
                    PawnUtility.TryDestroyStartingColonistFamily(StartingAndOptionalPawns[i]);
                }
            }
            Pawn pawn2 = NewGeneratedStartingPawn();

            StartingAndOptionalPawns[index] = pawn2;
            return(pawn2);
        }
Exemplo n.º 9
0
        public void PassToWorld(Pawn pawn, PawnDiscardDecideMode discardMode = PawnDiscardDecideMode.Decide)
        {
            if (pawn.Spawned)
            {
                Log.Error(string.Concat("Tried to call PassToWorld with spawned pawn: ", pawn, ". Despawn him first."));
                return;
            }
            if (Contains(pawn))
            {
                Log.Error(string.Concat("Tried to pass pawn ", pawn, " to world, but it's already here."));
                return;
            }
            if (discardMode == PawnDiscardDecideMode.KeepForever && pawn.Discarded)
            {
                Log.Error(string.Concat("Tried to pass a discarded pawn ", pawn, " to world with discardMode=Keep. Discarded pawns should never be stored in WorldPawns."));
                discardMode = PawnDiscardDecideMode.Decide;
            }
            if (PawnComponentsUtility.HasSpawnedComponents(pawn))
            {
                PawnComponentsUtility.RemoveComponentsOnDespawned(pawn);
            }
            switch (discardMode)
            {
            case PawnDiscardDecideMode.Decide:
                AddPawn(pawn);
                break;

            case PawnDiscardDecideMode.KeepForever:
                pawnsForcefullyKeptAsWorldPawns.Add(pawn);
                AddPawn(pawn);
                break;

            case PawnDiscardDecideMode.Discard:
                DiscardPawn(pawn);
                break;
            }
        }