public void SavePawnToCorticalStack(Pawn pawn) { this.name = pawn.Name; this.origPawn = pawn; if (pawn.playerSettings != null) { this.hostilityMode = (int)pawn.playerSettings.hostilityResponse; this.areaRestriction = pawn.playerSettings.AreaRestriction; this.medicalCareCategory = pawn.playerSettings.medCare; this.selfTend = pawn.playerSettings.selfTend; } if (pawn.ageTracker != null) { this.ageChronologicalTicks = pawn.ageTracker.AgeChronologicalTicks; } this.foodRestriction = pawn.foodRestriction?.CurrentFoodRestriction; this.outfit = pawn.outfits?.CurrentOutfit; this.drugPolicy = pawn.drugs?.CurrentPolicy; this.times = pawn.timetable?.times; this.thoughts = pawn.needs?.mood?.thoughts?.memories?.Memories; this.faction = pawn.Faction; if (pawn.Faction.leader == pawn) { this.isFactionLeader = true; } this.traits = pawn.story?.traits?.allTraits; this.relations = pawn.relations?.DirectRelations; this.relatedPawns = pawn.relations?.RelatedPawns?.ToHashSet(); foreach (var otherPawn in pawn.relations.RelatedPawns) { foreach (var rel2 in pawn.GetRelations(otherPawn)) { if (this.relations.Where(r => r.def == rel2 && r.otherPawn == otherPawn).Count() == 0) { //Log.Message("00000 Rel: " + otherPawn?.Name + " - " + rel2 + " - " + pawn.Name, true); if (!rel2.implied) { this.relations.Add(new DirectPawnRelation(rel2, otherPawn, 0)); } } } relatedPawns.Add(otherPawn); } this.skills = pawn.skills?.skills; this.childhood = pawn.story?.childhood?.identifier; if (pawn.story?.adulthood != null) { this.adulthood = pawn.story.adulthood.identifier; } this.priorities = new Dictionary <WorkTypeDef, int>(); if (pawn.workSettings != null && Traverse.Create(pawn.workSettings).Field("priorities").GetValue <DefMap <WorkTypeDef, int> >() != null) { foreach (WorkTypeDef w in DefDatabase <WorkTypeDef> .AllDefs) { this.priorities[w] = pawn.workSettings.GetPriority(w); } } this.hasPawn = true; this.pawnID = pawn.ThingID; if (ModLister.RoyaltyInstalled && pawn.royalty != null) { this.royalTitles = pawn.royalty?.AllTitlesForReading; this.favor = Traverse.Create(pawn.royalty).Field("favor").GetValue <Dictionary <Faction, int> >(); this.heirs = Traverse.Create(pawn.royalty).Field("heirs").GetValue <Dictionary <Faction, Pawn> >(); foreach (var map in Find.Maps) { foreach (var thing in map.listerThings.AllThings) { var comp = thing.TryGetComp <CompBladelinkWeapon>(); if (comp != null && comp.bondedPawn == pawn) { this.bondedThings.Add(thing); } } foreach (var gear in pawn.apparel?.WornApparel) { var comp = gear.TryGetComp <CompBladelinkWeapon>(); if (comp != null && comp.bondedPawn == pawn) { this.bondedThings.Add(gear); } } foreach (var gear in pawn.equipment?.AllEquipmentListForReading) { var comp = gear.TryGetComp <CompBladelinkWeapon>(); if (comp != null && comp.bondedPawn == pawn) { this.bondedThings.Add(gear); } } foreach (var gear in pawn.inventory?.innerContainer) { var comp = gear.TryGetComp <CompBladelinkWeapon>(); if (comp != null && comp.bondedPawn == pawn) { this.bondedThings.Add(gear); } } } this.factionPermits = Traverse.Create(pawn.royalty).Field("factionPermits").GetValue <List <FactionPermit> >(); this.permitPoints = Traverse.Create(pawn.royalty).Field("permitPoints").GetValue <Dictionary <Faction, int> >(); } if (ModCompatibility.IndividualityIsActive) { this.sexuality = ModCompatibility.GetSyrTraitsSexuality(pawn); this.romanceFactor = ModCompatibility.GetSyrTraitsRomanceFactor(pawn); } if (ModCompatibility.PsychologyIsActive) { this.psychologyData = ModCompatibility.GetPsychologyData(pawn); } }