Beispiel #1
0
        private bool TryFormAndSendCaravan()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(transferables);

            if (!CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(CurrentTile, startingTile);

            if (!TryFindExitSpot(pawnsFromTransferables, reachableForEveryColonist: true, out IntVec3 spot))
            {
                if (!TryFindExitSpot(pawnsFromTransferables, reachableForEveryColonist: false, out spot))
                {
                    Messages.Message("CaravanCouldNotFindExitSpot".Translate(direction8WayFromTo.LabelShort()), MessageTypeDefOf.RejectInput, historical: false);
                    return(false);
                }
                Messages.Message("CaravanCouldNotFindReachableExitSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(spot, map), MessageTypeDefOf.CautionInput, historical: false);
            }
            if (!TryFindRandomPackingSpot(spot, out IntVec3 packingSpot))
            {
                Messages.Message("CaravanCouldNotFindPackingSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(spot, map), MessageTypeDefOf.RejectInput, historical: false);
                return(false);
            }
            CaravanFormingUtility.StartFormingCaravan((from x in pawnsFromTransferables
                                                       where !x.Downed
                                                       select x).ToList(), (from x in pawnsFromTransferables
                                                                            where x.Downed
                                                                            select x).ToList(), Faction.OfPlayer, transferables, packingSpot, spot, startingTile, destinationTile);
            Messages.Message("CaravanFormationProcessStarted".Translate(), pawnsFromTransferables[0], MessageTypeDefOf.PositiveEvent, historical: false);
            return(true);
        }
Beispiel #2
0
 private void SendCaravan()
 {
     caravanSent = true;
     CaravanFormingUtility.FormAndCreateCaravan(lord.ownedPawns.Concat(from x in downedPawns
                                                                       where JobGiver_PrepareCaravan_GatherDownedPawns.IsDownedPawnNearExitPoint(x, exitSpot)
                                                                       select x), lord.faction, base.Map.Tile, startingTile, destinationTile);
 }
Beispiel #3
0
        public IEnumerable <Gizmo> GetGizmos()
        {
            if (pawn.IsColonistPlayerControlled)
            {
                using (IEnumerator <Gizmo> enumerator = priorityWork.GetGizmos().GetEnumerator())
                {
                    if (enumerator.MoveNext())
                    {
                        Gizmo g2 = enumerator.Current;
                        yield return(g2);

                        /*Error: Unable to find new state assignment for yield return*/;
                    }
                }
            }
            using (IEnumerator <Gizmo> enumerator2 = CaravanFormingUtility.GetGizmos(pawn).GetEnumerator())
            {
                if (enumerator2.MoveNext())
                {
                    Gizmo g = enumerator2.Current;
                    yield return(g);

                    /*Error: Unable to find new state assignment for yield return*/;
                }
            }
            yield break;
IL_0169:
            /*Error near IL_016a: Unexpected return in MoveNext()*/;
        }
Beispiel #4
0
        private bool TryFormAndSendCaravan()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!this.CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(this.CurrentTile, this.startingTile);
            IntVec3       intVec;

            if (!this.TryFindExitSpot(pawnsFromTransferables, true, out intVec))
            {
                if (!this.TryFindExitSpot(pawnsFromTransferables, false, out intVec))
                {
                    Messages.Message("CaravanCouldNotFindExitSpot".Translate(direction8WayFromTo.LabelShort()), MessageTypeDefOf.RejectInput, false);
                    return(false);
                }
                Messages.Message("CaravanCouldNotFindReachableExitSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(intVec, this.map, false), MessageTypeDefOf.CautionInput, false);
            }
            IntVec3 meetingPoint;

            if (!this.TryFindRandomPackingSpot(intVec, out meetingPoint))
            {
                Messages.Message("CaravanCouldNotFindPackingSpot".Translate(direction8WayFromTo.LabelShort()), new GlobalTargetInfo(intVec, this.map, false), MessageTypeDefOf.RejectInput, false);
                return(false);
            }
            CaravanFormingUtility.StartFormingCaravan((from x in pawnsFromTransferables
                                                       where !x.Downed
                                                       select x).ToList <Pawn>(), (from x in pawnsFromTransferables
                                                                                   where x.Downed
                                                                                   select x).ToList <Pawn>(), Faction.OfPlayer, this.transferables, meetingPoint, intVec, this.startingTile, this.destinationTile);
            Messages.Message("CaravanFormationProcessStarted".Translate(), pawnsFromTransferables[0], MessageTypeDefOf.PositiveEvent, false);
            return(true);
        }
 public override void Notify_PawnLost(Pawn p, PawnLostCondition condition)
 {
     ReachabilityUtility.ClearCache();
     if (!this.caravanSent)
     {
         CaravanFormingUtility.RemovePawnFromCaravan(p, this.lord);
     }
 }
Beispiel #6
0
 private void AddItemsToTransferables()
 {
     var list = CaravanFormingUtility.AllReachableColonyItems(map);
     for (var i = 0; i < list.Count; i++)
     {
         AddToTransferables(list[i]);
     }
 }
Beispiel #7
0
        private void AddItemsToTransferables()
        {
            List <Thing> list = CaravanFormingUtility.AllReachableColonyItems(vehicle.Map, VehicleMod.settings.showAllCargoItems, false, false);

            for (int i = 0; i < list.Count; i++)
            {
                AddToTransferables(list[i], false);
            }
        }
        private void AddItemsToTransferables()
        {
            var list = CaravanFormingUtility.AllReachableColonyItems(map);

            foreach (var thing in list)
            {
                AddToTransferables(thing);
            }
        }
Beispiel #9
0
        public static List <Thing> GetAllThings(Map map)
        {
            var goods = CaravanFormingUtility.AllReachableColonyItems(map).ToList().Concat(
                map.mapPawns.AllPawnsSpawned
                .Cast <Thing>()
                ).ToList();

            return(goods);
        }
        private void AddPawnsToTransferables()
        {
            List <Pawn> list = CaravanFormingUtility.AllSendablePawns(this.map, false, false, false, false);

            for (int i = 0; i < list.Count; i++)
            {
                this.AddToTransferables(list[i]);
            }
        }
        private void AddItemsToTransferables()
        {
            List <Thing> list = CaravanFormingUtility.AllReachableColonyItems(this.map, false, false, false);

            for (int i = 0; i < list.Count; i++)
            {
                this.AddToTransferables(list[i]);
            }
        }
Beispiel #12
0
 private void AddPawnsToTransferables()
 {
     var list = CaravanFormingUtility.AllSendablePawns(map);
     for (var i = 0; i < list.Count; i++)
     {
         if (list[i].TryGetComp<CompLaunchablePawn>() == null)
         {
             AddToTransferables(list[i]);
         }
     }
 }
Beispiel #13
0
 public static bool CustomOptionsPawnsToTransportOverride(List<CompTransporter> ___transporters, Map ___map, Dialog_LoadTransporters __instance)
 {
   if (___transporters.Any(x => x.parent.TryGetComp<CompLaunchableSRTS>() != null))
   {
     List<Pawn> pawnlist = CaravanFormingUtility.AllSendablePawns(___map, SRTSMod.mod.settings.allowEvenIfDowned, false, SRTSMod.mod.settings.allowEvenIfPrisonerUnsecured, SRTSMod.mod.settings.allowCapturablePawns);
     foreach (Pawn p in pawnlist)
       AccessTools.Method(type: typeof(Dialog_LoadTransporters), name: "AddToTransferables").Invoke(__instance, new object[] { p });
     return false;
   }
   return true;
 }
        private void AddPawnsToTransferables()
        {
            var list = CaravanFormingUtility.AllSendablePawns(map);

            foreach (var pawn in list)
            {
                if (pawn.TryGetComp <CompLaunchablePawn>() == null)
                {
                    AddToTransferables(pawn);
                }
            }
        }
        private void AddPawnsToTransferables()
        {
            List <Pawn> list = CaravanFormingUtility.AllSendablePawns(this.map, false, false);

            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].TryGetComp <CompLaunchablePawn>() == null)
                {
                    this.AddToTransferables(list[i]);
                }
            }
        }
Beispiel #16
0
        private void AddPawnsToTransferables()
        {
            List <Pawn> list = CaravanFormingUtility.AllSendablePawns(this.map, false, false, false, false);

            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].IsPrisonerInPrisonCell() && list[i].MentalStateDef == null)
                {
                    this.AddToTransferables(list[i]);
                }
            }
        }
Beispiel #17
0
 public override void Notify_PawnLost(Pawn p, PawnLostCondition condition)
 {
     base.Notify_PawnLost(p, condition);
     ReachabilityUtility.ClearCacheFor(p);
     if (!this.caravanSent)
     {
         if (condition == PawnLostCondition.IncappedOrKilled && p.Downed)
         {
             this.downedPawns.Add(p);
         }
         CaravanFormingUtility.RemovePawnFromCaravan(p, this.lord, false);
     }
 }
        public static IEnumerable <Thing> AllSendableItems_NewTmp(List <CompTransporter> transporters, Map map, bool autoLoot)
        {
            List <Thing> items   = CaravanFormingUtility.AllReachableColonyItems(map, canMinify: autoLoot, allowEvenIfOutsideHomeArea: autoLoot, allowEvenIfReserved: transporters[0].Props.canChangeAssignedThingsAfterStarting && transporters[0].LoadingInProgressOrReadyToLaunch);
            CompShuttle  shuttle = transporters[0].parent.TryGetComp <CompShuttle>();

            for (int i = 0; i < items.Count; i++)
            {
                if (shuttle == null || shuttle.IsRequired(items[i]) || shuttle.IsAllowed(items[i]))
                {
                    yield return(items[i]);
                }
            }
        }
        public static IEnumerable <Pawn> AllSendablePawns(List <CompTransporter> transporters, Map map)
        {
            CompShuttle shuttle = transporters[0].parent.TryGetComp <CompShuttle>();
            int         allowLoadAndEnterTransportersLordForGroupID = (transporters[0].Props.canChangeAssignedThingsAfterStarting && transporters[0].LoadingInProgressOrReadyToLaunch) ? transporters[0].groupID : (-1);
            List <Pawn> pawns = CaravanFormingUtility.AllSendablePawns(map, allowEvenIfDowned: true, allowEvenIfInMentalState: false, allowEvenIfPrisonerNotSecure: false, allowCapturableDownedPawns: false, shuttle != null, allowLoadAndEnterTransportersLordForGroupID);

            for (int i = 0; i < pawns.Count; i++)
            {
                if (shuttle == null || shuttle.IsRequired(pawns[i]) || shuttle.IsAllowed(pawns[i]))
                {
                    yield return(pawns[i]);
                }
            }
        }
Beispiel #20
0
 public IEnumerable <Gizmo> GetGizmos()
 {
     if (this.pawn.IsColonistPlayerControlled)
     {
         foreach (Gizmo g in this.priorityWork.GetGizmos())
         {
             yield return(g);
         }
     }
     foreach (Gizmo g2 in CaravanFormingUtility.GetGizmos(this.pawn))
     {
         yield return(g2);
     }
 }
        public static IEnumerable <Pawn> AllSendablePawns_NewTmp(List <CompTransporter> transporters, Map map, bool autoLoot)
        {
            CompShuttle shuttle = transporters[0].parent.TryGetComp <CompShuttle>();
            int         allowLoadAndEnterTransportersLordForGroupID = ((transporters[0].Props.canChangeAssignedThingsAfterStarting && transporters[0].LoadingInProgressOrReadyToLaunch) ? transporters[0].groupID : (-1));
            bool        allowLodgers = shuttle != null;
            List <Pawn> pawns        = CaravanFormingUtility.AllSendablePawns(map, allowEvenIfDowned: true, autoLoot, autoLoot, autoLoot, allowLodgers, allowLoadAndEnterTransportersLordForGroupID);

            for (int i = 0; i < pawns.Count; i++)
            {
                if (shuttle == null || shuttle.IsRequired(pawns[i]) || shuttle.IsAllowed(pawns[i]))
                {
                    yield return(pawns[i]);
                }
            }
        }
Beispiel #22
0
        public void ResolveSeatingAssignments()
        {
            foreach (VehiclePawn vehicle in vehicles)
            {
                if (vehicleAssigned.Where(k => k.Value.First == vehicle).Select(p => p.Key).Count() < vehicle.PawnCountToOperateLeft)
                {
                    if (!AssignSeats(vehicle))
                    {
                        Messages.Message("VehicleCaravanCanceled".Translate(), MessageTypeDefOf.NeutralEvent);
                        CaravanFormingUtility.StopFormingCaravan(lord);
                        return;
                    }
                }
            }

            AssignRemainingPawns();
        }
Beispiel #23
0
        private void AddItemsToTransferables()
        {
            // List<Thing> list = CaravanFormingUtility.AllReachableColonyItems(this.map, false, false);

            List <Thing> list = CaravanFormingUtility.AllReachableColonyItems(this.map, false, isPlayerBase);

            for (int i = 0; i < list.Count; i++)
            {
                int   alreadyIn      = 0;
                Thing thingAlreadyIn = this.ship.GetDirectlyHeldThings().FirstOrDefault(x => x == list[i]);
                if (thingAlreadyIn != null)
                {
                    alreadyIn = thingAlreadyIn.stackCount;
                }
                this.AddToTransferables(list[i], alreadyIn);
            }
        }
        private void AddPawnsToTransferables()
        {
            List <Pawn> list = CaravanFormingUtility.AllSendablePawns(this.map, false, false, false, false);

            for (int i = 0; i < list.Count; i++)
            {
                this.AddToTransferables(list[i]);
            }
            /* Debugging */

            /*foreach (Pawn p in this.map.mapPawns.AllPawnsSpawned.Where(x => x.Faction == Faction.OfPlayer))
             * {
             *  Log.Message("Testing: " + p.LabelShort);
             *  Log.Message("DownCheck: " + !p.Downed + " | MentalCheck: " + !p.InMentalState + " | PrisonerCheck: " + (p.IsPrisonerOfColony || p.Faction == Faction.OfPlayer) + " | LordCheck " + (p.GetLord() is null || p.GetLord().LordJob is LordJob_VoluntarilyJoinable));
             *  Log.Message("-------------");
             * }
             * Log.Message("=================");*/
        }
Beispiel #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(), MessageSound.RejectInput);
                return(false);
            }
            this.AddItemsFromTransferablesToRandomInventories(pawnsFromTransferables);
            int currentTile = this.startingTile;

            if (currentTile < 0)
            {
                currentTile = this.CurrentTile;
            }
            CaravanFormingUtility.FormAndCreateCaravan(pawnsFromTransferables, Faction.OfPlayer, this.CurrentTile, currentTile);
            return(true);
        }
Beispiel #26
0
        private void AddItemsToTransferables()
        {
            List <Thing> list = CaravanFormingUtility.AllReachableColonyItems(this.map, this.reform, this.reform);

            for (int i = 0; i < list.Count; i++)
            {
                this.AddToTransferables(list[i], false);
            }
            if (this.AutoStripCorpses)
            {
                for (int j = 0; j < list.Count; j++)
                {
                    Corpse corpse = list[j] as Corpse;
                    if (corpse != null)
                    {
                        this.AddCorpseInventoryAndGearToTransferables(corpse);
                    }
                }
            }
        }
Beispiel #27
0
        private void AddItemsToTransferables()
        {
            List <Thing> list = CaravanFormingUtility.AllReachableColonyItems(map, reform, reform, reform);

            for (int i = 0; i < list.Count; i++)
            {
                AddToTransferables(list[i]);
            }
            if (AutoStripSpawnedCorpses)
            {
                for (int j = 0; j < list.Count; j++)
                {
                    if (list[j].Spawned)
                    {
                        TryAddCorpseInventoryAndGearToTransferables(list[j]);
                    }
                }
            }
            if (!ListPlayerPawnsInventorySeparately)
            {
                return;
            }
            List <Pawn> list2 = AllSendablePawns(map, reform);

            for (int k = 0; k < list2.Count; k++)
            {
                if (!CanListInventorySeparately(list2[k]))
                {
                    continue;
                }
                ThingOwner <Thing> innerContainer = list2[k].inventory.innerContainer;
                for (int l = 0; l < innerContainer.Count; l++)
                {
                    AddToTransferables(innerContainer[l], setToTransferMax: true);
                    if (AutoStripSpawnedCorpses && innerContainer[l].Spawned)
                    {
                        TryAddCorpseInventoryAndGearToTransferables(innerContainer[l]);
                    }
                }
            }
        }
        public IEnumerable <Gizmo> GetGizmos()
        {
            _003CGetGizmos_003Ec__Iterator0 _003CGetGizmos_003Ec__Iterator = (_003CGetGizmos_003Ec__Iterator0) /*Error near IL_0038: stateMachine*/;

            using (IEnumerator <Gizmo> enumerator = this.priorityWork.GetGizmos().GetEnumerator())
            {
                if (enumerator.MoveNext())
                {
                    Gizmo g = enumerator.Current;
                    yield return(g);

                    /*Error: Unable to find new state assignment for yield return*/;
                }
            }
            Lord lord = this.pawn.GetLord();

            if (lord == null)
            {
                yield break;
            }
            if (!(lord.LordJob is LordJob_FormAndSendCaravan))
            {
                yield break;
            }
            yield return((Gizmo) new Command_Action
            {
                defaultLabel = "CommandCancelFormingCaravan".Translate(),
                defaultDesc = "CommandCancelFormingCaravanDesc".Translate(),
                icon = TexCommand.ClearPrioritizedWork,
                activateSound = SoundDefOf.TickLow,
                action = delegate
                {
                    CaravanFormingUtility.StopFormingCaravan(lord);
                },
                hotKey = KeyBindingDefOf.DesignatorCancel
            });

            /*Error: Unable to find new state assignment for yield return*/;
IL_01bf:
            /*Error near IL_01c0: Unexpected return in MoveNext()*/;
        }
Beispiel #29
0
        public static bool Prefix(Dialog_LoadTransporters __instance)
        {
            Traverse traverse = Traverse.Create((object)__instance);

            foreach (ThingComp thingComp in traverse.Field("transporters").GetValue <List <CompTransporter> >())
            {
                if (thingComp.parent.TryGetComp <CompLaunchableHelicopter>() != null)
                {
                    List <Pawn> pawnList = CaravanFormingUtility.AllSendablePawns(traverse.Field("map").GetValue <Map>(), true, true, true, true);
                    for (int index = 0; index < pawnList.Count; ++index)
                    {
                        __instance.GetType().GetMethod("AddToTransferables", BindingFlags.Instance | BindingFlags.NonPublic).Invoke((object)__instance, new object[1]
                        {
                            (object)pawnList[index]
                        });
                    }
                    return(false);
                }
            }
            return(true);
        }
Beispiel #30
0
        private bool TryFormAndSendCaravan()
        {
            List <Pawn> pawnsFromTransferables = TransferableUtility.GetPawnsFromTransferables(this.transferables);

            if (!this.CheckForErrors(pawnsFromTransferables))
            {
                return(false);
            }
            Direction8Way direction8WayFromTo = Find.WorldGrid.GetDirection8WayFromTo(this.CurrentTile, this.startingTile);
            IntVec3       intVec;

            if (!this.TryFindExitSpot(pawnsFromTransferables, true, out intVec))
            {
                if (!this.TryFindExitSpot(pawnsFromTransferables, false, out intVec))
                {
                    Messages.Message("CaravanCouldNotFindExitSpot".Translate(new object[]
                    {
                        direction8WayFromTo.LabelShort()
                    }), MessageSound.RejectInput);
                    return(false);
                }
                Messages.Message("CaravanCouldNotFindReachableExitSpot".Translate(new object[]
                {
                    direction8WayFromTo.LabelShort()
                }), new GlobalTargetInfo(intVec, this.map, false), MessageSound.Negative);
            }
            IntVec3 meetingPoint;

            if (!this.TryFindRandomPackingSpot(intVec, out meetingPoint))
            {
                Messages.Message("CaravanCouldNotFindPackingSpot".Translate(new object[]
                {
                    direction8WayFromTo.LabelShort()
                }), new GlobalTargetInfo(intVec, this.map, false), MessageSound.RejectInput);
                return(false);
            }
            CaravanFormingUtility.StartFormingCaravan(pawnsFromTransferables, Faction.OfPlayer, this.transferables, meetingPoint, intVec, this.startingTile);
            Messages.Message("CaravanFormationProcessStarted".Translate(), pawnsFromTransferables[0], MessageSound.Benefit);
            return(true);
        }