Beispiel #1
0
        public static bool Prefix(IncidentWorker_RaidEnemy __instance, IncidentParms parms)
        {
            var options = Find.Storyteller.def.GetModExtension <StorytellerDefExtension>();

            if (options != null && options.storytellerThreat != null && options.storytellerThreat.raidWarningRange.HasValue)
            {
                var comp = Current.Game.GetComponent <StorytellerWatcher>();
                if (comp != null && !comp.raidQueues.Where(x => x.parms == parms).Any() && parms.target is Map mapTarget)
                {
                    var tickToFire = Find.TickManager.TicksAbs + options.storytellerThreat.raidWarningRange.Value.RandomInRange;
                    if (__instance.TryResolveRaidFaction(parms))
                    {
                        __instance.ResolveRaidStrategy(parms, PawnGroupKindDefOf.Combat);
                        __instance.ResolveRaidArriveMode(parms);
                        var raidQueue = new RaidQueue(__instance.def, parms, tickToFire);
                        comp.raidQueues.Add(raidQueue);
                        TaggedString letterLabel = "VFEMech.RaidWarningTitle".Translate(parms.faction.Named("FACTION"));
                        TaggedString letterText  = "VFEMech.RaidWarningText".Translate(parms.faction.Named("FACTION"), parms.raidStrategy.arrivalTextEnemy);
                        Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.ThreatBig);
                        return(false);
                    }
                }
            }
            return(true);
        }
Beispiel #2
0
 static void Postfix(IncidentWorker_RaidEnemy __instance, IncidentParms parms)
 {
     if (Resources.rng.Next(101) <= Resources.randomChanceRaid)
     {
         Resources.events.Add(new ABigThreat(Utils.CurrentDate(), parms.faction));
     }
     Resources.eventsLog.Add(new ABigThreat(Utils.CurrentDate(), parms.faction));
 }
 static void Prefix(IncidentWorker_RaidEnemy __instance)
 {
     if (PreemptiveStrike.Mod.PES_Settings.DebugModeOn)
     {
         Log.Message("-=PS=- IncidentWorker_RaidEnemy Prefix");                 //Lt. Bob - Logging
     }
     IncidentInterceptorUtility.CurrentIncidentDef = __instance.def;
 }
Beispiel #4
0
        public static bool RaidPossible(float points, PawnsArrivalModeDef arrival, RaidStrategyDef strategy = null, Faction faction = null)
        {
            var raidEnemy = new IncidentWorker_RaidEnemy();

            raidEnemy.def = IncidentDefOf.RaidEnemy;
            return(raidEnemy.CanFireNow(new IncidentParms
            {
                target = Helper.AnyPlayerMap,
                points = Math.Max(StorytellerUtility.DefaultThreatPointsNow(Helper.AnyPlayerMap), points),
                raidArrivalMode = arrival,
                raidStrategy = strategy == null ? RaidStrategyDefOf.ImmediateAttack : strategy,
                faction = faction
            }));
        }
        public override void Execute(int amount, string boughtBy)
        {
            var currentMap = Find.CurrentMap;

            var parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, currentMap);

            parms.forced          = true;
            parms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn;
            parms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;

            var raidWorker = new IncidentWorker_RaidEnemy();

            raidWorker.def = IncidentDef.Named("RaidEnemy");
            raidWorker.TryExecute(parms);

            AlertManager.BadEventNotification("Your viewers have sent a Raid!");
        }
Beispiel #6
0
        public override IEnumerable <FiringIncident> MakeIntervalIncidents(IIncidentTarget target)
        {
            if (VoteHandler.voteActive || !Rand.MTBEventOccurs(ToolkitSettings.UristBotMTBDays, 60000f, 1000f))
            {
                yield break;
            }

            IncidentWorker worker = new IncidentWorker_RaidEnemy();
            IncidentParms  parms  = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatSmall, target);

            worker.def            = IncidentDefOf.RaidEnemy;
            parms.points          = StorytellerUtility.DefaultThreatPointsNow(target);
            parms.raidStrategy    = RaidStrategyDefOf.ImmediateAttack;
            parms.raidArrivalMode = PawnsArrivalModeDefOf.EdgeWalkIn;

            if (!worker.CanFireNow(parms))
            {
                yield break;
            }

            int choice = Rand.Range(0, 0);

            switch (choice)
            {
            case 0:
                parms.faction = Find.FactionManager.RandomEnemyFaction(false, false, false);

                Dictionary <int, RaidStrategyDef> allStrategies = new Dictionary <int, RaidStrategyDef>();

                List <RaidStrategyDef> raidStrategyDefs = new List <RaidStrategyDef>(DefDatabase <RaidStrategyDef> .AllDefs);

                raidStrategyDefs.Shuffle();

                foreach (RaidStrategyDef strat in raidStrategyDefs)
                {
                    allStrategies.Add(allStrategies.Count, strat);
                }

                StorytellerPack named = DefDatabase <StorytellerPack> .GetNamed("UristBot", true);

                VoteHandler.QueueVote(new Vote_RaidStrategy(allStrategies, named, worker, this, parms, "How should the next raiders attack?"));

                break;
            }
        }
Beispiel #7
0
        public static void Raid(float points, PawnsArrivalModeDef arrival, RaidStrategyDef strategy = null, Faction faction = null)
        {
            if (points < 0)
            {
                return;
            }
            var raidEnemy = new IncidentWorker_RaidEnemy();

            raidEnemy.def = IncidentDefOf.RaidEnemy;
            raidEnemy.TryExecute(new IncidentParms
            {
                target          = Helper.AnyPlayerMap,
                points          = Math.Max(StorytellerUtility.DefaultThreatPointsNow(Helper.AnyPlayerMap), points),
                raidArrivalMode = arrival,
                raidStrategy    = strategy == null ? RaidStrategyDefOf.ImmediateAttack : strategy,
                faction         = faction
            });
        }
        public static void IncidentWorker_RaidEnemy_TryExecuteWorker(ref IncidentParms parms,
                                                                     IncidentWorker_RaidEnemy __instance)
        {
            if (__instance.def.defName == "MultipleRaids_RaidEnemy")
            {
                return;
            }

            if (GenTicks.TicksAbs == lastIncidentTick)
            {
                return;
            }

            lastIncidentTick = GenTicks.TicksAbs;
            var customRaidDef = DefDatabase <IncidentDef> .GetNamedSilentFail("MultipleRaids_RaidEnemy");

            customRaidDef.Worker.TryExecute(parms);
        }
        public static void Postfix(IncidentWorker_RaidEnemy __instance, ref IncidentParms parms, bool __result)
        {
            if (__result)
            {
                if (parms.faction.def == XenomorphDefOf.RRY_Xenomorph && parms.raidStrategy != XenomorphDefOf.RRY_PowerCut)
                {
                    Map map = (Map)parms.target;
                    if (map.listerBuildings.allBuildingsColonist.Any(x => x.TryGetComp <CompPowerPlant>() != null))
                    {
                        Rand.PushState();
                        int  @int   = Rand.Int;
                        bool chance = Rand.ChanceSeeded(0.1f, @int);
                        Rand.PopState();
                        if (AvP_IncidentWorker_RaidEnemy_TryExecute_PowerCut_Patch.TryFindSpawnSpot(map, out IntVec3 intVec) && chance)
                        {
                            IncidentParms raidParms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.ThreatBig, map);
                            raidParms.forced               = true;
                            raidParms.faction              = parms.faction;
                            raidParms.raidStrategy         = XenomorphDefOf.RRY_PowerCut;
                            raidParms.raidArrivalMode      = XenomorphDefOf.RRY_DropThroughRoofNearPower;
                            raidParms.spawnCenter          = intVec;
                            raidParms.generateFightersOnly = true;
                            Rand.PushState();
                            raidParms.points = Mathf.Max((raidParms.points / 5) * AvP_IncidentWorker_RaidEnemy_TryExecute_PowerCut_Patch.RaidPointsFactorRange.RandomInRange, 500f);
                            Rand.PopState();
                            raidParms.pawnGroupMakerSeed = new int?(@int);
                            PawnGroupMakerParms defaultPawnGroupMakerParms = IncidentParmsUtility.GetDefaultPawnGroupMakerParms(PawnGroupKindDefOf.Combat, raidParms, true);
                            defaultPawnGroupMakerParms.points = IncidentWorker_Raid.AdjustedRaidPoints(defaultPawnGroupMakerParms.points, XenomorphDefOf.RRY_DropThroughRoofNearPower, XenomorphDefOf.RRY_PowerCut, defaultPawnGroupMakerParms.faction, PawnGroupKindDefOf.Combat);
                            IEnumerable <PawnKindDef> pawnKinds = PawnGroupMakerUtility.GeneratePawnKindsExample(defaultPawnGroupMakerParms);

                            QueuedIncident qi = new QueuedIncident(new FiringIncident(XenomorphDefOf.RRY_PowerCut_Xenomorph, null, raidParms), Find.TickManager.TicksGame + AvP_IncidentWorker_RaidEnemy_TryExecute_PowerCut_Patch.RaidDelay.RandomInRange, 0);
                            Find.Storyteller.incidentQueue.Add(qi);
                        }
                    }
                }
            }
        }
 static void Prefix(IncidentWorker_RaidEnemy __instance)
 {
     IncidentInterceptorUtility.CurrentIncidentDef = __instance.def;
 }