Exemple #1
0
 public static void Prefix(Pawn pawn, ref PawnDiscardDecideMode discardMode)
 {
     if (pawn != null && discardMode != PawnDiscardDecideMode.Discard && pawn.GetComp <CompMeeseeksMemory>() != null)
     {
         bool rememberMeeseeks = false;
         if (pawn.records != null)
         {
             foreach (RecordDef importantRecord in meeseeksImportantRecords)
             {
                 float recordValue = pawn.records.GetValue(importantRecord);
                 if (recordValue > 0)
                 {
                     rememberMeeseeks = true;
                     Logger.MessageFormat(pawn, "Remembering {0} because of {1} x{2}", pawn, importantRecord, recordValue);
                     break;
                 }
             }
         }
         //Logger.MessageFormat(pawn, "Marking {0} to be discarded.", pawn);
         if (!rememberMeeseeks)
         {
             discardMode = PawnDiscardDecideMode.Discard;
         }
     }
 }
 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);
         }
     }
 }
Exemple #3
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;
            }
        }
Exemple #4
0
        static bool Prefix(Pawn pawn, PawnDiscardDecideMode discardMode = PawnDiscardDecideMode.Decide)
        {
            FactionFC faction = Find.World.GetComponent <FactionFC>();

            return(faction?.militaryCustomizationUtil?.AllMercenaryPawns == null || !faction.militaryCustomizationUtil.AllMercenaryPawns.Contains(pawn));
        }