Example #1
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = Find.AnyPlayerHomeMap;

            if (!TileFinder.TryFindPassableTileWithTraversalDistance(map.Tile, 5, 7, out int newTile))
            {
                return(false);
            }

            SkillDef compSkill = DefDatabase <SkillDef> .GetRandom();

            int level = Rand.Range(8, 20);

            WorldObject_Competitions place = (WorldObject_Competitions)WorldObjectMaker.MakeWorldObject(WorldObjectsDefOfLocal.CompetitionsPlace);

            place.Tile = newTile;
            place.SetFaction(Faction.OfPlayer);
            place.CompetitionSkill = compSkill;
            place.CompetitionSkillLevelRequired = level;
            place.RewardCount = level * 140;
            place.TicksToEnd  = 5 * 60000;

            Find.WorldObjects.Add(place);

            string label       = def.label;
            string description = string.Format(def.letterText, compSkill.LabelCap, place.RewardCount, level);

            Find.LetterStack.ReceiveLetter(label, description, def.letterDef, new LookTargets(place));

            var dialog = QuestsManager.Communications.MakeDialogFromIncident(def, new List <CommOption>
            {
                new CommOption_CompetitionsPaid()
                {
                    WorldObject_Competitions = place
                }
            });

            dialog.Description = description;

            QuestsManager.Communications.AddCommunication(dialog);

            place.Dialog = dialog;

            return(true);
        }
        public override bool PreReceived(EmailMessage message, EmailBox box)
        {
            base.PreReceived(message, box);

            var settlementBase = RandomNearbyTradeableSettlement(Find.AnyPlayerHomeMap.Tile, message.Faction);

            if (settlementBase != null)
            {
                WeatherDef weather = DefDatabase <WeatherDef> .GetRandom();

                message.Message = string.Format(message.Message, box.Owner.Name, settlementBase.Name, weather.LabelCap.ToLower());

                return(true);
            }
            else
            {
                return(false);
            }
        }
        public override void MapComponentTick()
        {
            if ((Find.TickManager.TicksGame + map.Parent.ID) % EventTimeCycle == 0)
            {
                if (!Config_Cities.Instance.enableEvents)
                {
                    return;
                }

                if (map.Parent is City city)
                {
                    if (!city.Abandoned)
                    {
                        if (city.Faction.HostileTo(Faction.OfPlayer))
                        {
                            var storyComp = Find.Storyteller.storytellerComps
                                            .First(x => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain);
                            var parms = storyComp.GenerateParms(IncidentCategoryDefOf.ThreatBig, map);
                            parms.faction         = city.Faction;
                            parms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;
                            parms.raidArrivalMode = DefDatabase <PawnsArrivalModeDef> .GetRandom();

                            parms.raidArrivalModeForQuickMilitaryAid = true;
                            parms.points += city.RaidPointIncrease;
                            IncidentDefOf.RaidEnemy.Worker.TryExecute(parms);
                        }

                        foreach (var pawn in map.mapPawns.SpawnedPawnsInFaction(map.ParentFaction))
                        {
                            if (!pawn.inventory.innerContainer.Any(thing => pawn.WillEat(thing)))
                            {
                                for (var i = 0; i < 2; i++)
                                {
                                    var meal = ThingMaker.MakeThing(ThingDefOf.MealSurvivalPack);
                                    pawn.inventory.innerContainer.TryAdd(meal);
                                }
                            }
                        }
                    }
                }
            }
        }
        public static Pawn PawnGenerateRandom()
        {
            Faction faction;

            /* к сожалению бессмысленно, т.к. в FactionGenerator.NewGeneratedFaction используется Find.World
             * if (Find.World == null || Find.World.factionManager == null)
             * {
             *  var facDef = DefDatabase<FactionDef>.GetNamed("PlayerColony");
             *  faction = FactionGenerator.NewGeneratedFaction(facDef);
             * }
             * else
             */
            faction = Faction.OfPlayer;

            PawnKindDef random = DefDatabase <PawnKindDef> .GetRandom();

            //Faction faction = Faction.OfPlayer;//FactionUtility.DefaultFactionFrom(FactionDef.Named("PlayerColony")); // FactionUtility.DefaultFactionFrom(random.defaultFactionType);
            Pawn pawn = PawnGenerator.GeneratePawn(random, faction);

            return(pawn);
        }
Example #5
0
        public override void CompTick()
        {
            if (!active)
            {
                return;
            }
            if (ShouldRemoveWorldObjectNow)
            {
                var threatparms = Find.Storyteller.storytellerComps.First(x => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain).GenerateParms(IncidentCategoryDefOf.ThreatBig, Find.AnyPlayerHomeMap);
                threatparms.faction      = parent.Faction;
                threatparms.raidStrategy = DefDatabase <RaidStrategyDef> .GetRandom();

                threatparms.raidArrivalMode = DefDatabase <PawnsArrivalModeDef> .AllDefs.First(def => def.defName.Contains("EdgeDropGroups"));

                threatparms.points = Mathf.Clamp(StorytellerUtility.DefaultThreatPointsNow(Find.AnyPlayerHomeMap) * 4, 300, 15000);
                threatparms.raidNeverFleeIndividual = true;
                IncidentDefOf.RaidEnemy.Worker.TryExecute(threatparms);
                active = false;
                Find.WorldObjects.Remove(parent);
            }
        }
Example #6
0
        public override void MapComponentTick()
        {
            if ((Find.TickManager.TicksGame + map.Parent.ID) % EventTimeCycle == 0)
            {
                if (!LoadedModManager.GetMod <Mod_Cities>().GetSettings <ModSettings_Cities>().enableEvents)
                {
                    return;
                }

                if (map.Parent is City city && !city.Abandoned)
                {
                    if (city.Faction.HostileTo(Faction.OfPlayer))
                    {
                        var storyComp = Find.Storyteller.storytellerComps.First(x => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain);
                        var parms     = storyComp.GenerateParms(IncidentCategoryDefOf.ThreatBig, map);
                        parms.faction         = city.Faction;
                        parms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;
                        parms.raidArrivalMode = DefDatabase <PawnsArrivalModeDef> .GetRandom();

                        parms.raidArrivalModeForQuickMilitaryAid = true;
                        parms.points += RaidPointIncrease;
                        IncidentDefOf.RaidEnemy.Worker.TryExecute(parms);
                    }
                    else
                    {
                        var pos       = QuestUtility.FindDropSpot(map);
                        var things    = new List <Thing>();
                        var foodCount = (int)(map.mapPawns.SpawnedPawnsInFaction(map.ParentFaction).Count *EventTimeCycle / 60000F * DailyFoodGivenPerPerson);
                        for (var i = 0; i < foodCount; i++)
                        {
                            var thing = ThingMaker.MakeThing(ThingDefOf.MealSurvivalPack);
                            map.GetComponent <MapComponent_City>().cityOwnedThings.Add(thing);
                            things.Add(thing);
                        }
                        DropPodUtility.DropThingsNear(pos, map, things, canRoofPunch: false);
                    }
                }
            }
        }
Example #7
0
        public static void SetPawnTraits(Pawn pawn, int num)
        {
            pawn.story.traits.allTraits.Clear();
            while (pawn.story.traits.allTraits.Count < num)
            {
                TraitDef newTraitDef = DefDatabase <TraitDef> .GetRandom();

                if (!pawn.story.traits.HasTrait(newTraitDef))
                {
                    if (newTraitDef.conflictingTraits == null || !Contains(pawn, newTraitDef.conflictingTraits))
                    {
                        Trait trait = new Trait(newTraitDef);
                        trait.degree = PawnGenerator.RandomTraitDegree(trait.def);

                        if (pawn.mindState.breaker.HardBreakThreshold + trait.OffsetOfStat(StatDefOf.MentalBreakThreshold) <= 40f)
                        {
                            pawn.story.traits.GainTrait(trait);
                        }
                    }
                }
            }
        }
Example #8
0
        public void PlaySong()
        {
            currentState = true;
            if (JukeBoxCore.orignalSongList.Count <= 0)
            {
                JukeBoxCore.orignalSongList.AddRange(DefDatabase <SongDef> .AllDefs);
            }
            if (JukeBoxCore.customSongList.Count <= 0)
            {
                JukeBoxCore.Scanning();
                if (JukeBoxCore.customSongList.Count <= 0)
                {
                    Log.Error("Songs Folder is Empty");
                    return;
                }
            }
            DefDatabase <SongDef> .Clear();

            DefDatabase <SongDef> .Add(JukeBoxCore.customSongList);

            Find.MusicManagerPlay.ForceStartSong(DefDatabase <SongDef> .GetRandom(), false);
        }
Example #9
0
        private SongDef ChooseNextSong()
        {
            this.songWasForced = false;
            SongDef result;

            if (this.forcedNextSong != null)
            {
                SongDef songDef = this.forcedNextSong;
                this.forcedNextSong = null;
                this.songWasForced  = true;
                result = songDef;
            }
            else
            {
                IEnumerable <SongDef> source = from song in DefDatabase <SongDef> .AllDefs
                                               where this.AppropriateNow(song)
                                               select song;
                while (this.recentSongs.Count > 7)
                {
                    this.recentSongs.Dequeue();
                }
                while (!source.Any <SongDef>() && this.recentSongs.Count > 0)
                {
                    this.recentSongs.Dequeue();
                }
                if (!source.Any <SongDef>())
                {
                    Log.Error("Could not get any appropriate song. Getting random and logging song selection data.", false);
                    this.SongSelectionData();
                    result = DefDatabase <SongDef> .GetRandom();
                }
                else
                {
                    result = source.RandomElementByWeight((SongDef s) => s.commonality);
                }
            }
            return(result);
        }
Example #10
0
 public static Faction NewGeneratedFaction()
 {
     return(FactionGenerator.NewGeneratedFaction(DefDatabase <FactionDef> .GetRandom()));
 }
Example #11
0
        private void CreateNew()
        {
            if (featureName == null)
            {
                Messages.Message($"Enter correct feature name", MessageTypeDefOf.NeutralEvent, false);
                return;
            }

            if (maxLength <= 0)
            {
                Messages.Message($"Enter correct size", MessageTypeDefOf.NeutralEvent, false);
                return;
            }

            if (edit)
            {
                editFeature.name               = featureName;
                editFeature.drawAngle          = rotate;
                editFeature.maxDrawSizeInTiles = maxLength;

                Find.WorldFeatures.textsCreated = false;
                Find.WorldFeatures.UpdateFeatures();

                Messages.Message($"Success", MessageTypeDefOf.NeutralEvent, false);

                return;
            }

            int tile = Find.WorldSelector.selectedTile;

            if (tile < 0)
            {
                Messages.Message($"Select tile", MessageTypeDefOf.NeutralEvent, false);
                return;
            }

            List <int> members = new List <int>();

            members.Add(tile);

            WorldFeature worldFeature = new WorldFeature
            {
                uniqueID = Find.UniqueIDsManager.GetNextWorldFeatureID(),
                def      = DefDatabase <FeatureDef> .GetRandom(),
                name     = featureName
            };
            WorldGrid worldGrid = Find.WorldGrid;

            for (int i = 0; i < members.Count; i++)
            {
                worldGrid[members[i]].feature = worldFeature;
            }
            worldFeature.drawCenter         = worldGrid.GetTileCenter(tile);
            worldFeature.maxDrawSizeInTiles = maxLength;
            worldFeature.drawAngle          = rotate;

            Find.WorldFeatures.features.Add(worldFeature);

            Find.WorldFeatures.textsCreated = false;
            Find.WorldFeatures.UpdateFeatures();

            Messages.Message($"Feature created", MessageTypeDefOf.NeutralEvent, false);
        }
Example #12
0
        //Patch for Caravan/Worldmap death
        //TBF

        //Patch death messages
        //TBF

        //Change Appearance, Traits and memories of pawns
        static void Regenerate(Pawn __instance)
        {
            // Health State Changes ----------------------------------------------------------------------------------------------------------

            //Resurrect the __instance
            ResurrectionUtility.Resurrect(__instance);

            //Remove all bad hediffs
            foreach (Hediff h in __instance.health.hediffSet.GetHediffs <Hediff>())
            {
                if (h.def.isBad)
                {
                    __instance.health.RemoveHediff(h);
                }
            }

            //Add resurrection sickness
            __instance.health.AddHediff(HediffDef.Named("ResurrectionSickness"));

            //Remove current RegenHediff and add the next
            BodyPartRecord heart = __instance.health.hediffSet.GetNotMissingParts().First(bpr => bpr.def == BodyPartDefOf.Heart);

            HediffDef Regen1Def  = HediffDef.Named("Regeneration01");
            HediffDef Regen2Def  = HediffDef.Named("Regeneration02");
            HediffDef Regen3Def  = HediffDef.Named("Regeneration03");
            HediffDef Regen4Def  = HediffDef.Named("Regeneration04");
            HediffDef Regen5Def  = HediffDef.Named("Regeneration05");
            HediffDef Regen6Def  = HediffDef.Named("Regeneration06");
            HediffDef Regen7Def  = HediffDef.Named("Regeneration07");
            HediffDef Regen8Def  = HediffDef.Named("Regeneration08");
            HediffDef Regen9Def  = HediffDef.Named("Regeneration09");
            HediffDef Regen10Def = HediffDef.Named("Regeneration10");
            HediffDef Regen11Def = HediffDef.Named("Regeneration11");
            HediffDef Regen12Def = HediffDef.Named("Regeneration12");
            HediffDef Regen13Def = HediffDef.Named("Regeneration13");

            if (__instance.health.hediffSet.HasHediff(Regen1Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen1Def)); __instance.health.AddHediff(Regen2Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen2Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen2Def)); __instance.health.AddHediff(Regen3Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen3Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen3Def)); __instance.health.AddHediff(Regen4Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen4Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen4Def)); __instance.health.AddHediff(Regen5Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen5Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen5Def)); __instance.health.AddHediff(Regen6Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen6Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen6Def)); __instance.health.AddHediff(Regen7Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen7Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen7Def)); __instance.health.AddHediff(Regen8Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen8Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen8Def)); __instance.health.AddHediff(Regen9Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen9Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen9Def)); __instance.health.AddHediff(Regen10Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen10Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen10Def)); __instance.health.AddHediff(Regen11Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen11Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen11Def)); __instance.health.AddHediff(Regen12Def, heart);
            }
            else if (__instance.health.hediffSet.HasHediff(Regen12Def))
            {
                __instance.health.RemoveHediff(__instance.health.hediffSet.GetFirstHediffOfDef(Regen12Def)); __instance.health.AddHediff(Regen13Def, heart);
            }

            // Visual Changes ----------------------------------------------------------------------------------------------------------

            //Gender
            __instance.gender = GenderSwap(__instance.gender);

            //Skintone
            __instance.story.melanin = 0.01f * Rand.Range(10, 200);

            //Head
            var graphicPath = GraphicDatabaseHeadRecords.GetHeadRandom(__instance.gender, __instance.story.SkinColor, __instance.story.crownType).GraphicPath;

            Traverse.Create(__instance.story).Field("headGraphicPath").SetValue(graphicPath);

            //Hair
            __instance.story.hairDef   = PawnHairChooser.RandomHairDefFor(__instance, FactionDefOf.PlayerColony);
            __instance.story.hairColor = HairColor();

            //Body
            __instance.story.bodyType = BodySwap(__instance.gender);

            //Redraw the __instance to trigger the above affects
            __instance.Drawer.renderer.graphics.nakedGraphic = null;

            // Bio Changes ----------------------------------------------------------------------------------------------------------

            //randomise traits
            __instance.story.traits.allTraits.Clear();
            int i    = 0;
            int rInt = Rand.RangeInclusive(1, 3);

            while (i < rInt)
            {
                TraitDef random = DefDatabase <TraitDef> .GetRandom();

                Trait trait = new Trait(random, PawnGenerator.RandomTraitDegree(random), false);
                __instance.story.traits.GainTrait(trait);
                Trait trait2 = new Trait(random, PawnGenerator.RandomTraitDegree(random), false);
                __instance.story.traits.GainTrait(trait2);
                i++;
            }

            //Add Memory
            __instance.needs.mood.thoughts.memories.TryGainMemory(RegenerationThoughtDefs.RecentlyRegenerated, null);

            //Add debuff thought to all related colonists
            foreach (Pawn p in __instance.relations.RelatedPawns)
            {
                //Log.Warning("related to: " + p.Name);
                try
                {
                    if (!p.health.Dead)
                    {
                        p.needs.mood.thoughts.memories.TryGainMemory(RegenerationThoughtDefs.KnownColonistRegeneratedSocial, __instance);
                        p.needs.mood.thoughts.memories.TryGainMemory(RegenerationThoughtDefs.KnownColonistRegenerated);
                    }
                }
                catch
                {
                    Log.Warning("Couldn't add social debuff to " + p.Name);
                }
            }

            // Visual effects -------------------------------------------------------------------------------------------------------

            //Glow effect (ugly approach, look at cleaning this up)
            MoteMaker.ThrowAirPuffUp(__instance.DrawPos, __instance.Map);
            MoteMaker.ThrowFireGlow(__instance.Position, __instance.Map, 3f);
            MoteMaker.ThrowFireGlow(__instance.Position, __instance.Map, 3f);
            MoteMaker.ThrowFireGlow(__instance.Position, __instance.Map, 3f);
            MoteMaker.ThrowFireGlow(__instance.Position, __instance.Map, 3f);
            MoteMaker.ThrowFireGlow(__instance.Position, __instance.Map, 3f);
        }
 // Token: 0x06002944 RID: 10564 RVA: 0x00139525 File Offset: 0x00137925
 public override void Initialize(CompProperties props)
 {
     base.Initialize(props);
     this.skill = DefDatabase <SkillDef> .GetRandom();
 }
        public static bool HealthTick(Pawn_HealthTracker __instance)
        {
            if (__instance.Dead)
            {
                return(false);
            }
            for (int index = __instance.hediffSet.hediffs.Count - 1; index >= 0; --index)
            {
                Hediff hediff = __instance.hediffSet.hediffs[index];
                try
                {
                    hediff.Tick();
                    hediff.PostTick();
                }
                catch (Exception ex1)
                {
                    Log.Error("Exception ticking hediff " + hediff.ToStringSafe <Hediff>() + " for pawn " + __instance.pawn.ToStringSafe <Pawn>() + ". Removing hediff... Exception: " + (object)ex1);
                    try
                    {
                        __instance.RemoveHediff(hediff);
                    }
                    catch (Exception ex2)
                    {
                        Log.Error("Error while removing hediff: " + (object)ex2);
                    }
                }
                if (__instance.Dead)
                {
                    return(false);
                }
            }
            bool flag1 = false;

            lock (__instance.hediffSet)                                                     //added
            {
                List <Hediff> newHediffs = new List <Hediff>(__instance.hediffSet.hediffs); //added
                for (int index = newHediffs.Count - 1; index >= 0; --index)                 //changed
                {
                    Hediff hediff = newHediffs[index];
                    if (hediff.ShouldRemove)
                    {
                        newHediffs.RemoveAt(index);                //changed
                        __instance.hediffSet.hediffs = newHediffs; //added
                        hediff.PostRemoved();
                        flag1 = true;
                    }
                }
            }
            if (flag1)
            {
                __instance.Notify_HediffChanged((Hediff)null);
            }
            if (__instance.Dead)
            {
                return(false);
            }
            __instance.immunity.ImmunityHandlerTick();
            if (__instance.pawn.RaceProps.IsFlesh && __instance.pawn.IsHashIntervalTick(600) && (__instance.pawn.needs.food == null || !__instance.pawn.needs.food.Starving))
            {
                bool flag2 = false;
                if (__instance.hediffSet.HasNaturallyHealingInjury())
                {
                    float num = 8f;
                    if (__instance.pawn.GetPosture() != PawnPosture.Standing)
                    {
                        num += 4f;
                        Building_Bed buildingBed = __instance.pawn.CurrentBed();
                        if (buildingBed != null)
                        {
                            num += buildingBed.def.building.bed_healPerDay;
                        }
                    }
                    foreach (Hediff hediff in __instance.hediffSet.hediffs)
                    {
                        HediffStage curStage = hediff.CurStage;
                        if (curStage != null && (double)curStage.naturalHealingFactor != -1.0)
                        {
                            num *= curStage.naturalHealingFactor;
                        }
                    }
                    __instance.hediffSet.GetHediffs <Hediff_Injury>().Where <Hediff_Injury>((Func <Hediff_Injury, bool>)(x => x.CanHealNaturally())).RandomElement <Hediff_Injury>().Heal((float)((double)num * (double)__instance.pawn.HealthScale * 0.00999999977648258) * __instance.pawn.GetStatValue(StatDefOf.InjuryHealingFactor));
                    flag2 = true;
                }
                if (__instance.hediffSet.HasTendedAndHealingInjury() && (__instance.pawn.needs.food == null || !__instance.pawn.needs.food.Starving))
                {
                    Hediff_Injury hd = __instance.hediffSet.GetHediffs <Hediff_Injury>().Where <Hediff_Injury>((Func <Hediff_Injury, bool>)(x => x.CanHealFromTending())).RandomElement <Hediff_Injury>();
                    hd.Heal((float)(8.0 * (double)GenMath.LerpDouble(0.0f, 1f, 0.5f, 1.5f, Mathf.Clamp01(hd.TryGetComp <HediffComp_TendDuration>().tendQuality)) * (double)__instance.pawn.HealthScale * 0.00999999977648258) * __instance.pawn.GetStatValue(StatDefOf.InjuryHealingFactor));
                    flag2 = true;
                }
                if (flag2 && !__instance.HasHediffsNeedingTendByPlayer() && (!HealthAIUtility.ShouldSeekMedicalRest(__instance.pawn) && !__instance.hediffSet.HasTendedAndHealingInjury()) && PawnUtility.ShouldSendNotificationAbout(__instance.pawn))
                {
                    Messages.Message((string)"MessageFullyHealed".Translate((NamedArgument)__instance.pawn.LabelCap, (NamedArgument)(Thing)__instance.pawn), (LookTargets)(Thing)__instance.pawn, MessageTypeDefOf.PositiveEvent);
                }
            }
            if (__instance.pawn.RaceProps.IsFlesh && (double)__instance.hediffSet.BleedRateTotal >= 0.100000001490116)
            {
                float num = __instance.hediffSet.BleedRateTotal * __instance.pawn.BodySize;
                if ((double)Rand.Value < (__instance.pawn.GetPosture() != PawnPosture.Standing ? (double)(num * 0.0004f) : (double)(num * 0.004f)))
                {
                    __instance.DropBloodFilth();
                }
            }
            if (!__instance.pawn.IsHashIntervalTick(60))
            {
                return(false);
            }
            List <HediffGiverSetDef> hediffGiverSets = __instance.pawn.RaceProps.hediffGiverSets;

            if (hediffGiverSets != null)
            {
                for (int index1 = 0; index1 < hediffGiverSets.Count; ++index1)
                {
                    List <HediffGiver> hediffGivers = hediffGiverSets[index1].hediffGivers;
                    for (int index2 = 0; index2 < hediffGivers.Count; ++index2)
                    {
                        hediffGivers[index2].OnIntervalPassed(__instance.pawn, (Hediff)null);
                        if (__instance.pawn.Dead)
                        {
                            return(false);
                        }
                    }
                }
            }
            if (__instance.pawn.story == null)
            {
                return(false);
            }
            List <Trait> allTraits = __instance.pawn.story.traits.allTraits;

            for (int index = 0; index < allTraits.Count; ++index)
            {
                TraitDegreeData currentData = allTraits[index].CurrentData;
                if ((double)currentData.randomDiseaseMtbDays > 0.0 && Rand.MTBEventOccurs(currentData.randomDiseaseMtbDays, 60000f, 60f))
                {
                    BiomeDef biome = __instance.pawn.Tile == -1 ? DefDatabase <BiomeDef> .GetRandom() : Find.WorldGrid[__instance.pawn.Tile].biome;

                    IncidentDef incidentDef = DefDatabase <IncidentDef> .AllDefs.Where <IncidentDef>((Func <IncidentDef, bool>)(d => d.category == IncidentCategoryDefOf.DiseaseHuman)).RandomElementByWeightWithFallback <IncidentDef>((Func <IncidentDef, float>)(d => biome.CommonalityOfDisease(d)));

                    if (incidentDef != null)
                    {
                        string      blockedInfo;
                        List <Pawn> pawns = ((IncidentWorker_Disease)incidentDef.Worker).ApplyToPawns(Gen.YieldSingle <Pawn>(__instance.pawn), out blockedInfo);
                        if (PawnUtility.ShouldSendNotificationAbout(__instance.pawn))
                        {
                            if (pawns.Contains(__instance.pawn))
                            {
                                Find.LetterStack.ReceiveLetter("LetterLabelTraitDisease".Translate((NamedArgument)incidentDef.diseaseIncident.label), "LetterTraitDisease".Translate((NamedArgument)__instance.pawn.LabelCap, (NamedArgument)incidentDef.diseaseIncident.label, __instance.pawn.Named("PAWN")).AdjustedFor(__instance.pawn), LetterDefOf.NegativeEvent, (LookTargets)(Thing)__instance.pawn);
                            }
                            else if (!blockedInfo.NullOrEmpty())
                            {
                                Messages.Message(blockedInfo, (LookTargets)(Thing)__instance.pawn, MessageTypeDefOf.NeutralEvent);
                            }
                        }
                    }
                }
            }
            return(false);
        }
        // Token: 0x0600000D RID: 13 RVA: 0x00002BAC File Offset: 0x00000DAC
        private void TrySetCellAs(IntVec3 c, ThingDef thingDef, Rot4 thingRot, Map map, ThingDef stuffDef = null,
                                  TerrainDef terrainDef = null, PawnKindDef pawnKindDef = null, ThingDef itemDef = null,
                                  MapGeneratorBlueprintDef blueprint = null)
        {
            if (!c.InBounds(map))
            {
                Log.Warning("GenStep_CreateBlueprint: Invalid Target-Cell: cell is null or out of bounds.");
            }
            else
            {
                var thingList = c.GetThingList(map);
                foreach (var thing in thingList)
                {
                    if (!thing.def.destroyable)
                    {
                        return;
                    }
                }

                if (terrainDef != null)
                {
                    map.terrainGrid.SetTerrain(c, terrainDef);
                }
                else
                {
                    if (thingDef != null && stuffDef != null)
                    {
                        map.terrainGrid.SetTerrain(c, CorrespondingTileDef(stuffDef));
                    }
                }

                if (thingDef != null)
                {
                    var stuff = stuffDef;
                    if (!thingDef.MadeFromStuff)
                    {
                        stuff = null;
                    }

                    var thing = ThingMaker.MakeThing(thingDef, stuff);
                    if (thingRot == Rot4.Invalid)
                    {
                        GenSpawn.Spawn(thing, c, map);
                    }
                    else
                    {
                        GenSpawn.Spawn(thing, c, map, thingRot);
                    }
                }

                if (blueprint == null)
                {
                    return;
                }

                if (itemDef != null && blueprint.itemSpawnChance / 100f > Rand.Value)
                {
                    var      isApparel = itemDef.IsApparel;
                    ThingDef thingDef2;
                    if (isApparel)
                    {
                        var num = 0;
                        for (;;)
                        {
                            thingDef2 = DefDatabase <ThingDef> .GetRandom();

                            if (thingDef2.IsStuff &&
                                thingDef2.stuffCategories.Contains(StuffCategoryDefOf.Fabric))
                            {
                                break;
                            }

                            num++;
                            if (num > 100)
                            {
                                goto Block_17;
                            }
                        }

                        goto IL_18F;
Block_17:
                        thingDef2 = DefDatabase <ThingDef> .GetNamedSilentFail("Synthread");

                        IL_18F :;
                    }
                    else
                    {
                        var source = new List <string>
                        {
                            "Steel",
                            "Steel",
                            "Steel",
                            "Steel",
                            "Steel",
                            "Plasteel"
                        };
                        thingDef2 = DefDatabase <ThingDef> .GetNamedSilentFail(source.RandomElement());
                    }

                    if (!itemDef.MadeFromStuff)
                    {
                        thingDef2 = null;
                    }

                    var thing2 = TryGetTreasure(itemDef, thingDef2);
                    thing2 = GenSpawn.Spawn(thing2, c, map);
                    if (thing2.TryGetComp <CompForbiddable>() != null)
                    {
                        thing2.SetForbidden(true);
                    }

                    if (thing2 is Hive hive)
                    {
                        hive.CompDormant.WakeUp();
                    }
                }

                if (pawnKindDef == null || !(blueprint.pawnSpawnChance / 100f > Rand.Value))
                {
                    return;
                }

                if (faction == null)
                {
                    faction = Find.FactionManager.FirstFactionOfDef(blueprint.factionDef);
                }

                if (faction == null)
                {
                    switch (blueprint.factionSelection)
                    {
                    case FactionSelection.none:
                    {
                        faction = Find.FactionManager.AllFactions.RandomElementByWeight(fac =>
                                                                                        fac.def.settlementGenerationWeight);
                        if (faction == null)
                        {
                            faction = Faction.OfMechanoids;
                        }

                        break;
                    }

                    case FactionSelection.hostile:
                    {
                        faction = (from fac in Find.FactionManager.AllFactions
                                   where fac.HostileTo(Faction.OfPlayer)
                                   select fac).RandomElementByWeight(fac =>
                                                                     101f - fac.def.settlementGenerationWeight);
                        if (faction == null)
                        {
                            faction = Faction.OfMechanoids;
                        }

                        break;
                    }

                    case FactionSelection.friendly:
                    {
                        faction = (from fac in Find.FactionManager.AllFactions
                                   where !fac.HostileTo(Faction.OfPlayer) && fac.PlayerGoodwill > 0f &&
                                   fac != Faction.OfPlayer
                                   select fac).RandomElementByWeight(fac =>
                                                                     101f - fac.def.settlementGenerationWeight);
                        if (faction == null)
                        {
                            faction = Find.FactionManager.AllFactions.RandomElementByWeight(fac =>
                                                                                            fac.def.settlementGenerationWeight);
                        }

                        break;
                    }
                    }
                }

                var pawn = PawnGenerator.GeneratePawn(pawnKindDef, faction);
                pawn.mindState.Active = false;
                pawn = GenSpawn.Spawn(pawn, c, map) as Pawn;

                if (pawn == null)
                {
                    return;
                }

                if (allSpawnedPawns == null)
                {
                    allSpawnedPawns = new List <Pawn>();
                }

                allSpawnedPawns.Add(pawn);
            }
        }
        public static void Post_GeneratePawn_Yautja(PawnGenerationRequest request, ref Pawn __result)
        {
            if (__result.kindDef.race == YautjaDefOf.RRY_Alien_Yautja)
            {
                Comp_Yautja _Yautja = __result.TryGetComp <Comp_Yautja>();
                if (_Yautja != null)
                {
                    Backstory pawnStoryC = __result.story.childhood;
                    Backstory pawnStoryA = __result.story.adulthood != null ? __result.story.adulthood : null;

                    AlienRace.BackstoryDef bsDefUnblooded = DefDatabase <AlienRace.BackstoryDef> .GetNamed("RRY_Yautja_YoungBlood");

                    AlienRace.BackstoryDef bsDefBlooded = DefDatabase <AlienRace.BackstoryDef> .GetNamed("RRY_Yautja_Blooded");

                    AlienRace.BackstoryDef bsDefBadbloodA = DefDatabase <AlienRace.BackstoryDef> .GetNamed("RRY_Yautja_BadBloodA");

                    AlienRace.BackstoryDef bsDefBadblooBd = DefDatabase <AlienRace.BackstoryDef> .GetNamed("RRY_Yautja_BadBloodB");

                    HediffDef unbloodedDef = YautjaDefOf.RRY_Hediff_Unblooded;
                    HediffDef unmarkedDef  = YautjaDefOf.RRY_Hediff_BloodedUM;
                    HediffDef markedDef    = YautjaDefOf.RRY_Hediff_BloodedM;

                    bool hasunblooded = __result.health.hediffSet.HasHediff(unbloodedDef);
                    bool hasbloodedUM = __result.health.hediffSet.HasHediff(unmarkedDef);
                    bool hasbloodedM  = __result.health.hediffSet.hediffs.Any <Hediff>(x => x.def.defName.StartsWith(markedDef.defName));

                    if (!hasunblooded && !hasbloodedUM && !hasbloodedM)
                    {
                        HediffDef hediffDef;
                        if (pawnStoryA != null)
                        {
                            if (pawnStoryA != bsDefUnblooded.backstory)
                            {
                                hediffDef = _Yautja.Props.bloodedDefs.RandomElement();
                            }
                            else
                            {
                                hediffDef = unbloodedDef;
                            }
                        }
                        else
                        {
                            hediffDef = unbloodedDef;
                        }
                        __result.health.AddHediff(hediffDef);
                    }
                    else
                    {
                        Log.Message(string.Format("new pawn has hasunblooded:{0}, hasbloodedUM:{1}, hasbloodedM:{2}", hasunblooded, hasbloodedUM, hasbloodedM));
                    }
                }
            }
            else if (request.Faction == Find.FactionManager.FirstFactionOfDef(XenomorphDefOf.RRY_Xenomorph))
            {
                Log.Message(string.Format("Xenomorph spawning"));
            }
            else if (__result.kindDef.race != YautjaDefOf.RRY_Alien_Yautja && __result.RaceProps.Humanlike && (__result.story.hairDef == YautjaDefOf.RRY_Yaujta_Dreds || __result.story.hairDef == YautjaDefOf.RRY_Yaujta_Ponytail || __result.story.hairDef == YautjaDefOf.RRY_Yaujta_Bald))
            {
                Log.Message(string.Format("Non Yautja with Yautja Hair"));
                __result.story.hairDef = DefDatabase <HairDef> .GetRandom();
            }
        }