Exemple #1
0
        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);
        }
Exemple #4
0
        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);
            }
        }