private bool TryReformCaravan() { List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(transferables); if (!CheckForErrors(pawnsFromTransferables)) { return(false); } AddItemsFromTransferablesToRandomInventories(pawnsFromTransferables); Caravan caravan = CaravanExitMapUtility.ExitMapAndCreateCaravan(pawnsFromTransferables, Faction.OfPlayer, CurrentTile, CurrentTile, destinationTile, sendMessage: false); map.Parent.CheckRemoveMapNow(); TaggedString taggedString = "MessageReformedCaravan".Translate(); if (caravan.pather.Moving && caravan.pather.ArrivalAction != null) { taggedString += " " + "MessageFormedCaravan_Orders".Translate() + ": " + caravan.pather.ArrivalAction.Label + "."; } Messages.Message(taggedString, caravan, MessageTypeDefOf.TaskCompletion, historical: false); return(true); }
public void ForceReform(MapParent mapParent) { if (Dialog_FormCaravan.AllSendablePawns(mapParent.Map, reform: true).Any((Pawn x) => x.IsColonist)) { Messages.Message("MessageYouHaveToReformCaravanNow".Translate(), new GlobalTargetInfo(mapParent.Tile), MessageTypeDefOf.NeutralEvent); Current.Game.CurrentMap = mapParent.Map; Dialog_FormCaravan window = new Dialog_FormCaravan(mapParent.Map, reform: true, delegate { if (RemoveAfterLeave && mapParent.HasMap) { Find.WorldObjects.Remove(mapParent); } Quest.PostForceReform(this); }, mapAboutToBeRemoved: true); Find.WindowStack.Add(window); return; } List <Pawn> tmpPawns = new List <Pawn>(); tmpPawns.Clear(); tmpPawns.AddRange(from x in mapParent.Map.mapPawns.AllPawns where x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer select x); if (tmpPawns.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer))) { CaravanExitMapUtility.ExitMapAndCreateCaravan(tmpPawns, Faction.OfPlayer, mapParent.Tile, mapParent.Tile, -1); } tmpPawns.Clear(); if (RemoveAfterLeave) { Find.WorldObjects.Remove(mapParent); } Quest.PostForceReform(this); }
private void CloseMapImmediate() { MapParent mapParent = this.parent as MapParent; if (mapParent != null) { if (Dialog_FormCaravan.AllSendablePawns(mapParent.Map, true).Any((Pawn x) => x.IsColonist || x.IsPrisonerOfColony || x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer)) { foreach (Pawn pawn in mapParent.Map.mapPawns.AllPawnsSpawned) { if (pawn.RaceProps.Humanlike) { Lord lord = pawn.GetLord(); if (lord != null) { lord.Notify_PawnLost(pawn, PawnLostCondition.ExitedMap); pawn.ClearMind(false); } } } Messages.Message("MessageYouHaveToReformCaravanNow".Translate(), new GlobalTargetInfo(mapParent.Tile), MessageTypeDefOf.NeutralEvent); Current.Game.CurrentMap = mapParent.Map; Dialog_FormCaravan window = new Dialog_FormCaravan(mapParent.Map, true, delegate() { if (mapParent.HasMap) { Find.WorldObjects.Remove(mapParent); } }, false); List <Pawn> list = mapParent.Map.mapPawns.AllPawnsSpawned.ToList <Pawn>(); for (int i = 0; i < list.Count; i++) { Pawn pawn2 = list[i]; if (!pawn2.HostileTo(Faction.OfPlayer) && (pawn2.Faction == Faction.OfPlayer || pawn2.IsPrisonerOfColony)) { Log.Message(pawn2.Label + " Meets criteria in CaravanUtility."); } else { Log.Message(pawn2.Label + " NOT ALLOWED by in CaravanUtility."); } } Find.WindowStack.Add(window); } else { List <Pawn> list2 = new List <Pawn>(); list2.AddRange(from x in mapParent.Map.mapPawns.AllPawns where x.IsColonist || x.IsPrisonerOfColony || x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer select x); if (list2.Any <Pawn>()) { if (list2.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer))) { //TODO: check if it works CaravanExitMapUtility.ExitMapAndCreateCaravan(list2, Faction.OfPlayer, mapParent.Tile, mapParent.Tile, mapParent.Tile, false); Messages.Message("MessageReformedCaravan".Translate(), MessageTypeDefOf.PositiveEvent); } else { StringBuilder stringBuilder = new StringBuilder(); for (int j = 0; j < list2.Count; j++) { stringBuilder.AppendLine(" " + list2[j].LabelCap); } Find.LetterStack.ReceiveLetter("RD_LetterLabelPawnsLostDueToMapCountdown".Translate(), TranslatorFormattedStringExtensions.Translate("RD_LetterPawnsLostDueToMapCountdown", new NamedArgument[] { stringBuilder.ToString().TrimEndNewlines() }), LetterDefOf.ThreatSmall, new GlobalTargetInfo(mapParent.Tile), null); } list2.Clear(); } Find.WorldObjects.Remove(mapParent); } } }