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); }
// 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); } } } }
// 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(); }
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(); }
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; }