Exemplo n.º 1
0
        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();
 }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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);
            }
        }