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); } } }
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; } }
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)); }