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); }
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; }
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!"); }
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; } }
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; }