Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }