public static bool CreateInitialComponents(Pawn pawn) { if (pawn.ageTracker == null) { pawn.ageTracker = new Pawn_AgeTracker(pawn); } if (pawn.health == null) { pawn.health = new Pawn_HealthTracker(pawn); } if (pawn.records == null) { pawn.records = new Pawn_RecordsTracker(pawn); } if (pawn.inventory == null) { pawn.inventory = new Pawn_InventoryTracker(pawn); } if (pawn.meleeVerbs == null) { pawn.meleeVerbs = new Pawn_MeleeVerbs(pawn); } if (pawn.verbTracker == null) { pawn.verbTracker = new VerbTracker((IVerbOwner)pawn); } if (pawn.carryTracker == null) { pawn.carryTracker = new Pawn_CarryTracker(pawn); } //BEGIN INSERT for Children Mod if (pawn.mindState == null) { pawn.mindState = new Pawn_MindState(pawn); } //END INSERT for Children Mod if (pawn.needs == null) { pawn.needs = new Pawn_NeedsTracker(pawn); } //if (pawn.mindState == null) //pawn.mindState = new Pawn_MindState(pawn); if (pawn.RaceProps.ToolUser) { if (pawn.equipment == null) { pawn.equipment = new Pawn_EquipmentTracker(pawn); } if (pawn.apparel == null) { pawn.apparel = new Pawn_ApparelTracker(pawn); } } if (pawn.RaceProps.Humanlike) { if (pawn.ownership == null) { pawn.ownership = new Pawn_Ownership(pawn); } if (pawn.skills == null) { pawn.skills = new Pawn_SkillTracker(pawn); } if (pawn.story == null) { pawn.story = new Pawn_StoryTracker(pawn); } if (pawn.guest == null) { pawn.guest = new Pawn_GuestTracker(pawn); } if (pawn.guilt == null) { pawn.guilt = new Pawn_GuiltTracker(pawn); } if (pawn.workSettings == null) { pawn.workSettings = new Pawn_WorkSettings(pawn); } if (pawn.royalty == null) { pawn.royalty = new Pawn_RoyaltyTracker(pawn); } if (pawn.abilities == null) { pawn.abilities = new Pawn_AbilityTracker(pawn); } } if (pawn.RaceProps.IsFlesh) { if (pawn.relations == null) { pawn.relations = new Pawn_RelationsTracker(pawn); } if (pawn.psychicEntropy == null) { pawn.psychicEntropy = new Pawn_PsychicEntropyTracker(pawn); } } PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn); return(false); }
public override void Generate() { foreach (Pawn current in MapInitData.colonists) { current.SetFactionDirect(Faction.OfColony); PawnComponentsUtility.AddAndRemoveDynamicComponents(current, false); current.needs.mood.thoughts.TryGainThought(ThoughtDefOf.NewColonyOptimism); foreach (Pawn current2 in MapInitData.colonists) { if (current2 != current) { DamageDef def; def = DamageDefOf.Blunt; Thought_SocialMemory thought_SocialMemory = (Thought_SocialMemory)ThoughtMaker.MakeThought(ThoughtDefOf.CrashedTogether); thought_SocialMemory.SetOtherPawn(current2); current.needs.mood.thoughts.TryGainThought(thought_SocialMemory); current2.TakeDamage(new DamageInfo(def, 1)); } } } Genstep_Colonists.CreateInitialWorkSettings(); bool startedDirectInEditor = MapInitData.StartedDirectInEditor; List <List <Thing> > list = new List <List <Thing> >(); foreach (Pawn current3 in MapInitData.colonists) { if (MapInitData.startedFromEntry && Rand.Value < 0.5f) { current3.health.AddHediff(HediffDefOf.CryptosleepSickness, null, null); } List <Thing> list2 = new List <Thing>(); list2.Add(current3); Thing thing = ThingMaker.MakeThing(ThingDefOf.MealSurvivalPack, null); thing.stackCount = 10; list2.Add(thing); Thing thing2 = ThingMaker.MakeThing(ThingDefOf.Medicine, null); thing2.stackCount = 8; list2.Add(thing2); list.Add(list2); } List <Thing> list3 = new List <Thing> { ThingMaker.MakeThing(ThingDefOf.Gun_SurvivalRifle, null), ThingMaker.MakeThing(ThingDefOf.Gun_Pistol, null), ThingMaker.MakeThing(ThingDefOf.MeleeWeapon_Knife, ThingDefOf.Plasteel), Genstep_Colonists.GenerateRandomPet() }; int num = 0; foreach (Thing current4 in list3) { current4.SetFactionDirect(Faction.OfColony); list[num].Add(current4); num++; if (num >= list.Count) { num = 0; } } bool canInstaDropDuringInit = startedDirectInEditor; DropPodUtility.DropThingGroupsNear(MapGenerator.PlayerStartSpot, list, 110, canInstaDropDuringInit, true, true); }
public static void Listener(ref Pawn __result) { if (__result == null) { return; } if (Faction.OfPlayer.def.basicMemberKind.defName != "AndroidT2ColonistGeneral") { return; } else { Random rnd = new Random(); PawnGenerationRequest request; string pkd = ""; if (!Utils.TXSERIE_LOADED) { switch (rnd.Next(1, 3)) { case 1: pkd = "AndroidT2ColonistGeneral"; break; case 2: pkd = "AndroidT1ColonistGeneral"; break; default: pkd = Faction.OfPlayer.def.basicMemberKind.defName; break; } } else { switch (rnd.Next(1, 5)) { case 1: pkd = "AndroidT2ColonistGeneral"; break; case 2: pkd = "AndroidT1ColonistGeneral"; break; case 3: pkd = "ATPP_Android2ITXKind"; break; case 4: pkd = "ATPP_Android2TXKind"; break; default: pkd = Faction.OfPlayer.def.basicMemberKind.defName; break; } } request = new PawnGenerationRequest(DefDatabase <PawnKindDef> .GetNamed(pkd, false), Faction.OfPlayer, PawnGenerationContext.PlayerStarter, -1, true, false, false, false, true, TutorSystem.TutorialMode, 20f, false, true, true, false, false, false, false); __result = null; try { __result = PawnGenerator.GeneratePawn(request); } catch (Exception e) { Log.Error("[ATPP] StartingPawnUtility.NewGeneratedStartingPawn " + e.Message + " " + e.StackTrace, false); __result = PawnGenerator.GeneratePawn(request); } __result.relations.everSeenByPlayer = true; PawnComponentsUtility.AddComponentsForSpawn(__result); } }
// Token: 0x06000037 RID: 55 RVA: 0x00003458 File Offset: 0x00001658 public static Pawn MakeDroidTemplate(ThingDef raceDef, PawnKindDef pawnKindDef, Faction faction, Map map, List <SkillRequirement> skills = null, int defaultSkillLevel = 6) { Pawn pawn2 = (Pawn)ThingMaker.MakeThing(raceDef, null); bool flag = pawn2 == null; Pawn result; if (flag) { result = null; } else { pawn2.kindDef = pawnKindDef; pawn2.SetFactionDirect(faction); PawnComponentsUtility.CreateInitialComponents(pawn2); pawn2.gender = Gender.Male; pawn2.needs.SetInitialLevels(); bool humanlike = pawn2.RaceProps.Humanlike; if (humanlike) { pawn2.story.melanin = 1f; pawn2.story.crownType = CrownType.Average; pawn2.story.hairColor = new Color(1f, 1f, 1f, 1f); pawn2.story.hairDef = DefDatabase <HairDef> .GetNamed("Shaved", true); pawn2.story.bodyType = BodyType.Thin; PortraitsCache.SetDirty(pawn2); Backstory childhood = null; BackstoryDatabase.TryGetWithIdentifier("ChJAndroid_Droid", out childhood); pawn2.story.childhood = childhood; bool flag2 = skills == null || skills.Count <= 0; if (flag2) { List <SkillDef> allDefsListForReading = DefDatabase <SkillDef> .AllDefsListForReading; for (int i = 0; i < allDefsListForReading.Count; i++) { SkillDef skillDef2 = allDefsListForReading[i]; SkillRecord skill = pawn2.skills.GetSkill(skillDef2); bool flag3 = skillDef2 == SkillDefOf.Shooting || skillDef2 == SkillDefOf.Melee || skillDef2 == SkillDefOf.Mining || skillDef2 == SkillDefOf.Growing; if (flag3) { skill.Level = 8; } else { bool flag4 = skillDef2 == SkillDefOf.Medicine || skillDef2 == SkillDefOf.Crafting || skillDef2 == SkillDefOf.Cooking; if (flag4) { skill.Level = 4; } else { skill.Level = 6; } } skill.passion = Passion.None; } } else { List <SkillDef> allDefsListForReading2 = DefDatabase <SkillDef> .AllDefsListForReading; for (int j = 0; j < allDefsListForReading2.Count; j++) { SkillDef skillDef = allDefsListForReading2[j]; SkillRecord skill2 = pawn2.skills.GetSkill(skillDef); SkillRequirement skillRequirement = skills.First((SkillRequirement sr) => sr.skill == skillDef); bool flag5 = skillRequirement != null; if (flag5) { skill2.Level = skillRequirement.minLevel; } else { skill2.Level = defaultSkillLevel; } skill2.passion = Passion.None; } } } bool flag6 = pawn2.workSettings != null; if (flag6) { pawn2.workSettings.EnableAndInitialize(); } bool flag7 = map != null; if (flag7) { IEnumerable <Name> enumerable = from pawn in map.mapPawns.FreeColonists select pawn.Name; bool flag8 = enumerable != null; if (flag8) { int num = enumerable.Count((Name name) => name.ToStringShort.ToLower().StartsWith("droid")); string nickName = "Droid " + num; pawn2.Name = DroidUtility.MakeDroidName(nickName); } else { pawn2.Name = DroidUtility.MakeDroidName(null); } } else { pawn2.Name = DroidUtility.MakeDroidName(null); } result = pawn2; } return(result); }
internal void MakePermanentlyFeral() { Hediff fHediff; if (StateDef.forcedHediff != null) { fHediff = Pawn.health.hediffSet.GetFirstHediffOfDef(StateDef.forcedHediff); } else { fHediff = null; } //transfer relationships back if possible var gComp = Find.World.GetComponent <PawnmorphGameComp>(); Pawn oPawn = gComp.GetTransformedPawnContaining(Pawn)?.Item1?.OriginalPawns.FirstOrDefault(); if (oPawn == Pawn) { oPawn = null; } Pawn_RelationsTracker aRelations = Pawn.relations; if (aRelations != null && oPawn != null) { FormerHumanUtilities.TransferRelationsToOriginal(oPawn, Pawn); } Pawn.health.AddHediff(TfHediffDefOf.PermanentlyFeral); if (fHediff != null) { Pawn.health.RemoveHediff(fHediff); } var loader = Find.World.GetComponent <PawnmorphGameComp>(); TransformedPawn inst = loader.GetTransformedPawnContaining(Pawn)?.Item1; var singleInst = inst as TransformedPawnSingle; //hacky, need to come up with a better solution foreach (Pawn instOriginalPawn in inst?.OriginalPawns ?? Enumerable.Empty <Pawn>() ) //needed to handle merges correctly { ReactionsHelper.OnPawnPermFeral(instOriginalPawn, Pawn, singleInst?.reactionStatus ?? FormerHumanReactionStatus.Wild); } //remove the original and destroy the pawns foreach (Pawn instOriginalPawn in inst?.OriginalPawns ?? Enumerable.Empty <Pawn>()) { instOriginalPawn.Destroy(); } if (inst != null) { loader.RemoveInstance(inst); } if (inst != null || Pawn.Faction == Faction.OfPlayer) { Find.LetterStack.ReceiveLetter("LetterHediffFromPermanentTFLabel".Translate(Pawn.LabelShort).CapitalizeFirst(), "LetterHediffFromPermanentTF".Translate(Pawn.LabelShort).CapitalizeFirst(), LetterDefOf.NegativeEvent, Pawn); } Pawn.needs?.AddOrRemoveNeedsAsAppropriate(); //make sure any comps get added/removed as appropriate PawnComponentsUtility.AddAndRemoveDynamicComponents(Pawn); }