コード例 #1
0
 public override void Arrived(int tile)
 {
     LongEventHandler.QueueLongEvent(delegate()
     {
         Map map            = GetOrGenerateMapUtility.GetOrGenerateMap(tile, null);      //MAP INDEX BUG
         TaggedString label = "LetterLabelCaravanEnteredEnemyBase".Translate();
         TaggedString text  = "LetterTransportPodsLandedInEnemyBase".Translate(parent.Label).CapitalizeFirst();
         if (parent is Settlement settlement)
         {
             SettlementUtility.AffectRelationsOnAttacked(settlement, ref text);
         }
         if (!parent.HasMap)
         {
             Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
             PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(map.mapPawns.AllPawns, ref label, ref text, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), true, true);
         }
         AerialVehicleInFlight aerialVehicle = vehicle.GetAerialVehicle();
         CameraJumper.TryJump(map.Center, map);
         StrafeTargeter.Instance.BeginTargeting(vehicle, vehicle.CompVehicleLauncher.launchProtocol, delegate(IntVec3 start, IntVec3 end)
         {
             VehicleSkyfaller_FlyOver skyfaller = VehicleSkyfallerMaker.MakeSkyfallerFlyOver(vehicle.CompVehicleLauncher.Props.skyfallerStrafing, vehicle, start, end);
             skyfaller.aerialVehicle            = aerialVehicle;
             Thing thing = GenSpawn.Spawn(skyfaller, start, parent.Map, Rot8.North);                     //REDO - Other rotations?
         }, null, null, null, true);
         aerialVehicle.Destroy();
     }, "GeneratingMap", false, null, true);
 }
        private void DoArrivalAction(Caravan caravan)
        {
            Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(this.target.Tile, null);

            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.UnloadIndividually, false, null);
            Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
        }
コード例 #3
0
        private static bool Prefix(Site ___site, PawnsArrivalModeDef ___arrivalMode, List <ActiveDropPodInfo> pods)
        {
            if (___site.parts == null)
            {
                return(true);
            }

            foreach (var part in ___site.parts)
            {
                if (part.def != MFI_DefOf.MFI_HuntersLodgePart)
                {
                    continue;
                }

                var lookTarget    = TransportPodsArrivalActionUtility.GetLookTarget(pods);
                var num           = !___site.HasMap;
                var orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(___site.Tile,
                                                                             ___site.PreferredMapSize, null);
                if (num)
                {
                    Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                    PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns,
                                                                             "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural),
                                                                             LetterDefOf.NeutralEvent, true);
                }

                Messages.Message("MessageTransportPodsArrived".Translate(), lookTarget,
                                 MessageTypeDefOf.TaskCompletion);
                ___arrivalMode.Worker.TravelingTransportPodsArrived(pods, orGenerateMap);
                return(false);
            }

            return(true);
        }
コード例 #4
0
        public static void Postfix(CaravanArrivalAction_VisitSettlement __instance, Caravan caravan, Settlement ___settlement)
        {
            if (!___settlement.HasMap)
            {
                LongEventHandler.QueueLongEvent(delegate()
                {
                    var filePreset = SettlementGeneration.GetPresetFor(___settlement, out LocationDef locationDef);
                    if (filePreset != null)
                    {
                        customSettlementGeneration = true;
                        locationData = new LocationData {
                            file = filePreset, locationDef = locationDef
                        };
                    }
                    Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(___settlement.Tile, null);
                    CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, 0, true, null);

                    if (filePreset != null)
                    {
                        SettlementGeneration.InitialiseLocationGeneration(orGenerateMap, filePreset, locationDef);
                    }
                }, "GeneratingMapForNewEncounter", false, null, true);
                return;
            }
            Map orGenerateMap2 = GetOrGenerateMapUtility.GetOrGenerateMap(___settlement.Tile, null);

            CaravanEnterMapUtility.Enter(caravan, orGenerateMap2, CaravanEnterMode.Edge, 0, true, null);
        }
コード例 #5
0
        private void DoEnter(Caravan caravan, Site site)
        {
            Pawn t             = caravan.PawnsListForReading[0];
            bool flag          = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer);
            bool flag2         = !site.HasMap;
            Map  orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, SiteCoreWorker.MapSize, null);

            if (flag2)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, true, true);
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst());
                LetterDef   letterDef;
                LookTargets lookTargets;
                this.AppendThreatInfo(stringBuilder, site, orGenerateMap, out letterDef, out lookTargets);
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(site), stringBuilder.ToString(), letterDef ?? LetterDefOf.NeutralEvent, (!lookTargets.IsValid()) ? t : lookTargets, null, null);
            }
            else
            {
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(site), "LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null, null);
            }
            Map map = orGenerateMap;
            CaravanEnterMode enterMode      = CaravanEnterMode.Edge;
            bool             draftColonists = flag;

            CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null);
        }
コード例 #6
0
        private void DoEnter(Caravan caravan, Site site)
        {
            Pawn t             = caravan.PawnsListForReading[0];
            bool flag          = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer);
            bool flag2         = !site.HasMap;
            Map  orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, SiteCoreWorker.MapSize, null);

            Messages.Message("MessageCaravanArrivedAtDestination".Translate(new object[]
            {
                caravan.Label
            }).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion, true);
            if (flag2)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(new object[]
                {
                    Faction.OfPlayer.def.pawnsPlural
                }), LetterDefOf.NeutralEvent, true, true);
            }
            Map map = orGenerateMap;
            CaravanEnterMode enterMode      = CaravanEnterMode.Edge;
            bool             draftColonists = flag;

            CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null);
        }
コード例 #7
0
        private void Arrived()
        {
            Cthulhu.Utility.DebugReport("Arrived");
            if (this.arrived)
            {
                return;
            }
            this.arrived = true;
            Map map = Current.Game.FindMap(this.destinationTile);

            if (map != null)
            {
                this.SpawnDropPodsInMap(map, null);
            }
            else if (!this.PodsHaveAnyPotentialCaravanOwner)
            {
                Caravan caravan = Find.WorldObjects.PlayerControlledCaravanAt(this.destinationTile);
                if (caravan != null)
                {
                    this.GivePodContentsToCaravan(caravan);
                }
                else
                {
                    for (int i = 0; i < this.pods.Count; i++)
                    {
                        this.pods[i].innerContainer.ClearAndDestroyContentsOrPassToWorld(DestroyMode.Vanish);
                    }
                    this.RemoveAllPods();
                    Find.WorldObjects.Remove(this);
                    Messages.Message("MessageTransportPodsArrivedAndLost".Translate(),
                                     new GlobalTargetInfo(this.destinationTile), MessageTypeDefOf.NegativeEvent);
                }
            }
            else
            {
                MapParent mapParent = Find.WorldObjects.MapParentAt(this.destinationTile);
                if (mapParent != null && this.attackOnArrival)
                {
                    LongEventHandler.QueueLongEvent(delegate
                    {
                        Map orGenerateMap       = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, null);
                        string extraMessagePart = null;
                        if (!mapParent.Faction.HostileTo(Faction.OfPlayer))
                        {
                            mapParent.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile);
                            //mapParent.Faction.SetHostileTo(Faction.OfPlayer, true);
                            extraMessagePart = "MessageTransportPodsArrived_BecameHostile".Translate(
                                mapParent.Faction.Name
                                ).CapitalizeFirst();
                        }
                        Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
                        this.SpawnDropPodsInMap(mapParent.Map, extraMessagePart);
                    }, "GeneratingMapForNewEncounter", false, null);
                }
                else
                {
                    this.SpawnCaravanAtDestinationTile();
                }
            }
        }
コード例 #8
0
        public override void Arrived(List <ActiveDropPodInfo> pods, int tile)
        {
            Thing      lookTarget    = TransportPodsArrivalActionUtility.GetLookTarget(pods);
            bool       flag          = !mapParent.HasMap;
            Map        orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(tile, null);
            Settlement settlement;

            if ((settlement = orGenerateMap.Parent as Settlement) != null && settlement.Faction != Faction.OfPlayer)
            {
                TaggedString letterLabel = "LetterLabelCaravanEnteredEnemyBase".Translate();
                TaggedString letterText  = "LetterShuttleLandedInEnemyBase".Translate(settlement.Label).CapitalizeFirst();
                SettlementUtility.AffectRelationsOnAttacked_NewTmp(settlement, ref letterText);
                if (flag)
                {
                    Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                    PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref letterLabel, ref letterText, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true);
                }
                Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.NeutralEvent, lookTarget, settlement.Faction);
            }
            foreach (ActiveDropPodInfo pod in pods)
            {
                pod.missionShuttleHome      = missionShuttleHome;
                pod.missionShuttleTarget    = missionShuttleTarget;
                pod.sendAwayIfQuestFinished = sendAwayIfQuestFinished;
                pod.questTags = questTags;
            }
            PawnsArrivalModeDefOf.Shuttle.Worker.TravelingTransportPodsArrived(pods, orGenerateMap);
            Messages.Message("MessageShuttleArrived".Translate(), lookTarget, MessageTypeDefOf.TaskCompletion);
        }
コード例 #9
0
        private void DoArrivalAction(Caravan caravan)
        {
            Pawn t             = caravan.PawnsListForReading[0];
            Map  orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(this.settlement.Tile, null);

            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, true, null);
            Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
            if (!this.settlement.Faction.HostileTo(Faction.OfPlayer))
            {
                this.settlement.Faction.SetHostileTo(Faction.OfPlayer, true);
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredEnemyBase".Translate(), "LetterCaravanEnteredEnemyBaseBecameHostile".Translate(new object[]
                {
                    caravan.Label,
                    this.settlement.Label,
                    this.settlement.Faction.Name
                }).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null);
            }
            else
            {
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredEnemyBase".Translate(), "LetterCaravanEnteredEnemyBase".Translate(new object[]
                {
                    caravan.Label,
                    this.settlement.Label
                }).CapitalizeFirst(), LetterDefOf.NeutralEvent, t, null);
            }
        }
コード例 #10
0
 public override IEnumerable <Gizmo> GetCaravanGizmos(Caravan caravan)
 {
     if (Visitable)
     {
         var action = new Command_Action {
             icon         = SettleUtility.SettleCommandTex,
             defaultLabel = "EnterCity".Translate(),
             defaultDesc  = "EnterCityDesc".Translate(),
             action       = () => {
                 LongEventHandler.QueueLongEvent(() => {
                     var orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(Tile, null);
                     CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists: true);
                 }, "GeneratingMapForNewEncounter", false, null);
             },
         };
         if (this.EnterCooldownBlocksEntering())
         {
             action.disabled       = true;
             action.disabledReason = "MessageEnterCooldownBlocksEntering".Translate(this.EnterCooldownDaysLeft().ToString("0.#"));
         }
         yield return(action);
     }
     foreach (var gizmo in base.GetCaravanGizmos(caravan))
     {
         yield return(gizmo);
     }
 }
コード例 #11
0
        public void DoEnter(Caravan caravan)
        {
            Pawn t     = caravan.PawnsListForReading[0];
            bool flag2 = !mapParent.HasMap;

            Verse.Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, MapSize, null);
            foreach (var a in orGenerateMap.areaManager.AllAreas)
            {
                Log.Message($"AREA --> {a.Label} --> {a} --> {a.TrueCount}");
            }
            if (flag2)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true);
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, generator.ExpandLabel).CapitalizeFirst());
                Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredShipCrash")} {generator.ExpandLabel}", stringBuilder.ToString(), LetterDefOf.NeutralEvent);
            }
            else
            {
                Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredShipCrash")} {generator.ExpandLabel}", "LetterCaravanEnteredMap".Translate(caravan.Label, generator.ExpandLabel).CapitalizeFirst(), LetterDefOf.NeutralEvent, t);
            }
            Verse.Map        map       = orGenerateMap;
            CaravanEnterMode enterMode = CaravanEnterMode.Edge;

            CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop);
        }
コード例 #12
0
        public static void Settle(AerialVehicleInFlight aerialVehicle)
        {
            Faction faction = aerialVehicle.Faction;

            if (faction != Faction.OfPlayer)
            {
                Log.Error("Cannot settle with non-player faction.");
                return;
            }
            Settlement newHome = SettleUtility.AddNewHome(aerialVehicle.Tile, faction);

            LongEventHandler.QueueLongEvent(delegate()
            {
                GetOrGenerateMapUtility.GetOrGenerateMap(aerialVehicle.Tile, Find.World.info.initialMapSize, null);
            }, "GeneratingMap", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true);
            LongEventHandler.QueueLongEvent(delegate()
            {
                IntVec3 landingCell = GetLandingCell(newHome.Map, aerialVehicle);
                //AerialVehicleArrivalAction_LandSpecificCell arrivalAction = new AerialVehicleArrivalAction_LandSpecificCell(aerialVehicle.vehicle, newHome, aerialVehicle.Tile,
                //	aerialVehicle.vehicle.CompVehicleLauncher.launchProtocols.FirstOrDefault(), landingCell, Rot4.North);
                //arrivalAction.Arrived(aerialVehicle.Tile);
                VehiclePawn vehicle = (VehiclePawn)GenSpawn.Spawn(aerialVehicle.vehicle, landingCell, newHome.Map);
                CameraJumper.TryJump(vehicle);
                aerialVehicle.Destroy();
            }, "SpawningColonists", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true);
        }
コード例 #13
0
        public virtual bool TryExecuteEvent(AerialVehicleInFlight aerialVehicle, WorldObject shotDownBy, IntVec3?precalculatedCell = null)
        {
            try
            {
                Map crashSite;
                int ticksTillArrival = -1;
                if (Find.WorldObjects.MapParentAt(aerialVehicle.Tile) is MapParent mapParent)
                {
                    crashSite = mapParent.Map;
                }
                else
                {
                    int num = CaravanIncidentUtility.CalculateIncidentMapSize(aerialVehicle.vehicle.AllPawnsAboard, aerialVehicle.vehicle.AllPawnsAboard);
                    crashSite = GetOrGenerateMapUtility.GetOrGenerateMap(aerialVehicle.Tile, new IntVec3(num, 1, num), WorldObjectDefOfVehicles.CrashedShipSite);
                    if (shotDownBy is Settlement settlement)
                    {
                        ticksTillArrival = (crashSite.Parent as CrashSite).InitiateReinforcementsRequest(settlement);
                    }
                }
                bool validator(IntVec3 c)
                {
                    bool flag = aerialVehicle.vehicle.PawnOccupiedCells(c, Rot4.East).All(c2 => c2.Standable(crashSite) && !c.Roofed(crashSite) && !c.Fogged(crashSite) && c.InBounds(crashSite));

                    return(flag);
                }
                IntVec3 RandomCentercell()
                {
                    RCellFinder.TryFindRandomCellNearTheCenterOfTheMapWith(validator, crashSite, out IntVec3 result);
                    return(result);
                }
                IntVec3 cell = precalculatedCell ?? RandomCentercell();
                if (cell == IntVec3.Invalid)
                {
                    return(false);
                }
                AerialVehicleArrivalAction_CrashSpecificCell arrivalAction = new AerialVehicleArrivalAction_CrashSpecificCell(aerialVehicle.vehicle, crashSite.Parent, crashSite.Tile,
                                                                                                                              aerialVehicle.vehicle.CompVehicleLauncher.launchProtocol, cell, Rot4.East);
                arrivalAction.Arrived(crashSite.Tile);
                aerialVehicle.Destroy();
                string settlementLabel = shotDownBy?.Label ?? string.Empty;
                if (ticksTillArrival > 0)
                {
                    string hoursTillArrival = Ext_Math.RoundTo(ticksTillArrival / 2500f, 1).ToString();
                    SendCrashSiteLetter(shotDownBy, crashSite.Parent, CrashSiteDef.letterLabel, CrashSiteDef.letterTexts[1], CrashSiteDef.letterDef, crashSite.Parent, new NamedArgument[] { aerialVehicle.Label, settlementLabel, hoursTillArrival });
                }
                else
                {
                    SendCrashSiteLetter(shotDownBy, crashSite.Parent, CrashSiteDef.letterLabel, CrashSiteDef.letterTexts[0], CrashSiteDef.letterDef, crashSite.Parent, new NamedArgument[] { aerialVehicle.Label, settlementLabel });
                }
                return(true);
            }
            catch (Exception ex)
            {
                Log.Error($"Failed to execute incident {GetType()}. Exception=\"{ex.Message}\"");
                return(false);
            }
        }
コード例 #14
0
        private static Map GenerateNewMapWithSeed(MapParent mapParent, IntVec3 size, string seed)
        {
            var prevSeed = Find.World.info.seedString;

            Find.World.info.seedString = seed;
            var newMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, size, null);

            Find.World.info.seedString = prevSeed;
            return(newMap);
        }
コード例 #15
0
		public static Map GetOrGenerateMapForIncident(Caravan caravan, IntVec3 size, WorldObjectDef suggestedMapParentDef)
		{
			int tile = caravan.Tile;
			bool flag = Current.Game.FindMap(tile) == null;
			Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(tile, size, suggestedMapParentDef);
			if (flag && orGenerateMap != null)
			{
				caravan.StoryState.CopyTo(orGenerateMap.StoryState);
			}
			return orGenerateMap;
		}
コード例 #16
0
        private static void CustomAttackNowNoLetter(Caravan caravan, Settlement settlement)
        {
            Map map = GetOrGenerateMapUtility.GetOrGenerateMap(settlement.Tile, null);

            if (!settlement.HasMap)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
            }
            CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, true, null);
            Find.GoodwillSituationManager.RecalculateAll(true);
        }
コード例 #17
0
        private void DoEnter(Caravan caravan, Site site)
        {
            LookTargets lookTargets    = new LookTargets(caravan.PawnsListForReading);
            bool        draftColonists = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer);
            bool        num            = !site.HasMap;
            Map         orGenerateMap  = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, MapSize, null);

            if (num)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true);
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst());
                AppendThreatInfo(stringBuilder, site, orGenerateMap, out var letterDef, out var allLookTargets);
                TaggedString letterText = null;
                SettlementUtility.AffectRelationsOnAttacked_NewTmp(site, ref letterText);
                if (!letterText.NullOrEmpty())
                {
                    if (stringBuilder.Length > 0)
                    {
                        stringBuilder.AppendLine();
                    }
                    stringBuilder.AppendLineTagged(letterText);
                }
                List <HediffDef> list = null;
                foreach (SitePart part in site.parts)
                {
                    if (part.def.arrivedLetterHediffHyperlinks.NullOrEmpty())
                    {
                        continue;
                    }
                    if (list == null)
                    {
                        list = new List <HediffDef>();
                    }
                    foreach (HediffDef arrivedLetterHediffHyperlink in part.def.arrivedLetterHediffHyperlinks)
                    {
                        if (!list.Contains(arrivedLetterHediffHyperlink))
                        {
                            list.Add(arrivedLetterHediffHyperlink);
                        }
                    }
                }
                ChoiceLetter choiceLetter = LetterMaker.MakeLetter("LetterLabelCaravanEnteredMap".Translate(site), stringBuilder.ToString(), letterDef ?? LetterDefOf.NeutralEvent, allLookTargets.IsValid() ? allLookTargets : lookTargets);
                choiceLetter.hyperlinkHediffDefs = list;
                Find.LetterStack.ReceiveLetter(choiceLetter);
            }
            else
            {
                Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(site), "LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst(), LetterDefOf.NeutralEvent, lookTargets);
            }
            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists);
        }
コード例 #18
0
        public static Map GetOrGenerateMapForIncident(Caravan caravan, IntVec3 size, WorldObjectDef suggestedMapParentDef)
        {
            int  tile          = caravan.Tile;
            bool num           = Current.Game.FindMap(tile) == null;
            Map  orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(tile, size, suggestedMapParentDef);

            if (num)
            {
                orGenerateMap?.retainedCaravanData.Notify_GeneratedTempIncidentMapFor(caravan);
            }
            return(orGenerateMap);
        }
コード例 #19
0
        private static void AttackNow(Caravan caravan, EnemyCaravan enemyCaravan)
        {
            Pawn   t             = caravan.PawnsListForReading[0];
            Map    orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(enemyCaravan.Tile, null);
            string letterLabel   = "LetterLabelCaravanEnteredEnemyBase".Translate();
            string letterText    = "LetterCaravanEnteredEnemyBase".Translate(caravan.Label, enemyCaravan.Label).CapitalizeFirst();

            AffectRelationsOnAttacked(enemyCaravan, ref letterText);
            Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref letterLabel, ref letterText, "LetterRelatedPawnsSettlement".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true);
            Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.NeutralEvent, t, enemyCaravan.Faction);
            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists: true);
        }
コード例 #20
0
        public override void Arrived(List <ActiveDropPodInfo> pods, int tile)
        {
            Thing lookTarget    = TransportPodsArrivalActionUtility.GetLookTarget(pods);
            bool  flag          = !this.site.HasMap;
            Map   orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(this.site.Tile, SiteCoreWorker.MapSize, null);

            if (flag)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, true, true);
            }
            Messages.Message("MessageTransportPodsArrived".Translate(), lookTarget, MessageTypeDefOf.TaskCompletion, true);
            this.arrivalMode.Worker.TravelingTransportPodsArrived(pods, orGenerateMap);
        }
コード例 #21
0
        public override IEnumerable <Gizmo> GetCaravanGizmos(Caravan caravan)
        {
            if (Visitable)
            {
                // TODO refactor
                if (!(this is Citadel))
                {
                    var enterLabel = Find.World.GetComponent <WorldComponent_QuestTracker>().quests
                                     .Where(q => q.Targets != null && q.Targets.targets.Contains(this))
                                     .Select(q => q.def.EnterCityLabel)
                                     .FirstOrDefault() ?? "EnterCity".Translate();

                    var action = new Command_Action {
                        icon         = SettleUtility.SettleCommandTex,
                        defaultLabel = enterLabel,
                        defaultDesc  = "EnterCityDesc".Translate(),
                        action       = () => {
                            LongEventHandler.QueueLongEvent(() => {
                                var orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(Tile, null);
                                CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge,
                                                             CaravanDropInventoryMode.DoNotDrop, true);
                            }, "GeneratingMapForNewEncounter", false, null);
                        },
                    };
                    if (this.EnterCooldownBlocksEntering())
                    {
                        action.disabled       = true;
                        action.disabledReason =
                            "MessageEnterCooldownBlocksEntering".Translate(this.EnterCooldownDaysLeft().ToString("0.#"));
                    }

                    yield return(action);
                }

                if (!Abandoned)
                {
                    yield return(CaravanVisitUtility.TradeCommand(caravan));
                }
            }

            foreach (var gizmo in base.GetCaravanGizmos(caravan))
            {
                if (gizmo is Command command && command.defaultLabel == "CommandTrade".Translate())
                {
                    continue;
                }

                yield return(gizmo);
            }
        }
コード例 #22
0
ファイル: StartupTesting.cs プロジェクト: SmashPhil/Vehicles
        private static void UnitTestStrafing()
        {
            Map         sourceMap = null;
            Map         targetMap = null;
            VehiclePawn vehicle   = null;

            foreach (Settlement settlement in Find.WorldObjects.Settlements.Where(s => s.Faction == Faction.OfPlayer))
            {
                Map map = GetOrGenerateMapUtility.GetOrGenerateMap(settlement.Tile, null);
                if (map.spawnedThings.FirstOrDefault(t => t is VehiclePawn vehicleCheck && vehicleCheck.CompVehicleLauncher != null) is VehiclePawn vehicleTarget)
                {
                    sourceMap = map;
                    vehicle   = vehicleTarget;
                }
コード例 #23
0
        private void DoEnter(Caravan caravan, Site site)
        {
            Pawn t             = caravan.PawnsListForReading[0];
            bool flag          = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer);
            Map  orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, MapSize, null);

            Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredRuins".Translate(), "LetterCaravanEnteredRuins".Translate(caravan.Label).CapitalizeFirst(), LetterDefOf.ThreatBig, t, null, null);

            Map map = orGenerateMap;

            CaravanEnterMode enterMode      = CaravanEnterMode.Edge;
            bool             draftColonists = flag;

            CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null);
        }
コード例 #24
0
        public bool CheckSetupGateAndMap(Pawn p)
        {
            Log.Message(string.Format("Checking for link", new object[0]));
            bool drafted = p.Drafted;
            bool flag    = Find.Selector.IsSelected(p);
            bool result;

            if (this.LinkedGate == null)
            {
                if (this.LinkedSite == null)
                {
                    Messages.Message("RD_StargateNotLinked".Translate(), MessageTypeDefOf.RejectInput);                     //"Stargate is not linked to a destination!"
                    result = false;
                }
                else if (this.LinkedSite.HasMap)
                {
                    IEnumerable <Thing> source = this.LinkedSite.Map.listerThings.ThingsOfDef(ThingDef.Named("RD_Stargate"));
                    if (source.Count <Thing>() == 0)
                    {
                        Messages.Message("RD_StargateNotLinked".Translate(), MessageTypeDefOf.RejectInput);
                        result = false;
                    }
                    else
                    {
                        this.MakeLink(source.FirstOrDefault <Thing>());
                        Log.Message(string.Format("Linked extant, unlinked gate!", new object[0]));
                        result = true;
                    }
                }
                else
                {
                    List <Pawn> pawns = new List <Pawn>();
                    pawns.Add(p);
                    LongEventHandler.QueueLongEvent(delegate()
                    {
                        SitePartWorker_Stargate.tmpPawnsToSpawn.AddRange(pawns);
                        Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(this.LinkedSite.Tile, this.LinkedSite.Map.Size, null);
                    }, "GeneratingMapForNewEncounter", false, null);
                    result = false;
                }
            }
            else
            {
                Log.Message(string.Format("Linked already!", new object[0]));
                result = true;
            }
            return(result);
        }
コード例 #25
0
ファイル: SetUpCampCore.cs プロジェクト: MCLofton/SetUpCamp
        //Generates a map with a defined seed
        private static Map GenerateNewMapWithSeed(Caravan caravan, IntVec3 size, string seed)
        {
            int    tile       = caravan.Tile;
            bool   flag       = Current.Game.FindMap(tile) == null;
            string seedString = Find.World.info.seedString;

            Find.World.info.seedString = seed;
            Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(tile, size, DefDatabase <WorldObjectDef> .GetNamed("CaravanCamp", true));

            Find.World.info.seedString = seedString;
            if (flag && orGenerateMap != null)
            {
                orGenerateMap.retainedCaravanData.Notify_GeneratedTempIncidentMapFor(caravan);
            }
            return(orGenerateMap);
        }
コード例 #26
0
        private void DoEnter(Caravan caravan, Site site)
        {
            Pawn             t              = caravan.PawnsListForReading[0];
            bool             flag           = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer);
            Map              orGenerateMap  = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, SiteCoreWorker.MapSize, null);
            Map              map            = orGenerateMap;
            CaravanEnterMode enterMode      = CaravanEnterMode.Edge;
            bool             draftColonists = flag;

            CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop, draftColonists, null);
            if (flag)
            {
                Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
            }
            Messages.Message("MessageCaravanArrivedAtDestination".Translate(caravan.Label).CapitalizeFirst(), t, MessageTypeDefOf.TaskCompletion);
        }
コード例 #27
0
        private static void AttackNow(Caravan caravan, Settlement settlement)
        {
            bool         num           = !settlement.HasMap;
            Map          orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(settlement.Tile, null);
            TaggedString letterLabel   = "LetterLabelCaravanEnteredEnemyBase".Translate();
            TaggedString letterText    = "LetterCaravanEnteredEnemyBase".Translate(caravan.Label, settlement.Label.ApplyTag(TagType.Settlement, settlement.Faction.GetUniqueLoadID())).CapitalizeFirst();

            AffectRelationsOnAttacked(settlement, ref letterText);
            if (num)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref letterLabel, ref letterText, "LetterRelatedPawnsSettlement".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true);
            }
            Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.NeutralEvent, caravan.PawnsListForReading, settlement.Faction);
            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists: true);
        }
コード例 #28
0
        public void EstablishFarcasterLink()
        {
            mapHome = this.Map;
            Messages.Message("GU_FarcasterActivated".Translate(), MessageTypeDefOf.PositiveEvent);
            FarcasterDestination worldObjectFarcaster = (FarcasterDestination)WorldObjectMaker.MakeWorldObject(DefDatabase <WorldObjectDef> .GetNamed("GU_FarcasterDestinationSigmaAlcyon", true));

            mapParent      = (MapParent)worldObjectFarcaster;
            mapParent.Tile = TileFinder.RandomStartingTile();
            mapParent.SetFaction(Faction.OfPlayer);
            worldObjectFarcaster.mapHome = mapHome;
            worldObjectFarcaster.mapGen  = DefDatabase <MapGeneratorDef> .GetNamed("GU_FarcasterMapSigmaAlcyon", true);

            Find.WorldObjects.Add(mapParent);
            myMap = new Map();

            LongEventHandler.QueueLongEvent(delegate
            {
                myMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, Find.World.info.initialMapSize, null);
            }, "GU_LinkingWithFarcasters", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap));
            LongEventHandler.QueueLongEvent(delegate
            {
                originalBiome        = myMap.TileInfo.biome;
                originalTile         = mapParent.Tile;
                myMap.TileInfo.biome = DefDatabase <BiomeDef> .GetNamed("GU_SigmaAlcyonIIb", true);
                mapParent.Tile       = base.Tile;

                mapFarcast = myMap;

                //Remote Farcaster portal spawning

                Building_AncientFarcaster building_AncientFarcaster = (Building_AncientFarcaster)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("GU_AncientFarcasterPortal", true));
                building_AncientFarcaster.mapHome      = mapHome;
                building_AncientFarcaster.locationHome = this.Position;
                building_AncientFarcaster.SetFaction(Faction.OfPlayer);
                GenSpawn.Spawn(building_AncientFarcaster, myMap.Center, myMap);
                locationFarcast = building_AncientFarcaster.Position;

                //An auxiliary pad too

                Building_Storage building_AncientPad = (Building_Storage)ThingMaker.MakeThing(DefDatabase <ThingDef> .GetNamed("GU_AncientFarcasterPad", true));
                building_AncientPad.SetFaction(Faction.OfPlayer);
                GenSpawn.Spawn(building_AncientPad, myMap.Center - GenAdj.CardinalDirections[0] * 4, myMap);

                //Farcaster portal spawning ends here
            }, "GU_LinkingWithFarcasters", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap));
        }
コード例 #29
0
        public override void Arrived(List <ActiveDropPodInfo> pods, int tile)
        {
            Thing  lookTarget    = TransportPodsArrivalActionUtility.GetLookTarget(pods);
            bool   flag          = !settlement.HasMap;
            Map    orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(settlement.Tile, null);
            string letterLabel   = "LetterLabelCaravanEnteredEnemyBase".Translate();
            string letterText    = "LetterTransportPodsLandedInEnemyBase".Translate(settlement.Label).CapitalizeFirst();

            SettlementUtility.AffectRelationsOnAttacked(settlement, ref letterText);
            if (flag)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref letterLabel, ref letterText, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), informEvenIfSeenBefore: true);
            }
            Find.LetterStack.ReceiveLetter(letterLabel, letterText, LetterDefOf.NeutralEvent, lookTarget, settlement.Faction);
            arrivalMode.Worker.TravelingTransportPodsArrived(pods, orGenerateMap);
        }
コード例 #30
0
        private void DoArrivalAction(Caravan caravan)
        {
            bool flag = !this.target.HasMap;

            if (flag)
            {
                this.target.SetFaction(Faction.OfPlayer);
            }
            Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(this.target.Tile, null);

            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.UnloadIndividually, false, null);
            if (flag)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                Find.LetterStack.ReceiveLetter("EscapeShipFoundLabel".Translate(), "EscapeShipFound".Translate(), LetterDefOf.PositiveEvent, new GlobalTargetInfo(this.target.Map.Center, this.target.Map, false), null, null);
            }
        }