Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
            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);
                }
            }
Exemplo n.º 4
0
        // 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);
        }
Exemplo n.º 5
0
        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);
        }