public void DoStrike()
        {
            string      str   = string.Empty;
            List <Pawn> pawns = new List <Pawn>();

            if (!Droppers.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Drop) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Drop);
                pawns.AddRange(Droppers);
                ArriveDropPod(Droppers);
            }
            if (!Flyers.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Fly) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Fly);
                pawns.AddRange(Flyers);
                ArriveFly(Flyers);
            }
            if (!Teleporters.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Teleport) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Teleport);
                pawns.AddRange(Teleporters);
                ArriveTeleport(Teleporters);
            }
            if (!Tunnellers.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Tunnel) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Tunnel);
                pawns.AddRange(Tunnellers);
                ArriveTunnel(Tunnellers);
            }
            Find.LetterStack.ReceiveLetter("AMA_DeepStrike_Incomming".Translate(pawns.Find(x => x.Faction != null).Faction.def.pawnSingular), "AMA_DeepStrike_Incomming_Letter".Translate(pawns.Find(x => x.Faction != null).Faction.def.pawnsPlural, str), LetterDefOf.ThreatBig, pawns, pawns.Find(x => x.Faction != null).Faction, null);
        }
Ejemplo n.º 2
0
        // Token: 0x06002764 RID: 10084 RVA: 0x0012C518 File Offset: 0x0012A918
        public static void DropThingGroupsNear(IntVec3 dropCenter, Map map, List <List <Thing> > thingsGroups, int openDelay = 110, bool instaDrop = false, bool leaveSlag = false, bool canRoofPunch = true, DeepStrikeType strikeType = DeepStrikeType.Drop)
        {
            foreach (List <Thing> list in thingsGroups)
            {
                List <Thing>        list2     = list.Where(x => x.def.thingClass == typeof(Pawn) && (x.Faction != null && x.Faction.def.HasModExtension <FactionDefExtension>())).ToList();
                FactionDefExtension extension = list2.RandomElement().Faction.def.GetModExtension <FactionDefExtension>();
                IntVec3             intVec;
                if (!DropCellFinder.TryFindDropSpotNear(dropCenter, map, out intVec, true, canRoofPunch))
                {
                    Log.Warning(string.Concat(new object[]
                    {
                        "DropThingsNear failed to find a place to drop ",
                        list.FirstOrDefault <Thing>(),
                        " near ",
                        dropCenter,
                        ". Dropping on random square instead."
                    }), false);
                    intVec = CellFinderLoose.RandomCellWith((IntVec3 c) => c.Walkable(map) && (c.Roofed(map) && c.GetRoof(map) != RoofDefOf.RoofRockThick), map, 1000);
                }
                for (int i = 0; i < list.Count; i++)
                {
                    list[i].SetForbidden(true, false);
                }
                if (instaDrop)
                {
                    foreach (Thing thing in list)
                    {
                        GenPlace.TryPlaceThing(thing, intVec, map, ThingPlaceMode.Near, null, null);
                    }
                }
                else
                {
                    ActiveDropPodInfo activeDropPodInfo = new ActiveDropPodInfo();
                    foreach (Thing item in list)
                    {
                        activeDropPodInfo.innerContainer.TryAddOrTransfer(item, true);
                    }
                    activeDropPodInfo.openDelay = openDelay;
                    activeDropPodInfo.leaveSlag = leaveSlag;

                    if (strikeType == DeepStrikeType.Fly)
                    {
                        DeepStrikeUtility.MakeFlyerLandAt(intVec, map, activeDropPodInfo, extension);
                    }
                    else if (strikeType == DeepStrikeType.Tunnel)
                    {
                        DeepStrikeUtility.MakeTunnelAt(intVec, map, activeDropPodInfo, extension);
                    }
                    else if (strikeType == DeepStrikeType.Teleport)
                    {
                        DeepStrikeUtility.MakeTeleportAt(intVec, map, activeDropPodInfo, extension);
                    }
                    else
                    {
                        DeepStrikeUtility.MakeDropPodAt(intVec, map, activeDropPodInfo, extension);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        // Token: 0x060015AA RID: 5546 RVA: 0x000A92C8 File Offset: 0x000A76C8
        public override void Arrive(List <Pawn> pawns, IncidentParms parms)
        {
            Map map = (Map)parms.target;

            for (int i = 0; i < pawns.Count; i++)
            {
                IntVec3 dropCenter = map.listerBuildings.allBuildingsColonist.FindAll(x => x.TryGetCompFast <CompPowerPlant>() != null).RandomElement().Position;
                DeepStrikeUtility.DropThingsNear(dropCenter, map, Gen.YieldSingle <Thing>(pawns[i]), parms.podOpenDelay, true, false, true);
            }
        }
        // Token: 0x060015AA RID: 5546 RVA: 0x000A92C8 File Offset: 0x000A76C8
        public override void Arrive(List <Pawn> pawns, IncidentParms parms)
        {
            Map map = (Map)parms.target;

            for (int i = 0; i < pawns.Count; i++)
            {
                IntVec3 dropCenter = DropCellFinder.RandomDropSpot(map);
                DeepStrikeUtility.DropThingsNear(dropCenter, map, Gen.YieldSingle <Thing>(pawns[i]), parms.podOpenDelay, true, false, true);
            }
        }
 public void ArriveTeleport(List <Pawn> pawns)
 {
     for (int i = 0; i < pawns.Count; i++)
     {
         //    IntVec3 dropCenter = map.listerBuildings.allBuildingsColonist.FindAll(x => x.TryGetCompFast<CompPowerPlant>() != null).RandomElement().Position;
         IntVec3 dropCenter;
         if (DropCellFinder.TryFindRaidDropCenterClose(out dropCenter, map))
         {
             DeepStrikeUtility.DropThingsNear(dropCenter, map, Gen.YieldSingle <Thing>(pawns[i]), 0, true, false, true, DeepStrikeType.Teleport);
         }
     }
     Teleporters.Clear();
 }
Ejemplo n.º 6
0
 public static void DropThingsNear(IntVec3 dropCenter, Map map, IEnumerable <Thing> things, int openDelay = 110, bool canInstaDropDuringInit = false, bool leaveSlag = false, bool canRoofPunch = true, DeepStrikeType strikeType = DeepStrikeType.DropPod, bool scatters = true)
 {
     DeepStrikeUtility.tempList.Clear();
     foreach (Thing item in things)
     {
         List <Thing> list = new List <Thing>
         {
             item
         };
         DeepStrikeUtility.tempList.Add(list);
     }
     DeepStrikeUtility.DropThingGroupsNear(dropCenter, map, DeepStrikeUtility.tempList, openDelay, canInstaDropDuringInit, leaveSlag, canRoofPunch, strikeType, scatters);
     DeepStrikeUtility.tempList.Clear();
 }
Ejemplo n.º 7
0
        private static void CallDeepstrikeOf()
        {
            List <DebugMenuOption> list = new List <DebugMenuOption>();

            foreach (PawnKindDef localKindDef2 in from f in DefDatabase <PawnKindDef> .AllDefs
                     //  where f.RoyalTitlesAwardableInSeniorityOrderForReading.Count > 0
                     orderby f.defName
                     select f)
            {
                PawnKindDef localKindDef = localKindDef2;

                /*
                 * if (!localKindDef.HasModExtension<DeepStrikeExtension>())
                 * {
                 *  continue;
                 * }
                 */
                list.Add(new DebugMenuOption(localKindDef.defName, DebugMenuOptionMode.Tool, delegate()
                {
                    List <FloatMenuOption> list2 = new List <FloatMenuOption>();
                    IntVec3 cell = UI.MouseCell();
                    for (int i = 0; i < 6; i++)
                    {
                        DeepStrikeType strikeType = (DeepStrikeType)i;
                        list2.Add(new FloatMenuOption(DeepStrikeUtility.DeepstrikeArrivalmode(strikeType) + " - ", delegate()
                        {
                            Faction faction = FactionUtility.DefaultFactionFrom(localKindDef.defaultFactionType);
                            Pawn newPawn    = PawnGenerator.GeneratePawn(localKindDef, faction);
                            DeepStrikeUtility.DropThingsNear(cell, Find.CurrentMap, Gen.YieldSingle <Thing>(newPawn), 110, false, false, true, strikeType);
                            if (faction != null && faction != Faction.OfPlayer)
                            {
                                Lord lord = null;
                                if (Find.CurrentMap.mapPawns.SpawnedPawnsInFaction(faction).Any((Pawn p) => p != newPawn))
                                {
                                    lord = ((Pawn)GenClosest.ClosestThing_Global(cell, Find.CurrentMap.mapPawns.SpawnedPawnsInFaction(faction), 99999f, (Thing p) => p != newPawn && ((Pawn)p).GetLord() != null, null)).GetLord();
                                }
                                if (lord == null)
                                {
                                    LordJob_DefendPoint lordJob = new LordJob_DefendPoint(cell, null, false, true);
                                    lord = LordMaker.MakeNewLord(faction, lordJob, Find.CurrentMap, null);
                                }
                                lord.AddPawn(newPawn);
                            }
                        }, MenuOptionPriority.Default, null, null, 0f, null, null));
                    }
                    Find.WindowStack.Add(new FloatMenu(list2));
                }));
            }
            Find.WindowStack.Add(new Dialog_DebugOptionListLister(list));
        }
        public void DoStrike(DeepStrike strike)
        {
            string str = string.Empty;

            foreach (var item in strike.Members)
            {
                switch (item.DeepStrike().pawnsArrivalMode)
                {
                case DeepStrikeType.DropPod:
                    Droppers.Add(item);
                    break;

                case DeepStrikeType.DropPara:
                    break;

                case DeepStrikeType.DropShip:
                    break;

                case DeepStrikeType.Fly:
                    Flyers.Add(item);
                    break;

                case DeepStrikeType.Teleport:
                    Teleporters.Add(item);
                    break;

                case DeepStrikeType.Tunnel:
                    Tunnellers.Add(item);
                    break;

                default:
                    break;
                }
            }
            List <Pawn> pawns = new List <Pawn>();

            if (!Droppers.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.DropPod) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.DropPod);
                pawns.AddRange(Droppers);
                ArriveDropPod(Droppers);
                Droppers.Clear();
            }
            if (!Flyers.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Fly) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Fly);
                pawns.AddRange(Flyers);
                ArriveFly(Flyers);
                Flyers.Clear();
            }
            if (!Teleporters.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Teleport) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Teleport);
                pawns.AddRange(Teleporters);
                ArriveTeleport(Teleporters);
                Teleporters.Clear();
            }
            if (!Tunnellers.NullOrEmpty())
            {
                str += str == string.Empty ? DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Tunnel) : ", " + DeepStrikeUtility.DeepstrikeArrivalmode(DeepStrikeType.Tunnel);
                pawns.AddRange(Tunnellers);
                ArriveTunnel(Tunnellers);
                Tunnellers.Clear();
            }
            Find.LetterStack.ReceiveLetter("AdeptusMechanicus.DeepStrike_Incomming".Translate(pawns.Find(x => x.Faction != null).Faction.def.pawnSingular), "AdeptusMechanicus.DeepStrike_Incomming_Letter".Translate(pawns.Find(x => x.Faction != null).Faction.def.pawnsPlural, str), LetterDefOf.ThreatBig, pawns, pawns.Find(x => x.Faction != null).Faction, null);
            strike.struck = true;
        }