Exemple #1
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (!settings.Active)
            {
                return(false);
            }

            Map map = (Map)parms.target;

            if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out PawnKindDef animalKind))
            {
                return(false);
            }

            if (!FindHomeAreaCell(map, out IntVec3 result))
            {
                return(false);
            }

            parms.points = StorytellerUtility.DefaultThreatPointsNow(parms.target);

            animals = GetAnimals(animalKind, map, parms.points);
            DropPodUtilityPlus.DropThingsNear(result, map, animals, callback: DriveInsane);
            SendStandardLetter(parms, null);

            return(true);
        }
Exemple #2
0
    protected override bool TryExecuteWorker(IncidentParms parms)
    {
        var map = (Map)parms.target;

        if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out var pawnKindDef))
        {
            return(false);
        }

        if (!RCellFinder.TryFindRandomPawnEntryCell(out var intVec, map, CellFinder.EdgeRoadChance_Animal))
        {
            return(false);
        }

        var list = ManhunterPackIncidentUtility.GenerateAnimals(pawnKindDef, map.Tile, parms.points * 0.2f);
        var rot  = Rot4.FromAngleFlat((map.Center - intVec).AngleFlat);

        for (var i = 0; i < list.Count; i++)
        {
            var deviljho = PawnKindDefOf.Deviljho;
            var pawn     = PawnGenerator.GeneratePawn(deviljho);
            var loc      = CellFinder.RandomClosewalkCellNear(intVec, map, 10);
            GenSpawn.Spawn(pawn, loc, map, rot);
            pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(60000, 135000);
        }

        Find.LetterStack.ReceiveLetter("LetterLabelDeviljho".Translate(),
                                       "Deviljholetter".Translate(pawnKindDef.GetLabelPlural()), LetterDefOf.ThreatBig, list[0]);
        Find.TickManager.slower.SignalForceNormalSpeedShort();
        LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical);
        LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important);
        return(true);
    }
Exemple #3
0
 protected void CaravanAmbushManhuntersNoTreasure(Caravan caravan)
 {
     LongEventHandler.QueueLongEvent(delegate
     {
         IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan);
         //make sure a minimum point threshold is hit
         if (incidentParms.points < MinimumPointThreshold)
         {
             incidentParms.points = MinimumPointThreshold;
         }
         PawnKindDef animalKind;
         if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), incidentParms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), -1, out animalKind))
         {
             Log.Warning("Could not find any valid animal kind for " + this.def + " incident. Going with Wargs", false);
             animalKind = ThingDefOfVanilla.Warg;
         }
         List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(animalKind, incidentParms.target.Tile, this.AdjustedPoints(incidentParms.points));
         Map map          = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false);
         for (int i = 0; i < list.Count; i++)
         {
             list[i].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false);
         }
         Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
         GlobalTargetInfo lookTarget   = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false);
         Find.LetterStack.ReceiveLetter("LetterLabelIMAmbushLGE".Translate(), "LetterIMAmbushLGE".Translate(), LetterDefOf.ThreatBig, lookTarget, null);
     }, "GeneratingMapForNewEncounter", false, null);
 }
Exemple #4
0
        protected void TreasureWithManhunters(Caravan caravan)
        {
            List <Thing> rewardList = GenerateReward();

            for (int i = 0; i < rewardList.Count; i++)
            {
                caravan.AddPawnOrItem(rewardList[i], true);
            }
            LongEventHandler.QueueLongEvent(delegate
            {
                IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan);
                //make sure a minimum point threshold is hit
                if (incidentParms.points < MinimumPointThreshold)
                {
                    incidentParms.points = MinimumPointThreshold + 100f;
                }
                PawnKindDef animalKind;
                if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), incidentParms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(incidentParms.points), -1, out animalKind))
                {
                    Log.Warning("Could not find any valid animal kind for " + this.def + " incident. Going with Wargs", false);
                    animalKind = ThingDefOfVanilla.Warg;
                }
                List <Pawn> pawnList = ManhunterPackIncidentUtility.GenerateAnimals(animalKind, incidentParms.target.Tile, this.AdjustedPoints(incidentParms.points));
                Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, pawnList, false);
                for (int i = 0; i < pawnList.Count; i++)
                {
                    pawnList[i].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false);
                }
                Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
                GlobalTargetInfo lookTarget   = (!pawnList.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(pawnList[0].Position, map, false);
                Find.LetterStack.ReceiveLetter("LetterLabelTreasureAmbushLGE".Translate(), "LetterTreasureAmbushLGE".Translate(GenThing.GetMarketValue(rewardList).ToStringMoney(null), GenLabel.ThingsLabel(rewardList, string.Empty)), LetterDefOf.ThreatBig, lookTarget, null);
            }, "GeneratingMapForNewEncounter", false, null);
        }
        public override void Generate(Map map, GenStepParams parms)
        {
            float       num  = this.pointsRange.RandomInRange;
            List <Pawn> list = new List <Pawn>();

            for (int i = 0; i < 50; i++)
            {
                PawnKindDef pawnKindDef;
                if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.pointsRange.RandomInRange, map.Tile, out pawnKindDef))
                {
                    return;
                }
                list.Add(PawnGenerator.GeneratePawn(pawnKindDef, null));
                num -= pawnKindDef.combatPower;
                if (num <= 0f)
                {
                    break;
                }
            }
            for (int j = 0; j < list.Count; j++)
            {
                IntVec3 intVec;
                if (CellFinderLoose.TryGetRandomCellWith((IntVec3 x) => x.Standable(map) && x.Fogged(map) && GridsUtility.GetRoom(x, map, RegionType.Set_Passable).CellCount >= 4, map, 1000, out intVec))
                {
                    IntVec3 intVec2 = CellFinder.RandomSpawnCellForPawnNear(intVec, map, 10);
                    GenSpawn.Spawn(list[j], intVec2, map, Rot4.Random, WipeMode.Vanish, false);
                    list[j].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null);
                }
            }
        }
        protected override List <Pawn> GeneratePawns(IncidentParms parms)
        {
            PawnKindDef animalKind;

            if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(parms.points), parms.target.Tile, out animalKind) && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(parms.points), -1, out animalKind))
            {
                Log.Error("Could not find any valid animal kind for " + this.def + " incident.", false);
                return(new List <Pawn>());
            }
            return(ManhunterPackIncidentUtility.GenerateAnimals(animalKind, parms.target.Tile, this.AdjustedPoints(parms.points)));
        }
        protected override bool CanFireNowSub(IncidentParms parms)
        {
            if (!base.CanFireNowSub(parms))
            {
                return(false);
            }
            Map         map = (Map)parms.target;
            PawnKindDef pawnKindDef;
            IntVec3     intVec;

            return(ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out pawnKindDef) && RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null));
        }
        protected override void RunInt()
        {
            Slate slate  = QuestGen.slate;
            Map   map    = QuestGen.slate.Get <Map>("map");
            float points = QuestGen.slate.Get("points", 0f);
            QuestPart_Incident questPart_Incident = new QuestPart_Incident();

            questPart_Incident.incident = IncidentDefOf.ManhunterPack;
            IncidentParms incidentParms = new IncidentParms();

            incidentParms.forced      = true;
            incidentParms.target      = map;
            incidentParms.points      = points;
            incidentParms.questTag    = QuestGenUtility.HardcodedTargetQuestTagWithQuestID(tag.GetValue(slate));
            incidentParms.spawnCenter = walkInSpot.GetValue(slate) ?? QuestGen.slate.Get <IntVec3?>("walkInSpot") ?? IntVec3.Invalid;
            incidentParms.pawnCount   = animalCount.GetValue(slate);
            if (ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(points, map.Tile, out var animalKind))
            {
                incidentParms.pawnKind = animalKind;
            }
            slate.Set("animalKindDef", animalKind);
            int num = ((incidentParms.pawnCount > 0) ? incidentParms.pawnCount : ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, points));

            QuestGen.slate.Set("animalCount", num);
            if (!customLetterLabel.GetValue(slate).NullOrEmpty() || customLetterLabelRules.GetValue(slate) != null)
            {
                QuestGen.AddTextRequest("root", delegate(string x)
                {
                    incidentParms.customLetterLabel = x;
                }, QuestGenUtility.MergeRules(customLetterLabelRules.GetValue(slate), customLetterLabel.GetValue(slate), "root"));
            }
            if (!customLetterText.GetValue(slate).NullOrEmpty() || customLetterTextRules.GetValue(slate) != null)
            {
                QuestGen.AddTextRequest("root", delegate(string x)
                {
                    incidentParms.customLetterText = x;
                }, QuestGenUtility.MergeRules(customLetterTextRules.GetValue(slate), customLetterText.GetValue(slate), "root"));
            }
            questPart_Incident.SetIncidentParmsAndRemoveTarget(incidentParms);
            questPart_Incident.inSignal = QuestGenUtility.HardcodedSignalWithQuestID(inSignal.GetValue(slate)) ?? QuestGen.slate.Get <string>("inSignal");
            QuestGen.quest.AddPart(questPart_Incident);
            List <Rule> rules = new List <Rule>
            {
                new Rule_String("animalKind_label", animalKind.label),
                new Rule_String("animalKind_labelPlural", animalKind.GetLabelPlural(num))
            };

            QuestGen.AddQuestDescriptionRules(rules);
            QuestGen.AddQuestNameRules(rules);
        }
        // Token: 0x0600000D RID: 13 RVA: 0x000021A8 File Offset: 0x000003A8
        protected override bool CanFireNowSub(IncidentParms parms)
        {
            //Log.Message("base: " + base.CanFireNowSub(parms) + " enabled: " + GrenadesExpendedMod.rabbitincident);
            if (!base.CanFireNowSub(parms) || !GrenadesExpendedMod.rabbitincident)
            {
                return(false);
            }
            Map         map   = (Map)parms.target;
            PawnKindDef named = DefDatabase <PawnKindDef> .GetNamed("KillerRabbit", true);

            IntVec3 intVec;

            return(ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out named) && RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null));
        }
Exemple #10
0
        private void GenerateAnimals(Faction faction, List <Pawn> pawns, Map map, float points)
        {
            int        numOfAnimals = (int)(pawns.Count * 0.7f);
            float      min          = Mathf.Clamp(points * 0.35f, 100, 800);
            FloatRange pointsRange  = new FloatRange(min, Mathf.Clamp(points * 0.6f, min + 100, 2000));

            for (int i = 0; i < numOfAnimals; i++)
            {
                if (ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(pointsRange.RandomInRange, map.Tile, out PawnKindDef animalKind))
                {
                    PawnGenerationRequest request = new PawnGenerationRequest(animalKind, faction, PawnGenerationContext.NonPlayer);
                    Pawn item = PawnGenerator.GeneratePawn(request);
                    pawns.Add(item);
                }
            }
        }
 protected override bool TestRunInt(Slate slate)
 {
     if (!Find.Storyteller.difficultyValues.allowViolentQuests)
     {
         return(false);
     }
     if (!slate.Exists("map"))
     {
         return(false);
     }
     if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(slate.Get("points", 0f), slate.Get <Map>("map").Tile, out var _))
     {
         return(false);
     }
     return(true);
 }
        public override bool ManualDeterminParams()
        {
            Map map = (Map)parms.target;

            if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out AnimalType))
            {
                return(false);
            }
            if (!RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null))
            {
                return(false);
            }
            pawnList    = ManhunterPackIncidentUtility.GenerateAnimals(AnimalType, map.Tile, parms.points * 1f);
            AnimalNum   = pawnList.Count;
            lookTargets = new TargetInfo(intVec, map, false);
            return(true);
        }
        static bool Prefix(ref IncidentParms parms)
        {
            Map map = (Map)parms.target;
            // Set downstream methods to toggle on preferences for avoiding deep water
            PawnKindDef animalKind = parms.pawnKind;

            if ((animalKind == null && !ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out animalKind)) || ManhunterPackIncidentUtility.GetAnimalsCount(animalKind, parms.points) == 0)
            {
                return(true);
            }
            // Set the animal manually since we need to know ahead of time to determine if it swims
            parms.pawnKind = animalKind;
            // Check if the animal involved prefers to swim over walk
            if (animalKind.race.GetStatValueAbstract(StatDefOf.MoveSpeed) >= animalKind.race.GetStatValueAbstract(StatDef.Named(SwimmingLoader.SwimStat)) + 0.001)
            {
                DeepWaterNotPreferredForTryFindRandomPawnEntryCell.PreferNonDeepWater = true;
            }
            return(true);
        }
Exemple #14
0
        protected virtual PawnKindDef GetAnimalKind(float points, int tile)
        {
            PawnKindDef result = null;

            if (result == null && def is IncidentDefExpanded)
            {
                List <PawnKindDef> pawnKindDefs = (def as IncidentDefExpanded).pawnKinds;

                if (pawnKindDefs != null && pawnKindDefs.Count > 0)
                {
                    result = pawnKindDefs.RandomElement();
                }
            }

            if (result == null)
            {
                ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(points, tile, out result);
            }

            return(result);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map         map = (Map)parms.target;
            PawnKindDef pawnKindDef;

            if (!ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(parms.points, map.Tile, out pawnKindDef))
            {
                return(false);
            }
            IntVec3 intVec;

            if (!RCellFinder.TryFindRandomPawnEntryCell(out intVec, map, CellFinder.EdgeRoadChance_Animal, false, null))
            {
                return(false);
            }
            List <Pawn> list = ManhunterPackIncidentUtility.GenerateAnimals(pawnKindDef, map.Tile, parms.points * 1f);
            Rot4        rot  = Rot4.FromAngleFlat((map.Center - intVec).AngleFlat);

            for (int i = 0; i < list.Count; i++)
            {
                Pawn    pawn = list[i];
                IntVec3 loc  = CellFinder.RandomClosewalkCellNear(intVec, map, 10, null);
                GenSpawn.Spawn(pawn, loc, map, rot, WipeMode.Vanish, false);
                pawn.mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false);
                pawn.mindState.exitMapAfterTick = Find.TickManager.TicksGame + Rand.Range(60000, 120000);
            }
            var text = "ManhunterPackArrived".Translate(pawnKindDef.GetLabelPlural(-1));

            if (Quote != null)
            {
                text += "\n\n";
                text += Helper.ReplacePlaceholder(Quote, animal: pawnKindDef.GetLabelPlural(-1));
            }

            Find.LetterStack.ReceiveLetter("LetterLabelManhunterPackArrived".Translate(), text, LetterDefOf.ThreatBig, list[0], null, null);
            Find.TickManager.slower.SignalForceNormalSpeedShort();
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.ForbiddingDoors, OpportunityType.Critical);
            LessonAutoActivator.TeachOpportunity(ConceptDefOf.AllowedAreas, OpportunityType.Important);
            return(true);
        }
        protected override bool CanFireNowSub(IncidentParms parms)
        {
            PawnKindDef pawnKindDef;

            return(base.CanFireNowSub(parms) && ManhunterPackIncidentUtility.TryFindManhunterAnimalKind(this.AdjustedPoints(parms.points), -1, out pawnKindDef));
        }