Ejemplo n.º 1
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            Toil gotoCell = Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.OnCell);

            gotoCell.AddPreTickAction(delegate
            {
                if (this.$this.job.exitMapOnArrival && this.$this.pawn.Map.exitMapGrid.IsExitCell(this.$this.pawn.Position))
                {
                    this.$this.TryExitMap();
                }
            });
            gotoCell.FailOn(() => this.$this.job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(this.$this.pawn));
            yield return(gotoCell);

            yield return(new Toil
            {
                initAction = delegate
                {
                    if (this.$this.pawn.mindState != null && this.$this.pawn.mindState.forcedGotoPosition == this.$this.TargetA.Cell)
                    {
                        this.$this.pawn.mindState.forcedGotoPosition = IntVec3.Invalid;
                    }
                    if (this.$this.job.exitMapOnArrival && (this.$this.pawn.Position.OnEdge(this.$this.pawn.Map) || this.$this.pawn.Map.exitMapGrid.IsExitCell(this.$this.pawn.Position)))
                    {
                        this.$this.TryExitMap();
                    }
                },
                defaultCompleteMode = ToilCompleteMode.Instant
            });
        }
Ejemplo n.º 2
0
        public static void ForceReform(MapParent mapParent)
        {
            if (GenHostility.AnyHostileActiveThreatToPlayer(mapParent.Map))
            {
                Messages.Message(Translator.Translate("EnemyOnTheMap"), MessageTypeDefOf.NeutralEvent, false);
                return;
            }

            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)
                    {
                        Find.WorldObjects.Remove(mapParent);
                    }
                }, 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();
            Find.WorldObjects.Remove(mapParent);
        }
Ejemplo n.º 3
0
 private void TryExitMap()
 {
     if (!job.failIfCantJoinOrCreateCaravan || CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn))
     {
         pawn.ExitMap(allowedToJoinOrCreateCaravan: true, CellRect.WholeMap(base.Map).GetClosestEdge(pawn.Position));
     }
 }
Ejemplo n.º 4
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            Toil toil = Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.OnCell);

            toil.AddPreTickAction(delegate
            {
                if (job.exitMapOnArrival && pawn.Map.exitMapGrid.IsExitCell(pawn.Position))
                {
                    TryExitMap();
                }
            });
            toil.FailOn(() => job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn));
            yield return(toil);

            Toil toil2 = new Toil();

            toil2.initAction = delegate
            {
                if (pawn.mindState != null && pawn.mindState.forcedGotoPosition == base.TargetA.Cell)
                {
                    pawn.mindState.forcedGotoPosition = IntVec3.Invalid;
                }
                if (job.exitMapOnArrival && (pawn.Position.OnEdge(pawn.Map) || pawn.Map.exitMapGrid.IsExitCell(pawn.Position)))
                {
                    TryExitMap();
                }
            };
            toil2.defaultCompleteMode = ToilCompleteMode.Instant;
            yield return(toil2);
        }
Ejemplo n.º 5
0
 private void TryExitMap()
 {
     if (!this.job.failIfCantJoinOrCreateCaravan || CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(this.pawn))
     {
         this.pawn.ExitMap(true, CellRect.WholeMap(base.Map).GetClosestEdge(this.pawn.Position));
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Show DialogMenu for confirmation on leaving vehicles behind when forming caravan
        /// </summary>
        /// <param name="__instance"></param>
        /// <param name="___transferables"></param>
        /// <param name="___map"></param>
        /// <param name="___destinationTile"></param>
        /// <param name="__result"></param>
        public static bool ConfirmLeaveVehiclesOnReform(Dialog_FormCaravan __instance, ref List <TransferableOneWay> ___transferables, Map ___map, int ___destinationTile, ref bool __result)
        {
            if (___map.mapPawns.SpawnedPawnsInFaction(Faction.OfPlayer).HasVehicle())
            {
                List <Pawn> pawns          = TransferableUtility.GetPawnsFromTransferables(___transferables);
                List <Pawn> correctedPawns = pawns.Where(p => !(p is VehiclePawn)).ToList();
                string      vehicles       = "";
                foreach (Pawn pawn in pawns.Where(p => p is VehiclePawn))
                {
                    vehicles += pawn.LabelShort;
                }

                Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("LeaveVehicleBehindCaravan".Translate(vehicles), delegate()
                {
                    if (!(bool)AccessTools.Method(typeof(Dialog_FormCaravan), "CheckForErrors").Invoke(__instance, new object[] { correctedPawns }))
                    {
                        return;
                    }
                    AccessTools.Method(typeof(Dialog_FormCaravan), "AddItemsFromTransferablesToRandomInventories").Invoke(__instance, new object[] { correctedPawns });
                    Caravan caravan = CaravanExitMapUtility.ExitMapAndCreateCaravan(correctedPawns, Faction.OfPlayer, __instance.CurrentTile, __instance.CurrentTile, ___destinationTile, 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, false);
                }, false, null));
                __result = true;
                return(false);
            }
            return(true);
        }
        protected override IEnumerable <Toil> MakeNewToils()
        {
            this.FailOnDestroyedOrNull(TargetIndex.A);
            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.ClosestTouch).FailOnSomeonePhysicallyInteracting(TargetIndex.A));

            yield return(Toils_Construct.UninstallIfMinifiable(TargetIndex.A).FailOnSomeonePhysicallyInteracting(TargetIndex.A));

            yield return(Toils_Haul.StartCarryThing(TargetIndex.A));

            Toil toil = Toils_Goto.GotoCell(TargetIndex.B, PathEndMode.OnCell);

            toil.AddPreTickAction(delegate
            {
                if (base.Map.exitMapGrid.IsExitCell(pawn.Position))
                {
                    pawn.ExitMap(allowedToJoinOrCreateCaravan: true, CellRect.WholeMap(base.Map).GetClosestEdge(pawn.Position));
                }
            });
            toil.FailOn(() => job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn));
            yield return(toil);

            Toil toil2 = new Toil();

            toil2.initAction = delegate
            {
                if (pawn.Position.OnEdge(pawn.Map) || pawn.Map.exitMapGrid.IsExitCell(pawn.Position))
                {
                    pawn.ExitMap(allowedToJoinOrCreateCaravan: true, CellRect.WholeMap(base.Map).GetClosestEdge(pawn.Position));
                }
            };
            toil2.FailOn(() => job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn));
            toil2.defaultCompleteMode = ToilCompleteMode.Instant;
            yield return(toil2);
        }
Ejemplo n.º 8
0
        private 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;
            }
            List <Pawn> tmpPawns = new List <Pawn>();

            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();
        }
Ejemplo n.º 9
0
        private bool TryReformCaravan()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!this.CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            this.AddItemsFromTransferablesToRandomInventories(pawnsFromTransferables);
            Caravan caravan = CaravanExitMapUtility.ExitMapAndCreateCaravan(pawnsFromTransferables, Faction.OfPlayer, this.CurrentTile, this.CurrentTile, this.destinationTile, false);

            this.map.Parent.CheckRemoveMapNow();
            string text = "MessageReformedCaravan".Translate();

            if (caravan.pather.Moving && caravan.pather.ArrivalAction != null)
            {
                string text2 = text;
                text = string.Concat(new string[]
                {
                    text2,
                    " ",
                    "MessageFormedCaravan_Orders".Translate(),
                    ": ",
                    caravan.pather.ArrivalAction.Label,
                    "."
                });
            }
            Messages.Message(text, caravan, MessageTypeDefOf.TaskCompletion, false);
            return(true);
        }
Ejemplo n.º 10
0
 private void TryExitMap()
 {
     if (base.job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(base.pawn))
     {
         return;
     }
     base.pawn.ExitMap(true);
 }
Ejemplo n.º 11
0
 public void Notify_ChoseRoute(int destinationTile)
 {
     this.destinationTile      = destinationTile;
     this.startingTile         = CaravanExitMapUtility.BestExitTileToGoTo(destinationTile, this.map);
     this.ticksToArriveDirty   = true;
     this.daysWorthOfFoodDirty = true;
     Messages.Message("MessageChoseRoute".Translate(), MessageTypeDefOf.CautionInput, false);
 }
Ejemplo n.º 12
0
 private bool TryFindExitSpot(List <Pawn> pawns, bool reachableForEveryColonist, out IntVec3 spot)
 {
     CaravanExitMapUtility.GetExitMapEdges(Find.WorldGrid, CurrentTile, startingTile, out var primary, out var secondary);
     if ((!(primary != Rot4.Invalid) || !TryFindExitSpot(pawns, reachableForEveryColonist, primary, out spot)) && (!(secondary != Rot4.Invalid) || !TryFindExitSpot(pawns, reachableForEveryColonist, secondary, out spot)) && !TryFindExitSpot(pawns, reachableForEveryColonist, primary.Rotated(RotationDirection.Clockwise), out spot))
     {
         return(TryFindExitSpot(pawns, reachableForEveryColonist, primary.Rotated(RotationDirection.Counterclockwise), out spot));
     }
     return(true);
 }
Ejemplo n.º 13
0
 public void Notify_ChoseRoute(int destinationTile)
 {
     this.destinationTile = destinationTile;
     startingTile         = CaravanExitMapUtility.BestExitTileToGoTo(destinationTile, map);
     ticksToArriveDirty   = true;
     daysWorthOfFoodDirty = true;
     Messages.Message("MessageChoseRoute".Translate(), MessageTypeDefOf.CautionInput, historical: false);
     soundAppear.PlayOneShotOnCamera();
 }
Ejemplo n.º 14
0
        private void TryExitMap()
        {
            // only allowed to join or create caravan?
            if (job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn))
            {
                return;
            }

            pawn.ExitMap(true, CellRect.WholeMap(Map).GetClosestEdge(pawn.Position));
        }
Ejemplo n.º 15
0
 public override void PostOpen()
 {
     base.PostOpen();
     if (!this.thisWindowInstanceEverOpened)
     {
         this.thisWindowInstanceEverOpened = true;
         this.CalculateAndRecacheTransferables();
         this.startingTile = CaravanExitMapUtility.RandomBestExitTileFrom(this.map);
         PlayerKnowledgeDatabase.KnowledgeDemonstrated(ConceptDefOf.FormCaravan, KnowledgeAmount.Total);
     }
 }
Ejemplo n.º 16
0
 public void Notify_ChoseRoute(int destinationTile)
 {
     this.destinationTile = destinationTile;
     startingTile         = CaravanExitMapUtility.BestExitTileToGoTo(destinationTile, map);
     ticksToArriveDirty   = true;
     daysWorthOfFoodDirty = true;
     soundAppear.PlayOneShotOnCamera();
     if (autoSelectFoodAndMedicine)
     {
         SelectApproximateBestFoodAndMedicine();
     }
 }
            public bool MoveNext()
            {
                uint num = (uint)this.$PC;

                this.$PC = -1;
                switch (num)
                {
                case 0u:
                    gotoCell = Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.OnCell);
                    gotoCell.AddPreTickAction(delegate
                    {
                        if (this.job.exitMapOnArrival && this.pawn.Map.exitMapGrid.IsExitCell(this.pawn.Position))
                        {
                            base.TryExitMap();
                        }
                    });
                    gotoCell.FailOn(() => this.job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(this.pawn));
                    this.$current = gotoCell;
                    if (!this.$disposing)
                    {
                        this.$PC = 1;
                    }
                    return(true);

                case 1u:
                {
                    Toil arrive = new Toil();
                    arrive.initAction = delegate()
                    {
                        if (this.pawn.mindState != null && this.pawn.mindState.forcedGotoPosition == base.TargetA.Cell)
                        {
                            this.pawn.mindState.forcedGotoPosition = IntVec3.Invalid;
                        }
                        if (this.job.exitMapOnArrival && (this.pawn.Position.OnEdge(this.pawn.Map) || this.pawn.Map.exitMapGrid.IsExitCell(this.pawn.Position)))
                        {
                            base.TryExitMap();
                        }
                    };
                    arrive.defaultCompleteMode = ToilCompleteMode.Instant;
                    this.$current = arrive;
                    if (!this.$disposing)
                    {
                        this.$PC = 2;
                    }
                    return(true);
                }

                case 2u:
                    this.$PC = -1;
                    break;
                }
                return(false);
            }
Ejemplo n.º 18
0
 private void TryExitMap()
 {
     if (!job.failIfCantJoinOrCreateCaravan || CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn))
     {
         Messages.Message("VAEE.ReleasingToTheWildMessage".Translate(), MessageTypeDefOf.PositiveEvent);
         var factions = Find.FactionManager.AllFactions.Where(x => factionsToAffect.Contains(x.def));
         foreach (var faction in factions)
         {
             faction.TryAffectGoodwillWith(Faction.OfPlayer, 2, true, false);
         }
         pawn.ExitMap(allowedToJoinOrCreateCaravan: true, CellRect.WholeMap(base.Map).GetClosestEdge(pawn.Position));
     }
 }
Ejemplo n.º 19
0
        public static bool get_AnyPawnBlockingMapRemoval(MapPawns __instance, ref bool __result)
        {
            Faction ofPlayer = Faction.OfPlayer;

            lock (pawnsSpawned(__instance)) {
                for (int index = 0; index < pawnsSpawned(__instance).Count; ++index)
                {
                    if (!pawnsSpawned(__instance)[index].Downed && pawnsSpawned(__instance)[index].IsColonist || pawnsSpawned(__instance)[index].relations != null && pawnsSpawned(__instance)[index].relations.relativeInvolvedInRescueQuest != null)
                    {
                        __result = true;
                        return(false);
                    }
                    if (pawnsSpawned(__instance)[index].Faction == ofPlayer || pawnsSpawned(__instance)[index].HostFaction == ofPlayer)
                    {
                        Job curJob = pawnsSpawned(__instance)[index].CurJob;
                        if (curJob != null && curJob.exitMapOnArrival)
                        {
                            __result = true;
                            return(false);
                        }
                    }
                    if (CaravanExitMapUtility.FindCaravanToJoinFor(pawnsSpawned(__instance)[index]) != null && !pawnsSpawned(__instance)[index].Downed)
                    {
                        __result = true;
                        return(false);
                    }
                }
            }
            List <Thing> thingList = map(__instance).listerThings.ThingsInGroup(ThingRequestGroup.ThingHolder);

            for (int index1 = 0; index1 < thingList.Count; ++index1)
            {
                if (thingList[index1] is IActiveDropPod || thingList[index1] is PawnFlyer || thingList[index1].TryGetComp <CompTransporter>() != null)
                {
                    IThingHolder holder    = (IThingHolder)thingList[index1].TryGetComp <CompTransporter>() ?? (IThingHolder)thingList[index1];
                    List <Thing> tmpThings = new List <Thing>();
                    ThingOwnerUtility.GetAllThingsRecursively(holder, tmpThings, true, (Predicate <IThingHolder>)null);
                    for (int index2 = 0; index2 < tmpThings.Count; ++index2)
                    {
                        if (tmpThings[index2] is Pawn tmpThing && !tmpThing.Dead && (!tmpThing.Downed && tmpThing.IsColonist))
                        {
                            __result = true;
                            return(false);
                        }
                    }
                }
            }
            __result = false;
            return(false);
        }
Ejemplo n.º 20
0
        private bool TryReformCaravan()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!this.CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            this.AddItemsFromTransferablesToRandomInventories(pawnsFromTransferables);
            Caravan o = CaravanExitMapUtility.ExitMapAndCreateCaravan(pawnsFromTransferables, Faction.OfPlayer, this.CurrentTile);

            this.map.info.parent.CheckRemoveMapNow();
            Messages.Message("MessageReformedCaravan".Translate(), o, MessageSound.Benefit);
            return(true);
        }
Ejemplo n.º 21
0
        public override 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);
                    }
                }, mapAboutToBeRemoved: true);
                Find.WindowStack.Add(window);
                for (int i = window.transferables.Count - 1; i >= 0; i--)
                {
                    TransferableOneWay t = window.transferables[i];
                    if (t != null)
                    {
                        if (t.AnyThing != null)
                        {
                            if (t.AnyThing.Faction != null && t.AnyThing.Faction == Faction)
                            {
                                window.transferables.Remove(t);
                            }
                        }
                    }
                }
                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);
            }
        }
Ejemplo n.º 22
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);
        }
Ejemplo n.º 23
0
        private void DrawConfig(Rect rect)
        {
            Rect rect2 = new Rect(0f, rect.y, rect.width, 30f);

            Text.Font = GameFont.Medium;
            Widgets.Label(rect2, "ExitDirection".Translate());
            Text.Font = GameFont.Small;
            List <int> list = CaravanExitMapUtility.AvailableExitTilesAt(this.map);

            if (list.Any())
            {
                for (int i = 0; i < list.Count; i++)
                {
                    Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(this.CurrentTile, list[i]);
                    float         y   = rect.y;
                    float         num = (float)i;
                    Vector2       exitDirectionRadioSize = this.ExitDirectionRadioSize;
                    float         num2 = (float)(y + num * exitDirectionRadioSize.y + 30.0 + 4.0);
                    float         x    = rect.x;
                    float         y2   = num2;
                    Vector2       exitDirectionRadioSize2 = this.ExitDirectionRadioSize;
                    float         x2 = exitDirectionRadioSize2.x;
                    Vector2       exitDirectionRadioSize3 = this.ExitDirectionRadioSize;
                    Rect          rect3     = new Rect(x, y2, x2, exitDirectionRadioSize3.y);
                    Vector2       vector    = Find.WorldGrid.LongLatOf(list[i]);
                    string        labelText = "ExitDirectionRadioButtonLabel".Translate(direction8WayFromTo.LabelShort(), vector.y.ToStringLatitude(), vector.x.ToStringLongitude());
                    if (Widgets.RadioButtonLabeled(rect3, labelText, this.startingTile == list[i]))
                    {
                        this.startingTile = list[i];
                    }
                }
            }
            else
            {
                GUI.color = Color.gray;
                Widgets.Label(new Rect(rect.x, (float)(rect.y + 30.0 + 4.0), rect.width, 100f), "NoCaravanExitDirectionAvailable".Translate());
                GUI.color = Color.white;
            }
        }
Ejemplo n.º 24
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            {
                var gotoCell = Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.OnCell);
                gotoCell.AddPreTickAction(() =>
                {
                    // we check exit grid every tick to make sure the pawn leaves the map as soon as possible
                    if (job.exitMapOnArrival && pawn.Map.exitMapGrid.IsExitCell(pawn.Position))
                    {
                        TryExitMap();
                    }
                });

                // only allowed to join or create caravan?
                gotoCell.FailOn(() => job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn));

                yield return(gotoCell);
            }

            {
                Toil arrive = new Toil();
                arrive.initAction = () =>
                {
                    // check if we arrived to our forced goto position
                    if (pawn.mindState != null && pawn.mindState.forcedGotoPosition == TargetA.Cell)
                    {
                        pawn.mindState.forcedGotoPosition = IntVec3.Invalid;
                    }

                    if (job.exitMapOnArrival && (pawn.Position.OnEdge(pawn.Map) || pawn.Map.exitMapGrid.IsExitCell(pawn.Position)))
                    {
                        TryExitMap();
                    }
                };

                arrive.defaultCompleteMode = ToilCompleteMode.Instant;
                yield return(arrive);
            }
        }
Ejemplo n.º 25
0
        private bool DebugTryFormCaravanInstantly()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!pawnsFromTransferables.Any((Pawn x) => CaravanUtility.IsOwner(x, Faction.OfPlayer)))
            {
                Messages.Message("CaravanMustHaveAtLeastOneColonist".Translate(), MessageTypeDefOf.RejectInput, false);
                return(false);
            }
            this.AddItemsFromTransferablesToRandomInventories(pawnsFromTransferables);
            int num = this.startingTile;

            if (num < 0)
            {
                num = CaravanExitMapUtility.RandomBestExitTileFrom(this.map);
            }
            if (num < 0)
            {
                num = this.CurrentTile;
            }
            CaravanFormingUtility.FormAndCreateCaravan(pawnsFromTransferables, Faction.OfPlayer, this.CurrentTile, num, this.destinationTile);
            return(true);
        }
Ejemplo n.º 26
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            Toil gotoCell = Toils_Goto.GotoCell(TargetIndex.A, PathEndMode.OnCell);

            gotoCell.AddPreTickAction(delegate
            {
                if (((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0038: stateMachine*/)._0024this.job.exitMapOnArrival && ((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0038: stateMachine*/)._0024this.pawn.Map.exitMapGrid.IsExitCell(((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0038: stateMachine*/)._0024this.pawn.Position))
                {
                    ((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0038: stateMachine*/)._0024this.TryExitMap();
                }
            });
            gotoCell.FailOn(() => ((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_004f: stateMachine*/)._0024this.job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_004f: stateMachine*/)._0024this.pawn));
            yield return(gotoCell);

            /*Error: Unable to find new state assignment for yield return*/;
        }
Ejemplo n.º 27
0
        public static bool get_AnyPawnBlockingMapRemoval(MapPawns __instance, ref bool __result)
        {
            Faction     ofPlayer     = Faction.OfPlayer;
            List <Pawn> pawnsSpawned = pawnsSpawnedFieldRef(__instance);

            for (int i = 0; i < pawnsSpawned.Count; i++)
            {
                if (!pawnsSpawned[i].Downed && pawnsSpawned[i].IsColonist)
                {
                    __result = true;
                    return(false);
                }

                if (pawnsSpawned[i].relations != null && pawnsSpawned[i].relations.relativeInvolvedInRescueQuest != null)
                {
                    __result = true;
                    return(false);
                }

                if (pawnsSpawned[i].Faction == ofPlayer || pawnsSpawned[i].HostFaction == ofPlayer)
                {
                    Job curJob = pawnsSpawned[i].CurJob;
                    if (curJob != null && curJob.exitMapOnArrival)
                    {
                        __result = true;
                        return(false);
                    }
                }

                if (CaravanExitMapUtility.FindCaravanToJoinFor(pawnsSpawned[i]) != null && !pawnsSpawned[i].Downed)
                {
                    __result = true;
                    return(false);
                }
            }

            List <Thing> list = mapFieldRef(__instance).listerThings.ThingsInGroup(ThingRequestGroup.ThingHolder);

            for (int j = 0; j < list.Count; j++)
            {
                if (!(list[j] is IActiveDropPod) && !(list[j] is PawnFlyer) && list[j].TryGetComp <CompTransporter>() == null)
                {
                    continue;
                }

                IThingHolder thingHolder = list[j].TryGetComp <CompTransporter>();
                IThingHolder holder      = thingHolder ?? ((IThingHolder)list[j]);
                if (tmpThings == null)
                {
                    tmpThings = new List <Thing>();
                }
                else
                {
                    tmpThings.Clear();
                }
                ThingOwnerUtility.GetAllThingsRecursively(holder, tmpThings);
                for (int k = 0; k < tmpThings.Count; k++)
                {
                    Pawn pawn = tmpThings[k] as Pawn;
                    if (pawn != null && !pawn.Dead && !pawn.Downed && pawn.IsColonist)
                    {
                        tmpThings.Clear();
                        __result = true;
                        return(false);
                    }
                }
            }

            //tmpThings.Clear();
            __result = false;
            return(false);
        }
Ejemplo n.º 28
0
 protected override bool Satisfied(Pawn pawn)
 {
     return(CaravanExitMapUtility.FindCaravanToJoinFor(pawn) != null);
 }
        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);
                }
            }
        }
Ejemplo n.º 30
0
        public bool Run()
        {
            /*
             * GameUtils.ShowDialodOKCancel("asdasda",
             *  () => Log.Message("Test OK"),
             *  () => Log.Message("Test Cancel")
             *  );
             * return true;
             */
            /*
             * var formm = new Dialog_Exchenge(Find.Maps[0]);
             * Find.WindowStack.Add(formm);
             * return true;
             * // */
            return(false);

            /*
             * var lll = ScenarioLister.ScenariosInCategory(ScenarioCategory.FromDef);
             *
             * File.WriteAllText(Loger.PathLog + @"ScenarioLister.txt", TextObj(lll), Encoding.UTF8);
             * return true;
             */
            try
            {
                Log.Message("DevelopTest Run");
                Loger.Log("");
                Loger.Log("DevelopTest Run");

                var pawns = Find.WorldPawns.AllPawnsAlive.ToList();

                //Fedon,Huntsman,Ally,Lilith,Tater,Jesse,Kentucky
                //Log.Message(string.Join(",", pawns.Select(p => p.NameStringShort).ToArray()));

                var pawn = pawns.Where(p => p.Name.ToStringShort == "Huntsman").FirstOrDefault();
                File.WriteAllText(Loger.PathLog + @"Huntsman.txt", TextObj(pawn), Encoding.UTF8);

                var   msg     = "";
                var   map     = Find.Maps[0];
                var   pawnsMy = map.mapPawns.AllPawnsSpawned.First();
                Thing thinXZ;
                var   cell = GameUtils.GetTradeCell(map);

                var gx = new GameXMLUtils();
                //var testPawn = Scribe.saver.DebugOutputFor(pawns[0]);
                var testPawn = gx.ToXml(pawnsMy);
                File.WriteAllText(@"c:\World\testPawn.xml", testPawn);

                gx.StartFromXml(@"c:\World\test.xml");
                var thin0 = gx.Test <Thing>();
                //PawnComponentsUtility.CreateInitialComponents((Pawn)thin0);
                gx.Finish();

                thin0.ThingID += "555";
                if (thin0 is Pawn)
                {
                    var refugee = (Pawn)thin0;
                    GenSpawn.Spawn(refugee, cell, map);
                    //refugee.SetFaction(Faction.OfPlayer, null);
                    refugee.PostMapInit();  //?
                    //map.mapPawns.UpdateRegistryForPawn((Pawn)thin0);
                }
                else
                {
                    GenDrop.TryDropSpawn(thin0, cell, map, ThingPlaceMode.Near, out thinXZ, null);
                }


                //MapComponentUtility.FinalizeInit(map); //????
                return(true);

                File.WriteAllText(Loger.PathLog + @"map.txt", TextObj(map, false), Encoding.UTF8);

                List <Thing>       listThing = CaravanFormingUtility.AllReachableColonyItems(Find.Maps[0]);
                Dialog_TradeOnline form      = null;
                form = new Dialog_TradeOnline(listThing, "OCity_DevTest_Test".Translate(), 3, () =>
                {
                    var select = form.GetSelect();
                    Thing thin = null;
                    var thins  = select.Select(p =>
                    {
                        return(ThingEntry.CreateEntry(thin = p.Key, p.Value));
                    }).ToList();
                    var outText = TextObj(thins, true);
                    File.WriteAllText(Loger.PathLog + @"Car.txt", outText, Encoding.UTF8);

                    var caravan = Find.WorldObjects.Caravans[0];
                    foreach (var t in select)
                    {
                        //t.Key

                        //ThingEntry the = new ThingEntry(t.Key, t.Value);
                        ///*
                        //thin = the.CreateThing();
                        //var p = CaravanInventoryUtility.FindPawnToMoveInventoryTo(thin, caravan.PawnsListForReading, null);
                        //p.inventory.innerContainer.TryAdd(thin, true);
                        //*/
                        //thin = the.CreateThing();
                        GenDrop.TryDropSpawn(thin, cell, map, ThingPlaceMode.Near, out thinXZ, null);
                    }

                    /*
                     * File.WriteAllText(Loger.PathLog + @"ThingIn.txt", TextObj(thin, true), Encoding.UTF8);
                     * //if (thin.Spawned) thin.DeSpawn();
                     * ThingEntry the = new ThingEntry(thin, 1);
                     * thin = the.CreateThing();
                     * GenDrop.TryDropSpawn(thin, GameUtils.GetTradeCell(map), map, ThingPlaceMode.Near, out thinXZ, null);
                     * File.WriteAllText(Loger.PathLog + @"ThingXZ.txt", TextObj(thinXZ, true), Encoding.UTF8);
                     * File.WriteAllText(Loger.PathLog + @"ThingOut.txt", TextObj(thin, true), Encoding.UTF8);
                     */
                    /*
                     * if (thin != null)
                     * {
                     *  File.WriteAllText(Loger.PathLog + @"ThingIn.txt", TextObj(thin, true), Encoding.UTF8);
                     *  ThingEntry the = new ThingEntry(thin, 1);
                     *  File.WriteAllText(Loger.PathLog + @"ThingEntry.txt", TextObj(the, true), Encoding.UTF8);
                     *  File.WriteAllText(Loger.PathLog + @"ThingOut.txt", TextObj(the.CreateThing(), true), Encoding.UTF8);
                     * }*/
                });
                Find.WindowStack.Add(form);
                return(true);

                pawn = pawns.Where(p => p.Name.ToStringShort == "Jesse").FirstOrDefault();

                //msg += Find.Maps.Count.ToString() + Environment.NewLine;


                var pawnText = TextObj(pawn, true);
                File.WriteAllText(Loger.PathLog + @"Car.txt", pawnText, Encoding.UTF8);

                int directionTile = CaravanExitMapUtility.RandomBestExitTileFrom(Find.Maps[0]);
                //Find.Maps[0].Tile;

                //var destroyedFactionBase = (CaravanOnline)WorldObjectMaker.MakeWorldObject(ModDefOf.CaravanOnline);
                var destroyedFactionBase = (CaravanOnline)WorldObjectMaker.MakeWorldObject(ModDefOf.BaseOnline);
                destroyedFactionBase.Tile          = directionTile;
                destroyedFactionBase.OnlineWObject = new Model.WorldObjectEntry()
                {
                    LoginOwner = "OCity_DevTest_NameTestPlayer".Translate()
                };
                destroyedFactionBase.SetFaction(Faction.OfPlayer);
                Find.WorldObjects.Add(destroyedFactionBase);

                var cars    = Find.WorldObjects.AllWorldObjects.Where(o => o is Caravan).ToList();
                var seeText = TextObj(cars);
                File.WriteAllText(Loger.PathLog + @"See.txt", seeText, Encoding.UTF8);

                Loger.Log(msg);
            }
            catch (Exception e)
            {
                Log.Error(e.ToString());
            }
            return(true);
        }