Ejemplo n.º 1
0
        private static Pawn FindBestDoctor(Caravan caravan, Pawn patient)
        {
            float       num  = 0f;
            Pawn        pawn = null;
            List <Pawn> pawnsListForReading = caravan.PawnsListForReading;

            for (int i = 0; i < pawnsListForReading.Count; i++)
            {
                Pawn pawn2 = pawnsListForReading[i];
                if (pawn2 != patient && CaravanUtility.IsOwner(pawn2, caravan.Faction))
                {
                    if (!pawn2.Downed && !pawn2.InMentalState)
                    {
                        if (pawn2.story == null || !pawn2.story.WorkTypeIsDisabled(WorkTypeDefOf.Doctor))
                        {
                            float statValue = pawn2.GetStatValue(StatDefOf.MedicalTendQuality, true);
                            if (statValue > num || pawn == null)
                            {
                                num  = statValue;
                                pawn = pawn2;
                            }
                        }
                    }
                }
            }
            return(pawn);
        }
 public static void ForceReform(MapParent mapParent)
 {
     if (Dialog_FormCaravan.AllSendablePawns(mapParent.Map, true).Any((Pawn x) => x.IsColonist))
     {
         Messages.Message("MessageYouHaveToReformCaravanNow".Translate(), new GlobalTargetInfo(mapParent.Tile), MessageTypeDefOf.NeutralEvent, true);
         Current.Game.CurrentMap = mapParent.Map;
         Dialog_FormCaravan window = new Dialog_FormCaravan(mapParent.Map, true, delegate()
         {
             if (mapParent.HasMap)
             {
                 Find.WorldObjects.Remove(mapParent);
             }
         }, true);
         Find.WindowStack.Add(window);
     }
     else
     {
         TimedForcedExit.tmpPawns.Clear();
         TimedForcedExit.tmpPawns.AddRange(from x in mapParent.Map.mapPawns.AllPawns
                                           where x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer
                                           select x);
         if (TimedForcedExit.tmpPawns.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer)))
         {
             CaravanExitMapUtility.ExitMapAndCreateCaravan(TimedForcedExit.tmpPawns, Faction.OfPlayer, mapParent.Tile, mapParent.Tile, -1, true);
         }
         TimedForcedExit.tmpPawns.Clear();
         Find.WorldObjects.Remove(mapParent);
     }
 }
Ejemplo n.º 3
0
 public static 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 (mapParent.HasMap)
             {
                 mapParent.Destroy();
             }
         }, mapAboutToBeRemoved: true);
         Find.WindowStack.Add(window);
         return;
     }
     tmpPawns.Clear();
     tmpPawns.AddRange(mapParent.Map.mapPawns.AllPawns.Where((Pawn x) => x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer));
     if (tmpPawns.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer)))
     {
         CaravanExitMapUtility.ExitMapAndCreateCaravan(tmpPawns, Faction.OfPlayer, mapParent.Tile, mapParent.Tile, -1);
     }
     tmpPawns.Clear();
     mapParent.Destroy();
 }
        public override void CompTick()
        {
            MapParent mapParent = base.parent as MapParent;

            if (this.ForceExitAndRemoveMapCountdownActive)
            {
                if (mapParent.HasMap)
                {
                    this.ticksLeftToForceExitAndRemoveMap--;
                    if (this.ticksLeftToForceExitAndRemoveMap == 0)
                    {
                        if (Dialog_FormCaravan.AllSendablePawns(mapParent.Map, true).Any((Pawn x) => x.IsColonist))
                        {
                            Messages.Message("MessageYouHaveToReformCaravanNow".Translate(), new GlobalTargetInfo(mapParent.Tile), MessageTypeDefOf.NeutralEvent);
                            Current.Game.VisibleMap = mapParent.Map;
                            Dialog_FormCaravan window = new Dialog_FormCaravan(mapParent.Map, true, delegate
                            {
                                if (mapParent.HasMap)
                                {
                                    this.ShowWorldViewIfVisibleMapAboutToBeRemoved(mapParent.Map);
                                    Find.WorldObjects.Remove(mapParent);
                                }
                            }, false, true);
                            Find.WindowStack.Add(window);
                        }
                        else
                        {
                            TimedForcedExit.tmpPawns.Clear();
                            TimedForcedExit.tmpPawns.AddRange(from x in mapParent.Map.mapPawns.AllPawns
                                                              where x.Faction == Faction.OfPlayer || x.HostFaction == Faction.OfPlayer
                                                              select x);
                            if (TimedForcedExit.tmpPawns.Any())
                            {
                                if (TimedForcedExit.tmpPawns.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer)))
                                {
                                    Caravan o = CaravanExitMapUtility.ExitMapAndCreateCaravan(TimedForcedExit.tmpPawns, Faction.OfPlayer, mapParent.Tile);
                                    Messages.Message("MessageAutomaticallyReformedCaravan".Translate(), o, MessageTypeDefOf.NeutralEvent);
                                }
                                else
                                {
                                    StringBuilder stringBuilder = new StringBuilder();
                                    for (int i = 0; i < TimedForcedExit.tmpPawns.Count; i++)
                                    {
                                        stringBuilder.AppendLine("    " + TimedForcedExit.tmpPawns[i].LabelCap);
                                    }
                                    Find.LetterStack.ReceiveLetter("LetterLabelPawnsLostDueToMapCountdown".Translate(), "LetterPawnsLostDueToMapCountdown".Translate(stringBuilder.ToString().TrimEndNewlines()), LetterDefOf.NegativeEvent, new GlobalTargetInfo(mapParent.Tile), null);
                                }
                                TimedForcedExit.tmpPawns.Clear();
                            }
                            this.ShowWorldViewIfVisibleMapAboutToBeRemoved(mapParent.Map);
                            Find.WorldObjects.Remove(mapParent);
                        }
                    }
                }
                else
                {
                    this.ticksLeftToForceExitAndRemoveMap = -1;
                }
            }
        }
Ejemplo n.º 5
0
 private bool AnyNonDownedColonistLeftInSourceCaravan(List <Pawn> pawnsToTransfer)
 {
     return(this.transferables.Any((TransferableOneWay x) => x.things.Any(delegate(Thing y)
     {
         Pawn pawn = y as Pawn;
         return pawn != null && CaravanUtility.IsOwner(pawn, Faction.OfPlayer) && !pawn.Downed && !pawnsToTransfer.Contains(pawn);
     })));
 }
Ejemplo n.º 6
0
 public bool IsOwner(Pawn p)
 {
     if (pawns.Contains(p))
     {
         return(CaravanUtility.IsOwner(p, base.Faction));
     }
     return(false);
 }
        public static void RemovePawnFromCaravan(Pawn pawn, Lord lord, bool removeFromDowned = true)
        {
            bool flag = false;

            for (int i = 0; i < lord.ownedPawns.Count; i++)
            {
                Pawn pawn2 = lord.ownedPawns[i];
                if (pawn2 != pawn && CaravanUtility.IsOwner(pawn2, Faction.OfPlayer))
                {
                    flag = true;
                    break;
                }
            }
            bool         flag2        = true;
            TaggedString taggedString = "MessagePawnLostWhileFormingCaravan".Translate(pawn).CapitalizeFirst();

            if (!flag)
            {
                StopFormingCaravan(lord);
                taggedString += " " + "MessagePawnLostWhileFormingCaravan_AllLost".Translate();
            }
            else
            {
                pawn.inventory.UnloadEverything = true;
                if (lord.ownedPawns.Contains(pawn))
                {
                    lord.Notify_PawnLost(pawn, PawnLostCondition.ForcedByPlayerAction);
                    flag2 = false;
                }
                LordJob_FormAndSendCaravan lordJob_FormAndSendCaravan = lord.LordJob as LordJob_FormAndSendCaravan;
                if (lordJob_FormAndSendCaravan != null && lordJob_FormAndSendCaravan.downedPawns.Contains(pawn))
                {
                    if (!removeFromDowned)
                    {
                        flag2 = false;
                    }
                    else
                    {
                        lordJob_FormAndSendCaravan.downedPawns.Remove(pawn);
                    }
                }
                if (pawn.jobs != null)
                {
                    pawn.jobs.EndCurrentJob(JobCondition.Incompletable);
                }
            }
            if (flag2)
            {
                Messages.Message(taggedString, pawn, MessageTypeDefOf.NegativeEvent);
            }
        }
Ejemplo n.º 8
0
 private bool CheckForErrors(List <Pawn> pawns)
 {
     if (!pawns.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer) && !x.Downed))
     {
         Messages.Message("CaravanMustHaveAtLeastOneColonist".Translate(), this.caravan, MessageSound.RejectInput);
         return(false);
     }
     if (!this.AnyNonDownedColonistLeftInSourceCaravan(pawns))
     {
         Messages.Message("SourceCaravanMustHaveAtLeastOneColonist".Translate(), this.caravan, MessageSound.RejectInput);
         return(false);
     }
     return(true);
 }
 public static bool AnyPotentialCaravanOwner(IEnumerable <IThingHolder> pods, Faction faction)
 {
     foreach (IThingHolder pod in pods)
     {
         ThingOwner directlyHeldThings = pod.GetDirectlyHeldThings();
         for (int i = 0; i < directlyHeldThings.Count; i++)
         {
             Pawn pawn = directlyHeldThings[i] as Pawn;
             if (pawn != null && CaravanUtility.IsOwner(pawn, faction))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 10
0
        private bool CheckForErrors(List <Pawn> pawns)
        {
            bool result;

            if (!pawns.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer) && !x.Downed))
            {
                Messages.Message("CaravanMustHaveAtLeastOneColonist".Translate(), this.caravan, MessageTypeDefOf.RejectInput, false);
                result = false;
            }
            else if (!this.AnyNonDownedColonistLeftInSourceCaravan(pawns))
            {
                Messages.Message("SourceCaravanMustHaveAtLeastOneColonist".Translate(), this.caravan, MessageTypeDefOf.RejectInput, false);
                result = false;
            }
            else
            {
                result = true;
            }
            return(result);
        }
Ejemplo n.º 11
0
        public static void RemovePawnFromCaravan(Pawn pawn, Lord lord)
        {
            bool flag = false;

            for (int i = 0; i < lord.ownedPawns.Count; i++)
            {
                Pawn pawn2 = lord.ownedPawns[i];
                if (pawn2 != pawn && CaravanUtility.IsOwner(pawn2, Faction.OfPlayer))
                {
                    flag = true;
                    break;
                }
            }
            bool   flag2 = true;
            string text  = "MessagePawnLostWhileFormingCaravan".Translate(new object[]
            {
                pawn.LabelIndefinite()
            }).CapitalizeFirst();

            if (!flag)
            {
                CaravanFormingUtility.StopFormingCaravan(lord);
                text = text + " " + "MessagePawnLostWhileFormingCaravan_AllLost".Translate();
            }
            else
            {
                pawn.inventory.UnloadEverything = true;
                if (lord.ownedPawns.Contains(pawn))
                {
                    lord.Notify_PawnLost(pawn, PawnLostCondition.ForcedByPlayerAction, null);
                    flag2 = false;
                }
            }
            if (flag2)
            {
                Messages.Message(text, pawn, MessageTypeDefOf.NegativeEvent, true);
            }
        }
Ejemplo n.º 12
0
 public bool IsOwner(Pawn p)
 {
     return(pawns.Contains(p) && CaravanUtility.IsOwner(p, base.Faction));
 }
Ejemplo n.º 13
0
 private static bool <ForceReform> m__2(Pawn x)
 {
     return(CaravanUtility.IsOwner(x, Faction.OfPlayer));
 }
Ejemplo n.º 14
0
 private static bool <CheckForErrors> m__4(Pawn x)
 {
     return(CaravanUtility.IsOwner(x, Faction.OfPlayer) && !x.Downed);
 }