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 }); }
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); }
private void TryExitMap() { if (!job.failIfCantJoinOrCreateCaravan || CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(pawn)) { pawn.ExitMap(allowedToJoinOrCreateCaravan: true, CellRect.WholeMap(base.Map).GetClosestEdge(pawn.Position)); } }
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); }
private void TryExitMap() { if (!this.job.failIfCantJoinOrCreateCaravan || CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(this.pawn)) { this.pawn.ExitMap(true, CellRect.WholeMap(base.Map).GetClosestEdge(this.pawn.Position)); } }
/// <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); }
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(); }
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); }
private void TryExitMap() { if (base.job.failIfCantJoinOrCreateCaravan && !CaravanExitMapUtility.CanExitMapAndJoinOrCreateCaravanNow(base.pawn)) { return; } base.pawn.ExitMap(true); }
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); }
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); }
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(); }
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)); }
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); } }
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); }
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)); } }
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); }
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); }
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); } }
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); }
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; } }
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); } }
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); }
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*/; }
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); }
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); } } }
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); }