/// <summary> /// Do something after the object is spawned /// </summary> public override void SpawnSetup(Map map, bool respawnAfterLoad) { BackstoryHelper.AddNewBackstoriesToDatabase(); base.SpawnSetup(map, respawnAfterLoad); LongEventHandler.ExecuteWhenFinished(SpawnSetup_Part2); }
/// <summary> /// To write and read data (savegame) /// </summary> public override void ExposeData() { BackstoryHelper.AddNewBackstoriesToDatabase(); base.ExposeData(); Scribe_Values.Look <int>(ref refreshBaseInfosCount, "RefreshBaseInfos"); Scribe_Values.Look <int>(ref refreshQuickCount, "RefreshQuickInfos"); draftedActiveOld = this.Drafted; loaded = true; }
//public static AIPawn GeneratePawn(PawnKindDef kindDef, Faction faction, Map map, Gender gender = Gender.Female, int tries = 0) public static AIPawn GenerateAIPawn(ref PawnGenerationRequest request, Map map, int tries = 0) { BackstoryHelper.AddNewBackstoriesToDatabase(); // First add the new backstories to the database //Log.Error("0"); AIPawn pawnAI = (AIPawn)ThingMaker.MakeThing(request.KindDef.race, null); //Log.Error("1"); GetXMLData(pawnAI); //request.EnsureNonNullFaction(); pawnAI.kindDef = request.KindDef; pawnAI.SetFactionDirect(request.Faction); PawnComponentsUtility.CreateInitialComponents(pawnAI); //Log.Error("2"); // Needs to be set because of not flesh user if (pawnAI.ownership == null) { pawnAI.ownership = new Pawn_Ownership(pawnAI); } pawnAI.relations = new Pawn_RelationsTracker(pawnAI); pawnAI.guest = new Pawn_GuestTracker(pawnAI); pawnAI.guilt = new Pawn_GuiltTracker(pawnAI); pawnAI.royalty = new Pawn_RoyaltyTracker(pawnAI); pawnAI.abilities = new Pawn_AbilityTracker(pawnAI); pawnAI.relations = new Pawn_RelationsTracker(pawnAI); if (request.FixedGender.HasValue) { pawnAI.gender = request.FixedGender.Value; } else if (pawnAI.RaceProps.hasGenders) { if (Rand.Value < 0.5f) { pawnAI.gender = Gender.Male; } else { pawnAI.gender = Gender.Female; } } else { pawnAI.gender = Gender.Female; } SetBirthday(pawnAI); pawnAI.needs.SetInitialLevels(); //Log.Error("3"); AIPawnGenerator.GenerateInitialHediffs(pawnAI); if (pawnAI.RaceProps.Humanlike) { pawnAI.story.melanin = 0.1f; pawnAI.story.crownType = CrownType.Average; pawnAI.story.hairColor = PawnHairColors.RandomHairColor(pawnAI.story.SkinColor, pawnAI.ageTracker.AgeBiologicalYears); pawnAI.story.childhood = GetBackstory(); //pawnAI.story.adulthood = GetBackstory(); string headGraphicPath = GraphicDatabaseHeadRecords.GetHeadRandom(pawnAI.gender, pawnAI.story.SkinColor, pawnAI.story.crownType, false).GraphicPath; // With this Reflection you can access a private variable! Here: The private string "headGraphicPath" is set System.Reflection.FieldInfo fi = typeof(Pawn_StoryTracker).GetField("headGraphicPath", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); fi.SetValue(pawnAI.story, headGraphicPath); pawnAI.story.hairDef = GetHair(); pawnAI.story.bodyType = ((pawnAI.gender != Gender.Female) ? BodyTypeDefOf.Male : BodyTypeDefOf.Female); MakeSkillsFromBackstory(pawnAI); GiveTraitsTo(pawnAI); if (pawnAI.workSettings != null && (request.Faction == Faction.OfPlayer)) { pawnAI.workSettings.EnableAndInitialize(); } } if (pawnAI.RaceProps.ToolUser) { GenerateBaseApparel(pawnAI); } pawnAI.Name = GetName(pawnAI.def, map); pawnAI.royalty = null; //Log.Error("4"); //PawnGenerationRequest request = new PawnGenerationRequest(pawnAI.kindDef , Faction.OfPlayer, PawnGenerationContext.All, true, true, false,false, false, false, 0, false, false, false,null, 0,0, pawnAI.gender, null, null); //PawnInventoryGenerator.GenerateInventoryFor(pawnAI, request); if (!pawnAI.Dead) { return(pawnAI); } if (tries < 10) { return(GenerateAIPawn(ref request, map, tries + 1)); } return(null); }