private static void PassPawnsToWorld(Map map) { bool flag = map.ParentFaction != null && map.ParentFaction.HostileTo(Faction.OfPlayer); List <Pawn> list = map.mapPawns.AllPawns.ToList(); for (int i = 0; i < list.Count; i++) { try { Pawn pawn = list[i]; if (pawn.Spawned) { pawn.DeSpawn(); } if (pawn.IsColonist && flag) { map.ParentFaction.kidnapped.KidnapPawn(pawn, null); } else { if (pawn.Faction == Faction.OfPlayer || pawn.HostFaction == Faction.OfPlayer) { PawnBanishUtility.Banish(pawn, map.Tile); } MapDeiniter.CleanUpAndPassToWorld(pawn); } } catch (Exception ex) { Log.Error("Could not despawn and pass to world " + list[i] + ": " + ex); } } }
public static bool Prefix(Caravan_NeedsTracker __instance, Pawn pawn) { var extension = pawn.def.GetModExtension <MechanoidExtension>(); if (extension != null && pawn.def.GetModExtension <MechanoidExtension>().isCaravanRiddable) { if (pawn.needs.TryGetNeed <Need_Power>().CurLevel <= 0) { PawnBanishUtility.Banish(pawn); pawn.Kill(null); Messages.Message("VFEM.CaravanMachineRanOutPower".Translate(pawn.Named("MACHINE")), __instance.caravan, MessageTypeDefOf.CautionInput); } return(false); } return(true); }
private void DoArrivalAction() { for (int i = 0; i < pods.Count; i++) { pods[i].savePawnsWithReferenceMode = false; pods[i].parent = null; } if (arrivalAction != null) { try { arrivalAction.Arrived(pods, destinationTile); } catch (Exception arg) { Log.Error("Exception in transport pods arrival action: " + arg); } arrivalAction = null; } else { for (int j = 0; j < pods.Count; j++) { for (int k = 0; k < pods[j].innerContainer.Count; k++) { Pawn pawn = pods[j].innerContainer[k] as Pawn; if (pawn != null && (pawn.Faction == Faction.OfPlayer || pawn.HostFaction == Faction.OfPlayer)) { PawnBanishUtility.Banish(pawn, destinationTile); } } } for (int l = 0; l < pods.Count; l++) { pods[l].innerContainer.ClearAndDestroyContentsOrPassToWorld(); } string key = "MessageTransportPodsArrivedAndLost"; if (def == WorldObjectDefOf.TravelingShuttle) { key = "MessageShuttleArrivedContentsLost"; } Messages.Message(key.Translate(), new GlobalTargetInfo(destinationTile), MessageTypeDefOf.NegativeEvent); } pods.Clear(); Destroy(); }
private void DoArrivalAction() { for (int i = 0; i < this.pods.Count; i++) { this.pods[i].savePawnsWithReferenceMode = false; this.pods[i].parent = null; } if (this.arrivalAction != null) { try { this.arrivalAction.Arrived(this.pods, this.destinationTile); } catch (Exception arg) { Log.Error("Exception in transport pods arrival action: " + arg, false); } this.arrivalAction = null; } else { for (int j = 0; j < this.pods.Count; j++) { for (int k = 0; k < this.pods[j].innerContainer.Count; k++) { Pawn pawn = this.pods[j].innerContainer[k] as Pawn; if (pawn != null && (pawn.Faction == Faction.OfPlayer || pawn.HostFaction == Faction.OfPlayer)) { PawnBanishUtility.Banish(pawn, this.destinationTile); } } } for (int l = 0; l < this.pods.Count; l++) { this.pods[l].innerContainer.ClearAndDestroyContentsOrPassToWorld(DestroyMode.Vanish); } Messages.Message("MessageTransportPodsArrivedAndLost".Translate(), new GlobalTargetInfo(this.destinationTile), MessageTypeDefOf.NegativeEvent, true); } this.pods.Clear(); Find.WorldObjects.Remove(this); }
private static void PassPawnsToWorld(Map map) { List <Pawn> list = new List <Pawn>(); List <Pawn> list2 = new List <Pawn>(); bool flag = map.ParentFaction != null && map.ParentFaction.HostileTo(Faction.OfPlayer); List <Pawn> list3 = map.mapPawns.AllPawns.ToList <Pawn>(); for (int i = 0; i < list3.Count; i++) { Find.Storyteller.Notify_PawnEvent(list3[i], AdaptationEvent.LostBecauseMapClosed, null); try { Pawn pawn = list3[i]; if (pawn.Spawned) { pawn.DeSpawn(DestroyMode.Vanish); } if (pawn.IsColonist && flag) { list.Add(pawn); map.ParentFaction.kidnapped.Kidnap(pawn, null); } else { if (pawn.Faction == Faction.OfPlayer || pawn.HostFaction == Faction.OfPlayer) { list2.Add(pawn); PawnBanishUtility.Banish(pawn, map.Tile); } MapDeiniter.CleanUpAndPassToWorld(pawn); } } catch (Exception ex) { Log.Error(string.Concat(new object[] { "Could not despawn and pass to world ", list3[i], ": ", ex }), false); } } if (list.Any <Pawn>() || list2.Any <Pawn>()) { StringBuilder stringBuilder = new StringBuilder(); if (list.Any <Pawn>()) { list.SortByDescending((Pawn x) => x.RaceProps.Humanlike); for (int j = 0; j < list.Count; j++) { stringBuilder.AppendLine(string.Concat(new string[] { " - ", list[j].LabelCap, " (", "capturedBy".Translate(map.ParentFaction.Name), ")" })); } } if (list2.Any <Pawn>()) { list2.SortByDescending((Pawn x) => x.RaceProps.Humanlike); for (int k = 0; k < list2.Count; k++) { stringBuilder.AppendLine(" - " + list2[k].LabelCap); } } string label; string text; if (map.IsPlayerHome) { label = "LetterLabelPawnsLostBecauseMapClosed_Home".Translate(); text = "LetterPawnsLostBecauseMapClosed_Home".Translate(); } else { label = "LetterLabelPawnsLostBecauseMapClosed_Caravan".Translate(); text = "LetterPawnsLostBecauseMapClosed_Caravan".Translate(); } text = text + ":\n\n" + stringBuilder.ToString().TrimEndNewlines(); Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NegativeEvent, new GlobalTargetInfo(map.Tile), null, null); } }