public override void Generate(Map map) { CellRect around; IntVec3 near; if (!SiteGenStepUtility.TryFindRootToSpawnAroundRectOfInterest(out around, out near, map)) { return; } List <Pawn> list = new List <Pawn>(); foreach (Pawn current in this.GeneratePawns(map)) { IntVec3 loc; if (!SiteGenStepUtility.TryFindSpawnCellAroundOrNear(around, near, map, out loc)) { Find.WorldPawns.PassToWorld(current, PawnDiscardDecideMode.Discard); break; } GenSpawn.Spawn(current, loc, map); list.Add(current); } if (!list.Any <Pawn>()) { return; } LordMaker.MakeNewLord(Faction.OfMechanoids, new LordJob_SleepThenAssaultColony(Faction.OfMechanoids, Rand.Bool), map, list); for (int i = 0; i < list.Count; i++) { list[i].jobs.EndCurrentJob(JobCondition.InterruptForced, true); } }
public override void Generate(Map map, GenStepParams parms) { if (SiteGenStepUtility.TryFindRootToSpawnAroundRectOfInterest(out CellRect rectToDefend, out IntVec3 singleCellToSpawnNear, map)) { List <Pawn> list = new List <Pawn>(); foreach (Pawn item in GeneratePawns(parms, map)) { if (!SiteGenStepUtility.TryFindSpawnCellAroundOrNear(rectToDefend, singleCellToSpawnNear, map, out IntVec3 spawnCell)) { Find.WorldPawns.PassToWorld(item); break; } GenSpawn.Spawn(item, spawnCell, map); list.Add(item); } if (list.Any()) { LordMaker.MakeNewLord(Faction.OfMechanoids, new LordJob_SleepThenAssaultColony(Faction.OfMechanoids, Rand.Bool), map, list); for (int i = 0; i < list.Count; i++) { list[i].jobs.EndCurrentJob(JobCondition.InterruptForced); } } } }
protected override void DoAction(object[] args) { if (this.points <= 0f) { return; } List <Pawn> list = new List <Pawn>(); foreach (Pawn current in this.GenerateAmbushPawns()) { IntVec3 loc; if (this.spawnPawnsOnEdge) { if (!CellFinder.TryFindRandomEdgeCellWith((IntVec3 x) => x.Standable(base.Map) && !x.Fogged(base.Map) && base.Map.reachability.CanReachColony(x), base.Map, CellFinder.EdgeRoadChance_Ignore, out loc)) { Find.WorldPawns.PassToWorld(current, PawnDiscardDecideMode.Decide); break; } } else if (!SiteGenStepUtility.TryFindSpawnCellAroundOrNear(this.spawnAround, this.spawnNear, base.Map, out loc)) { Find.WorldPawns.PassToWorld(current, PawnDiscardDecideMode.Decide); break; } GenSpawn.Spawn(current, loc, base.Map, WipeMode.Vanish); if (!this.spawnPawnsOnEdge) { for (int i = 0; i < 10; i++) { MoteMaker.ThrowAirPuffUp(current.DrawPos, base.Map); } } list.Add(current); } if (!list.Any <Pawn>()) { return; } if (this.ambushType == SignalActionAmbushType.Manhunters) { for (int j = 0; j < list.Count; j++) { list[j].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent, null, false, false, null, false); } } else { Faction faction = list[0].Faction; LordMaker.MakeNewLord(faction, new LordJob_AssaultColony(faction, true, true, false, false, true), base.Map, list); } if (!this.spawnPawnsOnEdge) { for (int k = 0; k < list.Count; k++) { list[k].jobs.StartJob(new Job(JobDefOf.Wait, 120, false), JobCondition.None, null, false, true, null, null, false); list[k].Rotation = Rot4.Random; } } Find.LetterStack.ReceiveLetter("LetterLabelAmbushInExistingMap".Translate(), "LetterAmbushInExistingMap".Translate(Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(), LetterDefOf.ThreatBig, list[0], null, null); }
public override void Generate(Map map, GenStepParams parms) { if (!SiteGenStepUtility.TryFindRootToSpawnAroundRectOfInterest(out var rectToDefend, out var singleCellToSpawnNear, map)) { return; } List <Pawn> list = new List <Pawn>(); foreach (Pawn item in GeneratePawns(parms, map)) { if (!SiteGenStepUtility.TryFindSpawnCellAroundOrNear(rectToDefend, singleCellToSpawnNear, map, out var spawnCell)) { Find.WorldPawns.PassToWorld(item); break; } GenSpawn.Spawn(item, spawnCell, map); list.Add(item); } if (!list.Any()) { return; } bool @bool = Rand.Bool; foreach (Pawn item2 in list) { CompWakeUpDormant comp = item2.GetComp <CompWakeUpDormant>(); if (comp != null) { comp.wakeUpIfColonistClose = @bool; } } LordMaker.MakeNewLord(Faction.OfMechanoids, new LordJob_SleepThenAssaultColony(Faction.OfMechanoids), map, list); SendMechanoidsToSleepImmediately(list); }
protected override void DoAction(object[] args) { if (!(points <= 0f)) { List <Pawn> list = new List <Pawn>(); foreach (Pawn item in GenerateAmbushPawns()) { IntVec3 result; if (spawnPawnsOnEdge) { if (!CellFinder.TryFindRandomEdgeCellWith((IntVec3 x) => x.Standable(base.Map) && !x.Fogged(base.Map) && base.Map.reachability.CanReachColony(x), base.Map, CellFinder.EdgeRoadChance_Ignore, out result)) { Find.WorldPawns.PassToWorld(item); break; } } else if (!SiteGenStepUtility.TryFindSpawnCellAroundOrNear(spawnAround, spawnNear, base.Map, out result)) { Find.WorldPawns.PassToWorld(item); break; } GenSpawn.Spawn(item, result, base.Map); if (!spawnPawnsOnEdge) { for (int i = 0; i < 10; i++) { MoteMaker.ThrowAirPuffUp(item.DrawPos, base.Map); } } list.Add(item); } if (list.Any()) { if (ambushType == SignalActionAmbushType.Manhunters) { for (int j = 0; j < list.Count; j++) { list[j].mindState.mentalStateHandler.TryStartMentalState(MentalStateDefOf.ManhunterPermanent); } } else { Faction faction = list[0].Faction; LordMaker.MakeNewLord(faction, new LordJob_AssaultColony(faction), base.Map, list); } if (!spawnPawnsOnEdge) { for (int k = 0; k < list.Count; k++) { list[k].jobs.StartJob(new Job(JobDefOf.Wait, 120)); list[k].Rotation = Rot4.Random; } } Find.LetterStack.ReceiveLetter("LetterLabelAmbushInExistingMap".Translate(), "LetterAmbushInExistingMap".Translate(Faction.OfPlayer.def.pawnsPlural).CapitalizeFirst(), LetterDefOf.ThreatBig, list[0]); } } }
public override void Generate(Map map) { CellRect rectToDefend = default(CellRect); IntVec3 root = default(IntVec3); if (SiteGenStepUtility.TryFindRootToSpawnAroundRectOfInterest(out rectToDefend, out root, map)) { this.SpawnTrigger(rectToDefend, root, map); } }
public override void Generate(Map map, GenStepParams parms) { CellRect rectToDefend; IntVec3 root; if (SiteGenStepUtility.TryFindRootToSpawnAroundRectOfInterest(out rectToDefend, out root, map)) { this.SpawnTrigger(rectToDefend, root, map); } }