public override void Generate(Map map, GenStepParams parms)
        {
            IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatSmall, map);

            incidentParms.faction = parms.sitePart.site.Faction;
            if (incidentParms.faction == null)
            {
                incidentParms.faction = Faction.OfMechanoids;
            }
            incidentParms.points = parms.sitePart.parms.threatPoints;

            List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, false), true).ToList <Pawn>();

            if (list.Count > 0)
            {
                foreach (Pawn pawn in list)
                {
                    IntVec3 result = new IntVec3();
                    CellFinder.TryFindRandomCellNear(map.Center, map, 10, c => c.Walkable(map), out result);
                    GenSpawn.Spawn(pawn, result, map);
                }
            }
            MapGenerator.SetVar <CellRect>("RectOfInterest", CellRect.CenteredOn(map.Center, 1, 1));
            LordMaker.MakeNewLord(incidentParms.faction, new LordJob_DefendBase(incidentParms.faction, map.Center), map, list);
        }
Exemple #2
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            if (!StoreIncidentMaker.CheckIfViewerHasEnoughCoins(viewer, this.storeIncident.cost, separateChannel))
            {
                return(false);
            }
            if (Current.Game.GetComponent <GameComponentPawns>().HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you are already in the colony.", separateChannel);
                return(false);
            }

            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            IIncidentTarget target = Helper.AnyPlayerMap;

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, target);
            map   = (Map)parms.target;

            bool cell = CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => map.reachability.CanReachColony(c) && !c.Fogged(map), map, CellFinder.EdgeRoadChance_Neutral, out loc);

            if (!cell)
            {
                return(false);
            }
            return(true);
        }
        public override void MapComponentTick()
        {
            base.MapComponentTick();

            //We don't need to run all that often
            if (Find.TickManager.TicksGame % 531 == 0 && GenDate.DaysPassed > 8)
            {
                foreach (KeyValuePair <Faction, int> kvp in this.NextFactionInteraction)
                {
                    if (Find.TickManager.TicksGame >= kvp.Value)
                    {
                        Faction       faction       = kvp.Key;
                        IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(incCat: IncidentCategoryDefOf.FactionArrival, target: this.map);
                        incidentParms.faction = faction;
                        //forced, because half the time game doesn't feel like firing events.
                        incidentParms.forced = true;

                        //trigger incident somewhere between half a day and 3 days from now
                        Find.Storyteller.incidentQueue.Add(def: IncomingIncidentDef(faction) ?? IncomingIncidentDef(faction), // overly-cautious "try again" null-check after strange bugreport.
                                                           fireTick: Find.TickManager.TicksGame + Rand.Range(min: GenDate.TicksPerDay / 2, max: GenDate.TicksPerDay * 3),
                                                           parms: incidentParms,
                                                           retryDurationTicks: 2500);

                        this.NextFactionInteraction[key : faction] =
                            Find.TickManager.TicksGame
                            + (int)(FactionInteractionTimeSeperator.TimeBetweenInteraction.Evaluate(faction.PlayerGoodwill)
                                    * MoreFactionInteraction_Settings.timeModifierBetweenFactionInteraction);


                        //kids, you shouldn't change values you iterate over.
                        break;
                    }
                }
            }
        }
Exemple #4
0
        public void SendRaid()
        {
            raidTimer = ticksBetweenRaids;

            if (camp.PlayerSiegeMap == null)
            {
                return;
            }

            if (!TryFindSpawnSpot(camp.PlayerSiegeMap, out IntVec3 spawnSpot))
            {
                return;
            }

            float points = totalThreat * 0.5f;

            if (totalThreat <= 0)
            {
                points = totalThreat;
            }

            IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, camp.PlayerSiegeMap);

            raidParms.forced             = true;
            raidParms.faction            = camp.Faction;
            raidParms.raidStrategy       = RaidStrategyDefOf.ImmediateAttack;
            raidParms.raidArrivalMode    = PawnsArrivalModeDefOf.EdgeWalkIn;
            raidParms.spawnCenter        = spawnSpot;
            raidParms.points             = points;
            raidParms.pawnGroupMakerSeed = Rand.Int;
            var incident = new FiringIncident(IncidentDefOf.RaidEnemy, null, raidParms);

            Find.Storyteller.TryFire(incident);
        }
Exemple #5
0
        private void DoMapPartDrop()
        {
            IncidentDef   def   = IncidentDefOf.ShipChunkDrop;
            IncidentParms parms = StorytellerUtility.DefaultParmsNow(def.category, Find.AnyPlayerHomeMap);

            def.Worker.TryExecute(parms);
        }
Exemple #6
0
 public static void TenantInvite(Building_CommsConsole comms, Pawn pawn)
 {
     Messages.Message("InviteTenantMessage".Translate(), MessageTypeDefOf.NeutralEvent);
     MapComponent_Tenants.GetComponent(pawn.Map).Broadcast = true;
     if (Rand.Value < 0.20f)
     {
         var parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, pawn.Map);
         parms.raidStrategy = RaidStrategyDefOf.Retribution;
         parms.forced       = true;
         Find.Storyteller.incidentQueue.Add(IncidentDefOf.Opportunists,
                                            Find.TickManager.TicksGame + Rand.Range(25000, 150000), parms, 240000);
     }
     else
     {
         var parms = new IncidentParms {
             target = pawn.Map, forced = true
         };
         Find.Storyteller.incidentQueue.Add(IncidentDefOf.RequestForTenancy,
                                            Find.TickManager.TicksGame + Rand.Range(15000, 120000), parms, 240000);
         while (Rand.Value < 0.10)
         {
             Find.Storyteller.incidentQueue.Add(IncidentDefOf.RequestForTenancy,
                                                Find.TickManager.TicksGame + Rand.Range(15000, 120000), parms, 240000);
         }
     }
 }
Exemple #7
0
        public static void SendRaid(Faction faction, Map map, float points, int arrivalTime, PawnsArrivalModeDef pawnsArrivalModeDef = null, RaidStrategyDef raidStrategyDef = null)
        {
            int @int = Rand.Int;

            IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, map);

            raidParms.forced               = true;
            raidParms.faction              = faction;
            raidParms.points               = points;
            raidParms.pawnGroupMakerSeed   = @int;
            raidParms.generateFightersOnly = true;

            if (raidStrategyDef != null)
            {
                raidParms.raidStrategy = raidStrategyDef;
            }
            else
            {
                ResolveRaidStrategy(raidParms, PawnGroupKindDefOf.Combat);
            }

            if (pawnsArrivalModeDef != null)
            {
                raidParms.raidArrivalMode = pawnsArrivalModeDef;
            }
            else
            {
                ResolveRaidArriveMode(raidParms);
            }

            Find.Storyteller.incidentQueue.Add(IncidentDefOf.RaidEnemy, Find.TickManager.TicksGame + arrivalTime, raidParms);
        }
        private static void DoIncidentDebugAction(IIncidentTarget target, int iterations = 1)
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (IncidentDef item in from d in DefDatabase <IncidentDef> .AllDefs
                     where d.TargetAllowed(target)
                     orderby d.defName
                     select d)
            {
                IncidentDef   localDef = item;
                string        text     = localDef.defName;
                IncidentParms parms    = StorytellerUtility.DefaultParmsNow(localDef.category, target);
                if (!localDef.Worker.CanFireNow(parms))
                {
                    text += " [NO]";
                }
                list.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, delegate
                {
                    for (int i = 0; i < iterations; i++)
                    {
                        IncidentParms parms2 = StorytellerUtility.DefaultParmsNow(localDef.category, target);
                        if (localDef.pointsScaleable)
                        {
                            parms2 = Find.Storyteller.storytellerComps.First((StorytellerComp x) => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain).GenerateParms(localDef.category, parms.target);
                        }
                        localDef.Worker.TryExecute(parms2);
                    }
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
        private static void DoIncidentWithPointsAction(IIncidentTarget target)
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (IncidentDef item in from d in DefDatabase <IncidentDef> .AllDefs
                     where d.TargetAllowed(target) && d.pointsScaleable
                     orderby d.defName
                     select d)
            {
                IncidentDef   localDef = item;
                string        text     = localDef.defName;
                IncidentParms parms    = StorytellerUtility.DefaultParmsNow(localDef.category, target);
                if (!localDef.Worker.CanFireNow(parms))
                {
                    text += " [NO]";
                }
                float localPoints = default(float);
                list.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, delegate
                {
                    List <DebugMenuOption> list2 = new List <DebugMenuOption>();
                    foreach (float item2 in DebugActionsUtility.PointsOptions(extended: true))
                    {
                        localPoints = item2;
                        list2.Add(new DebugMenuOption(item2 + " points", DebugMenuOptionMode.Action, delegate
                        {
                            parms.points = localPoints;
                            localDef.Worker.TryExecute(parms);
                        }));
                    }
                    Find.WindowStack.Add(new Dialog_DebugOptionListLister(list2));
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
Exemple #10
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 #11
0
        public override void PostMapGenerate(Map map)
        {
            IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.FactionArrival, map);

            incidentParms.forced = true;
            IntVec3 spawnCenter;

            if (RCellFinder.TryFindRandomPawnEntryCell(out spawnCenter, map, 0f, false, (IntVec3 v) => v.Standable(map)))
            {
                incidentParms.spawnCenter = spawnCenter;
            }
            Faction faction;

            if ((from f in Find.FactionManager.AllFactions
                 where !f.def.hidden && f.HostileTo(Faction.OfPlayer)
                 select f).TryRandomElement(out faction))
            {
                IntVec3 spawnCenter2;
                if (CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => map.reachability.CanReachColony(c), map, CellFinder.EdgeRoadChance_Neutral, out spawnCenter2))
                {
                    incidentParms.faction         = faction;
                    incidentParms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;
                    incidentParms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn;
                    incidentParms.spawnCenter     = spawnCenter2;
                    incidentParms.points         *= 20f;
                    incidentParms.points          = Math.Max(incidentParms.points, 250f);
                    QueuedIncident qi = new QueuedIncident(new FiringIncident(ThingDefOfReconAndDiscovery.RD_RaidEnemyQuest, null, incidentParms), Find.TickManager.TicksGame + Rand.RangeInclusive(5000, 15000));
                    Find.Storyteller.incidentQueue.Add(qi);
                }
            }
        }
Exemple #12
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);
        }
Exemple #13
0
        protected void TreasureWithHumanAmbush(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;
                }
                incidentParms.faction = Find.FactionManager.RandomEnemyFaction();
                PawnGroupMakerParms defaultPawnGroupMakerParms  = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, true);
                defaultPawnGroupMakerParms.generateFightersOnly = true;
                List <Pawn> pawnList = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();
                Map map = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, pawnList, false);
                if (pawnList.Any <Pawn>())
                {
                    LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(incidentParms.faction, true, true, false, false, true), map, pawnList);
                }
                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);
        }
Exemple #14
0
        private static void DoIncidentDebugAction(Dialog_DebugActionsMenu menu, IIncidentTarget target)
        {
            menu.DebugAction($"Incident on {target}", () =>
            {
                var list = new List <DebugMenuOption>();
                foreach (var localDef2 in DefDatabase <IncidentDef> .AllDefs.Where(d => d.TargetAllowed(target)).OrderBy(d => d.defName))
                {
                    IncidentDef localDef = localDef2;
                    string text          = localDef.defName;
                    IncidentParms parms  = StorytellerUtility.DefaultParmsNow(localDef.category, target);
                    if (!localDef.Worker.CanFireNow(parms, false))
                    {
                        text += " [NO]";
                    }

                    list.Add(new DebugMenuOption(text, DebugMenuOptionMode.Action, () =>
                    {
                        if (localDef.pointsScaleable)
                        {
                            StorytellerComp storytellerComp = Find.Storyteller.storytellerComps.First((StorytellerComp x) => x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain);
                            parms = storytellerComp.GenerateParms(localDef.category, parms.target);
                        }

                        ExecuteIncident(localDef, parms, target as Map);
                    }));
                }

                Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
            });
        }
Exemple #15
0
 private void Outcome_Disaster(Caravan caravan)
 {
     LongEventHandler.QueueLongEvent(delegate
     {
         int randomInRange = WorldObject_ResearchRequestLGE.DisasterFactionRelationOffset.RandomInRange;
         this.Faction.TryAffectGoodwillWith(Faction.OfPlayer, randomInRange, false, false, null, null);
         if (!this.Faction.HostileTo(Faction.OfPlayer))
         {
             this.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null, null);
         }
         IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan);
         incidentParms.faction       = this.Faction;
         PawnGroupMakerParms defaultPawnGroupMakerParms  = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, true);
         defaultPawnGroupMakerParms.generateFightersOnly = true;
         List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();
         Map map          = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false);
         if (list.Any <Pawn>())
         {
             LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(this.Faction, true, true, false, false, true), map, list);
         }
         Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
         GlobalTargetInfo lookTarget   = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false);
         Find.LetterStack.ReceiveLetter("LetterLabelResearchRequest_DisasterLGE".Translate(), this.GetLetterText("LetterResearchRequest_DisasterLGE".Translate(this.Faction.def.pawnsPlural.CapitalizeFirst(),
                                                                                                                                                               this.Faction.Name,
                                                                                                                                                               Mathf.RoundToInt(randomInRange)), caravan), LetterDefOf.ThreatBig, lookTarget, null);
     }, "GeneratingMapForNewEncounter", false, null);
 }
        public override void CompTick()
        {
            base.CompTick();
            if (!waitingForNight && this.parent.IsHashIntervalTick(Props.checkingInterval) && this.parent.Map != null &&
                (!Props.requiresTamed || (Props.requiresTamed && this.parent.Faction != null && this.parent.Faction.IsPlayer)))
            {
                IncidentDef incidentDef = IncidentDef.Named(Props.incidentToCause);

                if (incidentDef.defName == "Aurora")
                {
                    waitingForNight = true;
                }
                else
                {
                    IncidentParms parms = StorytellerUtility.DefaultParmsNow(incidentDef.category, this.parent.Map);
                    incidentDef.Worker.TryExecute(parms);
                }
            }
            if (waitingForNight && this.parent.IsHashIntervalTick(this.checkingForNightInterval) && this.parent.Map != null && GenCelestial.CurCelestialSunGlow(this.parent.Map) <= 0.4f &&
                (!Props.requiresTamed || (Props.requiresTamed && this.parent.Faction != null && this.parent.Faction.IsPlayer)))
            {
                IncidentDef   incidentDef = IncidentDef.Named(Props.incidentToCause);
                IncidentParms parms       = StorytellerUtility.DefaultParmsNow(incidentDef.category, this.parent.Map);
                incidentDef.Worker.TryExecute(parms);
                waitingForNight = false;
            }
        }
Exemple #17
0
    public static void TenantWanted(Pawn pawn)
    {
        var tenantComp = pawn.GetTenantComponent();

        if (Rand.Value < 0.66 && tenantComp.WantedBy.HostileTo(Find.FactionManager.OfPlayer) &&
            !MapComponent_Tenants.GetComponent(pawn.Map).WantedTenants.Contains(pawn))
        {
            MapComponent_Tenants.GetComponent(pawn.Map).WantedTenants.Add(pawn);
            var parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, pawn.Map);
            parms.raidStrategy = RaidStrategyDefOf.WantedRaid;
            parms.forced       = true;
            Find.Storyteller.incidentQueue.Add(IncidentDefOf.WantedRaid,
                                               Find.TickManager.TicksGame + Rand.Range(100000, 300000), parms, 60000);
        }
        else if (Rand.Value < 0.5)
        {
            tenantComp.WantedBy.RelationWith(Find.FactionManager.OfPlayer).baseGoodwill -=
                SettingsHelper.LatestVersion.HarborPenalty;
            Find.FactionManager.OfPlayer.RelationWith(tenantComp.WantedBy).baseGoodwill -=
                SettingsHelper.LatestVersion.HarborPenalty;

            Messages.Message(
                "HarboringWantedTenant".Translate(pawn.GetTenantComponent().WantedBy,
                                                  SettingsHelper.LatestVersion.HarborPenalty, pawn.Named("PAWN")),
                MessageTypeDefOf.NegativeEvent);
        }
    }
Exemple #18
0
        private IncidentParms IncidentParms(Map map, TargetInfo target)
        {
            IncidentParms parms = StorytellerUtility.DefaultParmsNow(category, map);

            parms.points          = points >= 0 ? points : parms.points;
            parms.faction         = Faction;
            parms.forced          = true;
            parms.raidStrategy    = raidStrategy;
            parms.raidArrivalMode = arriveMode;
            parms.spawnCenter     = positionFilter.FindCell(map, spawnSettings.spawnList);
            if (type == IncidentType.Reward)
            {
                if (spawnSettings.mode == SpawnMode.Target)
                {
                    parms.spawnCenter = target.Cell;
                }
            }
            if (type == IncidentType.Raid)
            {
                parms.points = spawnSettings.spawnList.Sum(tv => tv.PawnKindDef.combatPower);
                parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms);
            }
            parms.points *= pointMultiplier;
            return(parms);
        }
        public override bool IsPossible()
        {
            List <string> animals = new List <string>()
            {
                "Bear_Grizzly", "Bear_Polar", "Rhinoceros", "Elephant", "Megasloth", "Thrumbo"
            };

            animals.Shuffle();

            ThingDef def          = ThingDef.Named(animals[0]);
            float    averagePower = 0;

            if (def != null && def.race != null)
            {
                foreach (Tool t in def.tools)
                {
                    averagePower += t.power;
                }
                averagePower = averagePower / def.tools.Count;
            }

            float animalCount = 2.5f;

            if (averagePower > 18)
            {
                animalCount = 2.0f;
            }

            worker     = new IncidentWorker_SpecificAnimalsWanderIn("TwitchStoriesLetterLabelPredators", PawnKindDef.Named(animals[0]), false, (int)animalCount, true, true);
            worker.def = IncidentDef.Named("HerdMigration");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target);

            return(worker.CanFireNow(parms));
        }
        public override IncidentParms GenerateParms(IncidentCategoryDef incCat, IIncidentTarget target)
        {
            IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(incCat, target);

            incidentParms.points *= this.Props.randomPointsFactorRange.RandomInRange;
            return(incidentParms);
        }
        public override void DoAction(EmailMessage message, EmailBox box, Pawn speaker)
        {
            IncidentDef def = null;

            switch (action)
            {
            case 0:
            {
                Utils.SendRaid(Find.FactionManager.OfMechanoids, 1.4f, Rand.Range(2, 5) * 60000);
                break;
            }

            case 1:
            {
                def = IncidentDefOfLocal.PsychicEmanatorShipPartCrash;
                def.Worker.TryExecute(StorytellerUtility.DefaultParmsNow(def.category, Find.AnyPlayerHomeMap));
                break;
            }

            case 2:
            {
                Utils.SendRaid(Find.FactionManager.OfMechanoids, 1.2f, Rand.Range(2, 7) * 60000);
                break;
            }

            case 3:
            {
                def = IncidentDefOfLocal.ResourcePodCrash;
                def.Worker.TryExecute(StorytellerUtility.DefaultParmsNow(def.category, Find.AnyPlayerHomeMap));
                break;
            }
            }
        }
 private void Outcome_Disaster(Caravan caravan)
 {
     LongEventHandler.QueueLongEvent(delegate
     {
         FactionRelationKind playerRelationKind = base.Faction.PlayerRelationKind;
         int randomInRange = DiplomacyTuning.Goodwill_PeaceTalksDisasterRange.RandomInRange;
         base.Faction.TryAffectGoodwillWith(Faction.OfPlayer, randomInRange, canSendMessage: false, canSendHostilityLetter: false);
         base.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, canSendLetter: false);
         IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan);
         incidentParms.faction       = base.Faction;
         PawnGroupMakerParms defaultPawnGroupMakerParms  = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, ensureCanGenerateAtLeastOnePawn: true);
         defaultPawnGroupMakerParms.generateFightersOnly = true;
         List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms).ToList();
         Map map          = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, sendLetterIfRelatedPawns: false);
         if (list.Any())
         {
             LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(base.Faction), map, list);
         }
         Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
         GlobalTargetInfo target  = (list.Any() ? new GlobalTargetInfo(list[0].Position, map) : GlobalTargetInfo.Invalid);
         TaggedString letterLabel = "LetterLabelPeaceTalks_Disaster".Translate();
         TaggedString letterText  = GetLetterText("LetterPeaceTalks_Disaster".Translate(base.Faction.def.pawnsPlural.CapitalizeFirst(), base.Faction.NameColored, Mathf.RoundToInt(randomInRange)), caravan, playerRelationKind);
         PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref letterLabel, ref letterText, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true);
         Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig, target, base.Faction);
     }, "GeneratingMapForNewEncounter", doAsynchronously: false, null);
 }
Exemple #23
0
        public override bool IsPossible()
        {
            parms  = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, target);
            points = parms.points;

            return(worker.CanFireNow(parms));
        }
        public override void WorldComponentTick()
        {
            base.WorldComponentTick();
            if (Find.AnyPlayerHomeMap == null)
            {
                return;
            }

            if (!(Find.TickManager.TicksGame >= occuringTick))
            {
                return;
            }

            var parms = StorytellerUtility.DefaultParmsNow(incident.category,
                                                           Find.Maps.Where(x => x.IsPlayerHome).RandomElement());

            if (incident.Worker.TryExecute(parms))
            {
                occuringTick += IntervalTicks;
            }
            else
            {
                occuringTick += GenDate.TicksPerDay;
            }
        }
 private void Outcome_Disaster(Caravan caravan)
 {
     LongEventHandler.QueueLongEvent(delegate()
     {
         FactionRelationKind playerRelationKind = this.Faction.PlayerRelationKind;
         int randomInRange = DiplomacyTuning.Goodwill_PeaceTalksDisasterRange.RandomInRange;
         this.Faction.TryAffectGoodwillWith(Faction.OfPlayer, randomInRange, false, false, null, null);
         this.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile, false, null, null);
         IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, caravan);
         incidentParms.faction       = this.Faction;
         PawnGroupMakerParms defaultPawnGroupMakerParms  = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, true);
         defaultPawnGroupMakerParms.generateFightersOnly = true;
         List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(defaultPawnGroupMakerParms, true).ToList <Pawn>();
         Map map          = CaravanIncidentUtility.SetupCaravanAttackMap(caravan, list, false);
         if (list.Any <Pawn>())
         {
             LordMaker.MakeNewLord(incidentParms.faction, new LordJob_AssaultColony(this.Faction, true, true, false, false, true), map, list);
         }
         Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
         GlobalTargetInfo target = (!list.Any <Pawn>()) ? GlobalTargetInfo.Invalid : new GlobalTargetInfo(list[0].Position, map, false);
         string label            = "LetterLabelPeaceTalks_Disaster".Translate();
         string letterText       = this.GetLetterText("LetterPeaceTalks_Disaster".Translate(new object[]
         {
             this.Faction.def.pawnsPlural.CapitalizeFirst(),
             this.Faction.Name,
             Mathf.RoundToInt((float)randomInRange)
         }), caravan, playerRelationKind);
         PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref label, ref letterText, "LetterRelatedPawnsGroupGeneric".Translate(new object[]
         {
             Faction.OfPlayer.def.pawnsPlural
         }), true, true);
         Find.LetterStack.ReceiveLetter(label, letterText, LetterDefOf.ThreatBig, target, this.Faction, null);
     }, "GeneratingMapForNewEncounter", false, null);
 }
Exemple #26
0
        public static void CauseMechanoidRaid(Pawn pawn, BodyPartRecord part, RecipeDef recipe, float points = 1.25f, int minTicks = 2000, int maxTicks = 4000)
        {
            IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, pawn.Map);
            IntVec3       spawnSpot;

            if (!CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => pawn.Map.reachability.CanReachColony(c), pawn.Map, CellFinder.EdgeRoadChance_Neutral, out spawnSpot))
            {
                Nothing(pawn, null, recipe);
                return;
            }

            incidentParms.forced          = true;
            incidentParms.faction         = Faction.OfMechanoids;
            incidentParms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;
            incidentParms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn;
            incidentParms.spawnCenter     = spawnSpot;
            incidentParms.points         *= points;

            int            delay = new IntRange(minTicks, maxTicks).RandomInRange;
            QueuedIncident qi    = new QueuedIncident(new FiringIncident(IncidentDefOf.RaidEnemy, null, incidentParms), Find.TickManager.TicksGame + delay);

            Find.Storyteller.incidentQueue.Add(qi);

            Base.Instance.GetExtendedDataStorage().lastEmergencySignalTick  = Find.TickManager.TicksGame;
            Base.Instance.GetExtendedDataStorage().lastEmergencySignalDelay = delay;
        }
Exemple #27
0
        private void NextWave()
        {
            Map map = Bomb.Map;

            if (!TryFindSpawnSpot(map, out IntVec3 spawnSpot))
            {
                return;
            }

            if (!TryFindEnemyFaction(out Faction enemyFac))
            {
                return;
            }

            int           @int      = Rand.Int;
            IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, map);

            raidParms.forced             = true;
            raidParms.faction            = enemyFac;
            raidParms.raidStrategy       = RaidStrategyDefOf.ImmediateAttack;
            raidParms.raidArrivalMode    = PawnsArrivalModeDefOf.EdgeWalkIn;
            raidParms.spawnCenter        = spawnSpot;
            raidParms.points             = threatsMap[currentWave];
            raidParms.pawnGroupMakerSeed = @int;
            var incident = new FiringIncident(IncidentDefOf.RaidEnemy, null, raidParms);

            Find.Storyteller.TryFire(incident);

            currentWave++;
        }
        public override void Generate(Map map, GenStepParams parms)
        {
            IncidentParms incidentParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatSmall, map);

            incidentParms.faction = Find.FactionManager.AllFactionsListForReading.FindAll(f => (f.def == VFEV_DefOf.VFEV_VikingsClan || f.def == VFEV_DefOf.VFEV_VikingsSlaver) && f.HostileTo(Faction.OfPlayer))?.RandomElement();            /*parms.sitePart.site.Faction;*/
            if (incidentParms.faction == null)
            {
                incidentParms.faction = Faction.OfMechanoids;
            }

            incidentParms.points = Mathf.Max(incidentParms.points * 0.5f, incidentParms.faction.def.MinPointsToGeneratePawnGroup(PawnGroupKindDefOf.Combat));

            List <Pawn> list = PawnGroupMakerUtility.GeneratePawns(IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, incidentParms, false), true).ToList();

            if (list.Count > 0)
            {
                foreach (Pawn pawn in list)
                {
                    IntVec3 result = new IntVec3();
                    CellFinder.TryFindRandomCellNear(map.Center, map, 10, c => c.Walkable(map), out result);
                    GenSpawn.Spawn(pawn, result, map);
                }
            }
            MapGenerator.SetVar("RectOfInterest", CellRect.CenteredOn(map.Center, 1, 1));

            if (incidentParms.faction == Faction.OfMechanoids)
            {
                LordMaker.MakeNewLord(incidentParms.faction, new LordJob_DefendPoint(map.Center, 10, addFleeToil: false), map, list);
            }
            else
            {
                LordMaker.MakeNewLord(incidentParms.faction, new LordJob_DefendBase(incidentParms.faction, map.Center), map, list);
            }
        }
        private static void SendCaravan(FCEvent evt)
        {
            Map playerHomeMap = Find.World.GetComponent <FactionFC>().TaxMap;

            if (DoDelayCaravanDueToDanger(evt))
            {
                return;
            }

            MakeDeliveryLetterAndMessage(evt);
            List <Pawn> pawns = new List <Pawn>();

            while (evt.goods.Count() > 0)
            {
                Pawn  pawn = PawnGenerator.GeneratePawn(FCPawnGenerator.WorkerOrMilitaryRequest());
                Thing next = evt.goods.First();

                if (pawn.carryTracker.innerContainer.TryAdd(next))
                {
                    evt.goods.Remove(next);
                }

                pawns.Add(pawn);
            }

            PawnsArrivalModeWorker_EdgeWalkIn pawnsArrivalModeWorker = new PawnsArrivalModeWorker_EdgeWalkIn();
            IncidentParms parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.FactionArrival, playerHomeMap);

            parms.spawnRotation = Rot4.FromAngleFlat((((Map)parms.target).Center - parms.spawnCenter).AngleFlat);

            RCellFinder.TryFindRandomPawnEntryCell(out parms.spawnCenter, playerHomeMap, CellFinder.EdgeRoadChance_Friendly);

            pawnsArrivalModeWorker.Arrive(pawns, parms);
            LordMaker.MakeNewLord(FCPawnGenerator.WorkerOrMilitaryRequest().Faction, new LordJob_DeliverSupplies(parms.spawnCenter), playerHomeMap, pawns);
        }
Exemple #30
0
        public override bool IsPossible()
        {
            worker     = new IncidentWorker_CallForAid();
            worker.def = IncidentDefOf.RaidFriendly;

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.AllyAssistance, Helper.AnyPlayerMap);

            IEnumerable <Faction> factionSearch = Find.FactionManager.AllFactions.Where(s => s.def.defName == factionDefName);

            Faction TaskForce141;

            if (factionSearch != null && factionSearch.Count() > 0)
            {
                TaskForce141 = factionSearch.ElementAt(0);
            }
            else
            {
                return(false);
            }

            if (TaskForce141.PlayerRelationKind == FactionRelationKind.Hostile)
            {
                return(false);
            }

            parms.faction = TaskForce141;
            parms.raidArrivalModeForQuickMilitaryAid = true;

            parms.points = DiplomacyTuning.RequestedMilitaryAidPointsRange.RandomInRange;

            return(true);
        }