Пример #1
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);
        }
Пример #2
0
            internal void <> m__3()
            {
                Pawn                t        = this.caravan.PawnsListForReading[0];
                Faction             faction  = this.faction;
                Faction             ofPlayer = Faction.OfPlayer;
                FactionRelationKind kind     = FactionRelationKind.Hostile;
                string              reason   = "GoodwillChangedReason_AttackedCaravan".Translate();

                faction.TrySetRelationKind(ofPlayer, kind, true, reason, new GlobalTargetInfo?(t));
                Map     map = CaravanIncidentUtility.GetOrGenerateMapForIncident(this.caravan, new IntVec3(100, 1, 100), WorldObjectDefOf.AttackedNonPlayerCaravan);
                IntVec3 playerSpot;
                IntVec3 enemySpot;

                MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out playerSpot, out enemySpot);
                CaravanEnterMapUtility.Enter(this.caravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(playerSpot, map, 12, null), CaravanDropInventoryMode.DoNotDrop, true);
                List <Pawn> list = this.metCaravan.PawnsListForReading.ToList <Pawn>();

                CaravanEnterMapUtility.Enter(this.metCaravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(enemySpot, map, 12, null), CaravanDropInventoryMode.DoNotDrop, false);
                LordMaker.MakeNewLord(this.faction, new LordJob_DefendAttackedTraderCaravan(list[0].Position), map, list);
                Find.TickManager.CurTimeSpeed = TimeSpeed.Paused;
                CameraJumper.TryJumpAndSelect(t);
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(list, "LetterRelatedPawnsGroupGeneric".Translate(new object[]
                {
                    Faction.OfPlayer.def.pawnsPlural
                }), LetterDefOf.NeutralEvent, true, true);
            }
        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);
        }
Пример #4
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);
        }
        public override void DoEnter(Caravan caravan)
        {
            Pawn t     = caravan.PawnsListForReading[0];
            bool flag2 = !MapParent.HasMap;

            Verse.Map orGenerateMap = GetOrGenerateMap(MapParent.Tile, MapSize, null);
            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, Site).CapitalizeFirst());
                Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {Site.Label}", stringBuilder.ToString(), LetterDefOf.NeutralEvent);
            }
            else
            {
                Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {Site.Label}", "LetterCaravanEnteredMap".Translate(caravan.Label, Site).CapitalizeFirst(), LetterDefOf.NeutralEvent, t);
            }
            Verse.Map map      = orGenerateMap;
            IntVec3   enterPos = new IntVec3(82, 0, 5);

            CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => enterPos);

            DoomsdaySite site = (DoomsdaySite)MapParent;
            var          comp = site.GetComponent <DoomsdayUltimatumComp>();

            if (comp.HelpingFactions != null)
            {
                CacheAndChangeRelations(comp);

                GeneratePawns(comp, ref enterPos, map);
            }
        }
Пример #6
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);
        }
Пример #7
0
        public static void Camp(Caravan caravan)
        {
            Faction faction = caravan.Faction;

            if (faction != Faction.OfPlayer)
            {
                Log.Error("Cannot camp with non-player faction.", false);
                return;
            }
            string      randomSeed = Find.TickManager.TicksAbs.ToString();
            int         CampSize   = Rand.Range(SetUpCampSettings.allowedSizeRange.min, SetUpCampSettings.allowedSizeRange.max);
            CaravanCamp camp       = NewCaravanCamp(caravan.Tile, faction);

            LongEventHandler.QueueLongEvent(delegate()
            {
                GenerateNewMapWithSeed(caravan.Tile, new IntVec3(CampSize, 1, CampSize), randomSeed);
            }, "SetUpCamp_GeneratingCamp", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true);
            LongEventHandler.QueueLongEvent(delegate()
            {
                Map map = camp.Map;
                Thing t = caravan.PawnsListForReading[0];
                CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Center, CaravanDropInventoryMode.DoNotDrop, false, (IntVec3 x) => x.GetRoom(map, RegionType.Set_Passable).CellCount >= 600);
                CameraJumper.TryJump(t);
                Find.TickManager.CurTimeSpeed = 0;
                Messages.Message("SetUpCampFormedCamp".Translate(), MessageTypeDefOf.PositiveEvent);
            }, "SpawningColonists", true, new Action <Exception>(GameAndMapInitExceptionHandlers.ErrorWhileGeneratingMap), true);
        }
Пример #8
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);
     }
 }
Пример #9
0
        public void SetPlace(CaravanAI caravanAI, Caravan playerCaravan, IntVec3 mapSize)
        {
            MapSize = mapSize;

            this.caravanAI = caravanAI;
            aiFaction      = caravanAI.Faction;
            aiTarget       = caravanAI.pather.Destination;
            aiAction       = caravanAI.pather.ArrivalAction;

            this.playerCaravan = playerCaravan;
            List <Pawn> aiPawns = new List <Pawn>(caravanAI.pawns);

            caravanAI.Tile     = Tile;
            playerCaravan.Tile = Tile;

            Map map = GetOrGenerateMap(Tile, MapSize, null);

            Find.TickManager.Notify_GeneratedPotentiallyHostileMap();

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 first, out IntVec3 second);

            CaravanEnterMapUtility.Enter(caravanAI, map, x => CellFinder.RandomSpawnCellForPawnNear(first, map), CaravanDropInventoryMode.DoNotDrop);
            CaravanEnterMapUtility.Enter(playerCaravan, map, x => CellFinder.RandomSpawnCellForPawnNear(second, map), CaravanDropInventoryMode.DoNotDrop);

            LordJob lordJob = new LordJob_AssaultColony(caravanAI.Faction, canKidnap: true, canTimeoutOrFlee: false);

            LordMaker.MakeNewLord(caravanAI.Faction, lordJob, map, aiPawns);

            winner = CaravanBattleWinner.None;

            Find.LetterStack.ReceiveLetter("CaravanBattlePlacePlace_BattleStarted".Translate(), "CaravanBattlePlacePlace_BattleDescription".Translate(playerCaravan.Name, caravanAI.Name), LetterDefOf.ThreatBig);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (parms.target is Map)
            {
                return(IncidentDefOf.TravelerGroup.Worker.TryExecute(parms));
            }
            Caravan caravan = (Caravan)parms.target;

            if (!TryFindFaction(out Faction faction))
            {
                return(false);
            }
            CameraJumper.TryJumpAndSelect(caravan);
            List <Pawn> pawns                = GenerateCaravanPawns(faction);
            Caravan     metCaravan           = CaravanMaker.MakeCaravan(pawns, faction, -1, addToWorldPawnsIfNotAlready: false);
            string      text                 = "CaravanMeeting".Translate(caravan.Name, faction.Name, PawnUtility.PawnKindsToCommaList(metCaravan.PawnsListForReading, useAnd: true)).CapitalizeFirst();
            DiaNode     diaNode              = new DiaNode(text);
            Pawn        bestPlayerNegotiator = BestCaravanPawnUtility.FindBestNegotiator(caravan);

            if (metCaravan.CanTradeNow)
            {
                DiaOption diaOption = new DiaOption("CaravanMeeting_Trade".Translate());
                diaOption.action = delegate
                {
                    Find.WindowStack.Add(new Dialog_Trade(bestPlayerNegotiator, metCaravan));
                    PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(metCaravan.Goods.OfType <Pawn>(), "LetterRelatedPawnsTradingWithOtherCaravan".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent);
                };
                if (bestPlayerNegotiator == null)
                {
                    diaOption.Disable("CaravanMeeting_TradeIncapable".Translate());
                }
                diaNode.options.Add(diaOption);
            }
            DiaOption diaOption2 = new DiaOption("CaravanMeeting_Attack".Translate());

            diaOption2.action = delegate
            {
                LongEventHandler.QueueLongEvent(delegate
                {
                    Pawn t                   = caravan.PawnsListForReading[0];
                    Faction faction3         = faction;
                    Faction ofPlayer         = Faction.OfPlayer;
                    FactionRelationKind kind = FactionRelationKind.Hostile;
                    string reason            = "GoodwillChangedReason_AttackedCaravan".Translate();
                    faction3.TrySetRelationKind(ofPlayer, kind, canSendLetter: true, reason, t);
                    Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(100, 1, 100), WorldObjectDefOf.AttackedNonPlayerCaravan);
                    MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerSpot, out IntVec3 enemySpot);
                    CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(playerSpot, map, 12), CaravanDropInventoryMode.DoNotDrop, draftColonists: true);
                    List <Pawn> list = metCaravan.PawnsListForReading.ToList();
                    CaravanEnterMapUtility.Enter(metCaravan, map, (Pawn p) => CellFinder.RandomClosewalkCellNear(enemySpot, map, 12));
                    LordMaker.MakeNewLord(faction, new LordJob_DefendAttackedTraderCaravan(list[0].Position), map, list);
                    Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                    CameraJumper.TryJumpAndSelect(t);
                    PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(list, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true);
                }, "GeneratingMapForNewEncounter", doAsynchronously: false, null);
Пример #11
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);
        }
Пример #12
0
 public override void CaravanEnter(Caravan caravan, Map map)
 {
     if (UseMapSpawnPos)
     {
         CaravanEnterMapUtility.Enter(caravan, map, x => MapGeneratorDef.PawnsSpawnPos, CaravanDropInventoryMode.DoNotDrop);
     }
     else
     {
         CaravanEnterMode enterMode = CaravanEnterMode.Edge;
         CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop);
     }
 }
Пример #13
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);
        }
        public Map SetupCaravanAttackMap(Caravan caravan, List <Pawn> faction1, List <Pawn> faction2)
        {
            int num = 140;
            Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(num, 1, num), WorldObjectDefOf.Ambush);

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerStartingSpot, out IntVec3 second);
            CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map), CaravanDropInventoryMode.DoNotDrop, draftColonists: true);

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out second, out IntVec3 third);
            SpawnEnemies(second, third, faction1, faction2, map);

            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(faction1, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true);
            return(map);
        }
Пример #15
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);
            }
        }
Пример #16
0
        static bool Prefix(Caravan caravan, Map map, Func <Pawn, IntVec3> spawnCellGetter)
        {
            if (!EmbarkShipUtility.EmbarkUIActive)
            {
                return(true);
            }
            tmpPawns.Clear();
            tmpPawns.AddRange((IEnumerable <Pawn>)caravan.PawnsListForReading);
            for (int index = 0; index < tmpPawns.Count; ++index)
            {
                IntVec3 loc = spawnCellGetter(tmpPawns[index]);
                GenSpawn.Spawn((Thing)tmpPawns[index], loc, map, Rot4.Random, WipeMode.Vanish, false);
            }

            /*
             * switch (dropInventoryMode)
             * {
             *  case CaravanDropInventoryMode.DropInstantly:
             *      CaravanEnterMapUtility.DropAllInventory(tmpPawns);
             *      break;
             *  case CaravanDropInventoryMode.UnloadIndividually:
             *      for (int index = 0; index < tmpPawns.Count; ++index)
             *          tmpPawns[index].inventory.UnloadEverything = true;
             *      break;
             * }
             */
            CaravanEnterMapUtility.DropAllInventory(tmpPawns);

            /*
             * if (draftColonists)
             *  CaravanEnterMapUtility.DraftColonists(tmpPawns);
             * if (map.IsPlayerHome)
             * {
             *  for (int index = 0; index < tmpPawns.Count; ++index)
             *  {
             *      if (tmpPawns[index].IsPrisoner)
             *          tmpPawns[index].guest.WaitInsteadOfEscapingForDefaultTicks();
             *  }
             * }
             */
            caravan.RemoveAllPawns();

            /*
             * if (caravan.Spawned)
             *  Find.WorldObjects.Remove((WorldObject)caravan);
             */
            tmpPawns.Clear();
            return(false);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            if (parms.target is Map)
            {
                return(IncidentDefOf.TravelerGroup.Worker.TryExecute(parms));
            }

            Caravan caravan = (Caravan)parms.target;

            CameraJumper.TryJumpAndSelect(caravan);

            string text = "RealRuins.CaravanFoundRuins".Translate(caravan.Name).CapitalizeFirst();

            DiaNode diaNode = new DiaNode(text);

            DiaOption diaOptionInvestigate = new DiaOption("RealRuins.CaravanFoundRuins.Investigate".Translate());
            DiaOption diaOptionMoveOn      = new DiaOption("CaravanMeeting_MoveOn".Translate());

            diaOptionInvestigate.action = delegate {
                LongEventHandler.QueueLongEvent(delegate {
                    Pawn t = caravan.PawnsListForReading[0];

                    /*Site site = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, (RimWorld.SitePartDef) null, caravan.Tile, null);
                     * site.sitePartsKnown = true;
                     * site.GetComponent<TimeoutComp>().StartTimeout(3 * 60000);
                     * Find.WorldObjects.Add(site);
                     */

                    Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(120, 1, 120),
                                                                                 DefDatabase <WorldObjectDef> .GetNamed("CaravanSmallRuinsWorldObject"));
                    CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge);
                    CameraJumper.TryJumpAndSelect(t);
                    Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                }, "GeneratingMapForNewEncounter", false, null);
            };

            diaOptionInvestigate.resolveTree = true;
            diaOptionMoveOn.resolveTree      = true;

            diaNode.options.Add(diaOptionInvestigate);
            diaNode.options.Add(diaOptionMoveOn);

            string      diaTitle    = "RealRuins.CaravanFoundRuinsTitle".Translate(caravan.Label);
            WindowStack windowStack = Find.WindowStack;

            windowStack.Add(new Dialog_NodeTree(diaNode, true, false, diaTitle));
            Find.Archive.Add(new ArchivedDialog(diaNode.text, diaTitle));
            return(true);
        }
Пример #18
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);
        }
        public void DoEnter(Caravan caravan)
        {
            Pawn t     = caravan.PawnsListForReading[0];
            bool flag2 = !mapParent.HasMap;

            Verse.Map map = GetOrGenerateMap(mapParent.Tile, MapSize, null);
            Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
            Find.LetterStack.ReceiveLetter("Quest_MissingPeople_EnterToMapTitle".Translate(), "Quest_MissingPeople_EnterToMap".Translate(), LetterDefOf.NeutralEvent);

            CaravanEnterMode enterMode = CaravanEnterMode.Edge;

            CaravanEnterMapUtility.Enter(caravan, map, enterMode, CaravanDropInventoryMode.DoNotDrop);

            Quest.UnlimitedTime = true;
        }
        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);
        }
        public override IEnumerable <Gizmo> GetCaravanGizmos(Caravan caravan)
        {
            foreach (var gizmo in base.GetCaravanGizmos(caravan))
            {
                yield return(gizmo);
            }

            yield return(new Command_Action
            {
                defaultLabel = "FilUnderscore.PersistentRimWorlds.Command.BaseResettle".Translate(),
                defaultDesc = "FilUnderscore.PersistentRimWorlds.Command.BaseResettle.Desc".Translate(),
                icon = BaseResettleCommand,
                action = delegate
                {
                    Find.WindowStack.Add(new Dialog_MessageBox("Resettle, Roll the Dice and see whether it will be overtaken by enemy base already.", "Dismiss"));

                    /*
                     * Settlement resettledHome = SettleUtility.AddNewHome(caravan.Tile, caravan.Faction);
                     *
                     * var map = GetOrGenerateMapUtility.GetOrGenerateMap(caravan.Tile, Find.World.info.initialMapSize,
                     *  null);
                     *
                     * // Roll dice.
                     *
                     * MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out var spot, out var second);
                     * CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => CellFinder.RandomSpawnCellForPawnNear(spot, map, 4), CaravanDropInventoryMode.DoNotDrop, false);
                     * CameraJumper.TryJump(caravan.PawnsListForReading[0]);
                     */

                    var map = Current.Game.FindMap(caravan.Tile);
                    var daysAway = 200 - 10;

                    foreach (var thing in map.listerThings.ThingsInGroup(ThingRequestGroup.BuildingArtificial))
                    {
                        if (Rand.Chance(0.005f * daysAway))
                        {
                            thing.TakeDamage(new DamageInfo(DamageDefOf.Deterioration,
                                                            Rand.Range(0, thing.MaxHitPoints * 1.5F)));
                        }
                    }

                    Find.WorldObjects.Remove(Find.WorldObjects.WorldObjectAt(caravan.Tile, WorldObjectDefOf.AbandonedSettlement));
                    SettleInExistingMapUtility.Settle(map);
                    CaravanEnterMapUtility.Enter(caravan, map, CaravanEnterMode.Edge);
                }
            });
        }
        private void Outcome_Disaster(Caravan caravan)
        {
            Faction.TryAffectGoodwillWith(Faction.OfPlayer, -40);
            bool       chance   = Rand.Chance(0.5f);
            Settlement s        = chance ? Set1 : Set2;
            Settlement turncoat = (Settlement)WorldObjectMaker.MakeWorldObject(WorldObjectDefOf.Settlement);

            turncoat.SetFaction(Find.FactionManager.AllFactionsVisible.Where(f => !f.IsPlayer && f.HostileTo(Faction.OfPlayer)).RandomElementWithFallback(null));
            turncoat.Tile = s.Tile;
            turncoat.Name = s.Name;
            if (turncoat.Faction == null)
            {
                Outcome_Fail(caravan);
                return;
            }

            Settlement friendly = chance ? Set2 : Set1;

            Find.WorldObjects.Remove(s);
            Find.WorldObjects.Remove(chance ? Set2 : Set1);
            Find.WorldObjects.Add(turncoat);
            Site ambush = SiteMaker.MakeSite(SiteCoreDefOf.Nothing, SitePartDefOf.AmbushEdge, Tile, turncoat.Faction, true, StorytellerUtility.DefaultSiteThreatPointsNow());

            Find.LetterStack.ReceiveLetter("LetterLabelDisputeDisaster".Translate(), "DisputeDisaster".Translate(turncoat, turncoat.Faction, friendly)
                                           , LetterDefOf.ThreatBig, turncoat, null, "Disaster");

            LongEventHandler.QueueLongEvent(new Action(() =>
            {
                MapGenerator.GenerateMap(new IntVec3(110, 1, 110), ambush, MapGeneratorDefOf.Encounter);
                List <PawnKindDef> kindDefs = new List <PawnKindDef>();
                for (int i = 0; i < 2; i++)
                {
                    kindDefs.Clear();
                    Lord lord = LordMaker.MakeNewLord(i == 0 ? turncoat.Faction : Faction, new LordJob_AssaultColony(i == 0 ? turncoat.Faction : Faction), ambush.Map);
                    kindDefs  = Utilities.GeneratePawnKindDef(45, i == 0 ? turncoat.Faction : Faction);
                    // Balance
                    IntVec3 vec = CellFinder.RandomClosewalkCellNear(new IntVec3(ambush.Map.Center.x - 30 + (i * 60), ambush.Map.Center.y, ambush.Map.Center.z), ambush.Map, 10);
                    Utilities.GenerateFighter(StorytellerUtility.DefaultSiteThreatPointsNow() + 300, lord, kindDefs, ambush.Map, i == 0 ? turncoat.Faction : Faction, vec);
                }
                CaravanEnterMapUtility.Enter(caravan, ambush.Map, CaravanEnterMode.Center, CaravanDropInventoryMode.DoNotDrop, true);
            }), "GeneratingMapForNewEncounter", false, null);
            Utilities.FactionsWar().GetByFaction(turncoat.Faction).resources += FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2;
            Utilities.FactionsWar().GetByFaction(friendly.Faction).resources -= FE_WorldComp_FactionsWar.SETTLEMENT_RESOURCE_VALUE * 2;
            Find.WorldObjects.Remove(this);
        }
Пример #23
0
 static void Postfix(Caravan __result)
 {
     if (VesselManager.FormVessel)
     {
         __result.def.selectable = false;
         Vessel factionBase = (Vessel)WorldObjectMaker.MakeWorldObject(DefDatabase <WorldObjectDef> .GetNamed("Vessel"));
         factionBase.caravan = __result;
         factionBase.Tile    = __result.Tile;
         factionBase.SetFaction(Faction.OfPlayer);
         Find.WorldObjects.Add((WorldObject)factionBase);
         factionBase.structure          = new Vessel_Structure(VesselManager.ActiveShipyard);
         WaterGenerator.cachedStructure = factionBase.structure;
         Map newMap;
         newMap = GetOrGenerateMapUtility.GetOrGenerateMap(__result.Tile, Find.World.info.initialMapSize, null);
         //ISSUE: pawns are placed at the center of the map, which may or may not be a valid location
         //ISSUE: weather warning message
         CaravanEnterMapUtility.Enter(__result, newMap, (Func <Pawn, IntVec3>)(p => factionBase.Map.Center));
     }
 }
Пример #24
0
        public static void Camp(Caravan caravan)
        {
            float  PawnScore  = CaravanPawnsCountScore(caravan);
            string randomSeed = new System.Random().Next(1, 99999999).ToString();
            int    CampSize   = new System.Random().Next(SetUpCampSettings.allowedSizeRange.min, SetUpCampSettings.allowedSizeRange.max);
            //float num4 = Mathf.Max(PawnScore * EnemyPointsPerCaravanPawnsScoreRange.RandomInRange, 45f);
            Pawn pawn = caravan.PawnsListForReading[0];

            tmpCaravanPawns.Clear();
            tmpCaravanPawns.AddRange(caravan.PawnsListForReading);
            Map map = GenerateNewMapWithSeed(caravan, new IntVec3(CampSize, 1, CampSize), randomSeed);

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerStartingSpot, out IntVec3 intVec);
            CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map, 4), 0, true);
            tmpCaravanPawns.Clear();
            CameraJumper.TryJumpAndSelect(pawn);
            Find.TickManager.CurTimeSpeed = 0;
            Messages.Message("SetUpCampFormedCamp".Translate(), MessageTypeDefOf.PositiveEvent);
        }
Пример #25
0
        public virtual void DoEnter(Caravan caravan, MapParent mapParent)
        {
            Pawn t = caravan.PawnsListForReading[0];

            Verse.Map orGenerateMap = GetOrGenerateMap(Tile, GetMapSize(), mapParent, null);
            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, "EnteredToRandomPlace".Translate()).CapitalizeFirst());
            Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {"EnteredToRandomPlace".Translate()}", stringBuilder.ToString(), LetterDefOf.NeutralEvent);
            CaravanEnterMode enterMode = CaravanEnterMode.Edge;

            if (RandomPlaceDef.UseMapSpawnSpot)
            {
                CaravanEnterMapUtility.Enter(caravan, orGenerateMap, (Pawn p) => RandomPlaceDef.Map.PawnsSpawnPos, CaravanDropInventoryMode.DoNotDrop);
            }
            else
            {
                CaravanEnterMapUtility.Enter(caravan, orGenerateMap, enterMode, CaravanDropInventoryMode.DoNotDrop);
            }
        }
Пример #26
0
        // Token: 0x0600000A RID: 10 RVA: 0x0000218C File Offset: 0x0000038C
        public static void Camp(Caravan caravan)
        {
            SetUpCampSettings settings = LoadedModManager.GetMod <SetUpCamp>().GetSettings <SetUpCampSettings>();
            int   minSize = SetUpCampSettings.MinSize;
            int   maxSize = SetUpCampSettings.MaxSize;
            float num     = CaravanPawnsCountScore(caravan);
            int   num2    = Mathf.RoundToInt(num * 900f);
            int   num3    = new System.Random().Next(minSize, maxSize);
            float num4    = Mathf.Max(num * EnemyPointsPerCaravanPawnsScoreRange.RandomInRange, 45f);
            Pawn  pawn    = caravan.PawnsListForReading[0];

            tmpCaravanPawns.Clear();
            tmpCaravanPawns.AddRange(caravan.PawnsListForReading);
            Map map = CaravanIncidentUtility.GetOrGenerateMapForIncident(caravan, new IntVec3(num3, 1, num3), DefDatabase <WorldObjectDef> .GetNamed("CaravanCamp", true));

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 playerStartingSpot, out IntVec3 intVec);
            CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map, 4), 0, true);
            tmpCaravanPawns.Clear();
            CameraJumper.TryJumpAndSelect(pawn);
            Find.TickManager.CurTimeSpeed = 0;
            Messages.Message("The caravan formed a camp.", MessageTypeDefOf.TaskCompletion);
        }
Пример #27
0
        protected bool Execute(Caravan caravan)
        {
            Map map = GetOrGenerateMapUtility.GetOrGenerateMap(caravan.Tile, DefDatabase <WorldObjectDef> .GetNamed("WanderingCaravanEncounter"));

            if (!WanderingCaravansUtility.AllWanderingCaravansSpawnableInMap(map).TryRandomElement(out PawnKindDef wanderingCaravanDef))
            {
                return(false);
            }
            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 caravanSpot, out IntVec3 wanderingCaravansSpot);
            IEnumerable <Pawn> wanderingCaravans = this.GenerateWanderingCaravans(wanderingCaravanDef);
            Pawn    infoPawn = wanderingCaravans.First();
            DiaNode diaNode  = new DiaNode($"A wandering {infoPawn.LabelCap} has been spotted in the distance by {caravan.LabelCap}, with more wandering caravans possible following it.\n\nYou can "
                                           + $"ignore them, or you can tame or kill them to obtain their potentially valuable inventory.")
            {
                options =
                {
                    new DiaOption("Go and claim their inventory")
                    {
                        action = delegate
                        {
                            string plural = wanderingCaravans.Count() > 1 ? "ies" : "y";
                            CaravanEnterMapUtility.Enter(caravan, map, pawn => CellFinder.RandomSpawnCellForPawnNear(caravanSpot, map));
                            Messages.Message($"You have {TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000)} to claim the wandering {infoPawn.LabelCap}s inventor{plural} before the "
                                             + $"caravan is reformed.", infoPawn, MessageTypeDefOf.PositiveEvent);
                            ((WorldObject)map.ParentHolder).GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown();
                        },
                        resolveTree = true
                    }, new DiaOption("Ignore them and continue")
                    {
                        resolveTree = true
                    }
                }
            };

            Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, false, $"Wandering {infoPawn.LabelCap} spotted"));
            this.SpawnPawns(wanderingCaravans, map, wanderingCaravansSpot);
            return(true);
        }
Пример #28
0
        public override void DoEnter(Caravan caravan)
        {
            Pawn t     = caravan.PawnsListForReading[0];
            bool flag2 = !MapParent.HasMap;

            Verse.Map orGenerateMap = GetOrGenerateMap(MapParent.Tile, MapSize, null);
            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, questSite.Label).CapitalizeFirst());
                Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {questSite.Label}", stringBuilder.ToString(), LetterDefOf.NeutralEvent);
            }
            else
            {
                Find.LetterStack.ReceiveLetter($"{Translator.Translate("CaravanEnteredMassiveFire")} {questSite.Label}", "LetterCaravanEnteredMap".Translate(caravan.Label, questSite.Label).CapitalizeFirst(), LetterDefOf.NeutralEvent, t);
            }
            Verse.Map map      = orGenerateMap;
            IntVec3   spawnPos = new IntVec3(33, 0, 4);

            CaravanEnterMapUtility.Enter(caravan, map, (Pawn p) => spawnPos);
        }
        protected bool Execute(Caravan caravan)
        {
            Map map = GetOrGenerateMapUtility.GetOrGenerateMap(caravan.Tile, DefDatabase <WorldObjectDef> .GetNamed("WanderingCaravanEncounter"));

            if (!WanderingCaravansUtility.AllWanderingCaravansSpawnableInMap(map).TryRandomElement(out PawnKindDef wanderingCaravanDef))
            {
                return(false);
            }
            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out IntVec3 caravanSpot, out IntVec3 wanderingCaravansSpot);
            IEnumerable <Pawn> wanderingCaravans = this.GenerateWanderingCaravans(wanderingCaravanDef);
            Pawn    infoPawn = wanderingCaravans.First();
            DiaNode diaNode  = new DiaNode($"WanderingCaravan.WanderingCaravan_Spotted".Translate(infoPawn.LabelCap, caravan.LabelCap))
            {
                options =
                {
                    new DiaOption("WanderingCaravan.WanderingCaravan_Accept")
                    {
                        action = delegate
                        {
                            string plural = wanderingCaravans.Count() > 1 ? "ies" : "y";
                            CaravanEnterMapUtility.Enter(caravan, map, pawn => CellFinder.RandomSpawnCellForPawnNear(caravanSpot, map));
                            Messages.Message($"WanderingCaravan.WanderingCaravan_Accepted".Translate(TimedForcedExit.GetForceExitAndRemoveMapCountdownTimeLeftString(60000), infoPawn.LabelCap, plural), infoPawn, MessageTypeDefOf.PositiveEvent);
                            ((WorldObject)map.ParentHolder).GetComponent <TimedForcedExit>().StartForceExitAndRemoveMapCountdown();
                        },
                        resolveTree = true
                    }, new DiaOption("WanderingCaravan.WanderingCaravan_Reject".Translate())
                    {
                        resolveTree = true
                    }
                }
            };

            Find.WindowStack.Add(new Dialog_NodeTree(diaNode, true, false, $"WanderingCaravan.WanderingCaravan_Title".Translate(infoPawn.LabelCap)));
            this.SpawnPawns(wanderingCaravans, map, wanderingCaravansSpot);
            return(true);
        }
        private void DoArrivalAction(Caravan caravan)
        {
            bool flag = !mapParent.HasMap;

            Map  orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(mapParent.Tile, null);
            Pawn t             = caravan.PawnsListForReading[0];

            TaggedString letterText    = null;
            TaggedString letterCaption = null;
            LetterDef    letterDef     = LetterDefOf.NeutralEvent;

            if (flag)
            {
                if (mapParent.Faction == null)
                {
                    letterCaption = "LetterLabelCaravanEnteredUnownedPOI".Translate();
                    letterText    = "LetterCaravanEnteredUnownedPOI".Translate(caravan.Label).CapitalizeFirst();
                    letterDef     = LetterDefOf.NeutralEvent;
                }
                else
                {
                    letterCaption = "LetterLabelCaravanAttackedPOI".Translate();
                    letterText    = "LetterCaravanAttackedPOI".Translate(caravan.Label).CapitalizeFirst();
                    letterDef     = LetterDefOf.ThreatBig;
                }
            }

            AffectRelationsIfNeeded(ref letterText);
            Find.LetterStack.ReceiveLetter(letterCaption, letterText, letterDef, t, null, null);

            Map map = orGenerateMap;

            bool draftColonists = (mapParent.Faction != null && mapParent.Faction != Faction.OfPlayer);

            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists);
        }