public override bool TryExecute(IncidentParms parms)
 {
     if (!TryResolveParms(parms))
     {
         return false;
     }
     var list = SpawnPawns(parms);
     if (list.Count == 0)
     {
         return false;
     }
     IntVec3 chillSpot;
     RCellFinder.TryFindRandomSpotJustOutsideColony(list[0], out chillSpot);
     var lordJob = new LordJob_VisitColony(parms.faction, chillSpot);
     LordMaker.MakeNewLord(parms.faction, lordJob, list);
     string label;
     string text2;
     if (list.Count == 1)
     {
         label = "LetterLabelSingleVisitorArrives".Translate();
         text2 = "SingleVisitorArrives".Translate(list[0].story.adulthood.title.ToLower(), parms.faction.Name,
             list[0].Name, string.Empty);
         text2 = text2.AdjustedFor(list[0]);
     }
     else
     {
         var text3 = string.Empty;
         label = "LetterLabelGroupVisitorsArrive".Translate();
         text2 = "GroupVisitorsArrive".Translate(parms.faction.Name, text3);
     }
     Find.LetterStack.ReceiveLetter(label, text2, LetterType.Good, list[0]);
     return true;
 }
示例#2
0
        public override bool TryExecute(IncidentParms parms)
        {
            if (!this.TryResolveParms(parms))
            {
                return(false);
            }

            Pawn sora = TreasuresUtils.TryGetSoraGoodseller();

            if (sora == null)
            {
                sora = TreasuresUtils.GenSoraGoodseller(parms.faction);
            }
            else if (sora.Dead || sora.Spawned)
            {
                return(false);
            }
            else
            {
                sora.SetFaction(parms.faction);
            }

            List <Pawn> list = base.SpawnPawns(parms);

            list.Add(sora);
            GenSpawn.Spawn(sora, CellFinder.RandomClosewalkCellNear(parms.spawnCenter, 5));

            IntVec3 chillSpot;

            RCellFinder.TryFindRandomSpotJustOutsideColony(sora, out chillSpot);
            LordJob_VisitColony lordJob = new LordJob_VisitColony(parms.faction, chillSpot);

            LordMaker.MakeNewLord(parms.faction, lordJob, list);

            this.TryConvertOnePawnToSmallTrader(new List <Pawn> {
                sora
            }, parms.faction);

            Pawn   factionLeader = list.Find((Pawn x) => parms.faction.leader == x);
            string label;
            string letterText;

            string text  = "SingleVisitorArrivesTraderInfo".Translate();
            string text2 = (factionLeader == null) ? string.Empty : "SingleVisitorArrivesLeaderInfo".Translate();

            label      = "LetterLabelSingleVisitorArrives".Translate();
            letterText = "SingleVisitorArrives".Translate(new object[]
            {
                sora.story.adulthood.title.ToLower(),
                parms.faction.Name,
                sora.Name,
                text,
                text2
            });
            letterText = letterText.AdjustedFor(sora);

            Find.LetterStack.ReceiveLetter(label, letterText, LetterType.Good, sora);
            return(true);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            if (!base.TryResolveParms(parms))
            {
                return(false);
            }
            List <Pawn> list = base.SpawnPawns(parms);

            if (list.Count == 0)
            {
                return(false);
            }
            IntVec3 chillSpot;

            RCellFinder.TryFindRandomSpotJustOutsideColony(list[0], out chillSpot);
            LordJob_VisitColony lordJob = new LordJob_VisitColony(parms.faction, chillSpot);

            LordMaker.MakeNewLord(parms.faction, lordJob, map, list);
            bool flag = false;

            if (Rand.Value < 0.75f)
            {
                flag = this.TryConvertOnePawnToSmallTrader(list, parms.faction, map);
            }
            Pawn   pawn = list.Find((Pawn x) => parms.faction.leader == x);
            string label;
            string text;

            if (list.Count == 1)
            {
                string value  = (!flag) ? string.Empty : ("\n\n" + "SingleVisitorArrivesTraderInfo".Translate(list[0].Named("PAWN")).AdjustedFor(list[0], "PAWN"));
                string value2 = (pawn == null) ? string.Empty : ("\n\n" + "SingleVisitorArrivesLeaderInfo".Translate(list[0].Named("PAWN")).AdjustedFor(list[0], "PAWN"));
                label = "LetterLabelSingleVisitorArrives".Translate();
                text  = "SingleVisitorArrives".Translate(list[0].story.Title, parms.faction.Name, list[0].Name.ToStringFull, value, value2, list[0].Named("PAWN")).AdjustedFor(list[0], "PAWN");
            }
            else
            {
                string value3 = (!flag) ? string.Empty : ("\n\n" + "GroupVisitorsArriveTraderInfo".Translate());
                string value4 = (pawn == null) ? string.Empty : ("\n\n" + "GroupVisitorsArriveLeaderInfo".Translate(pawn.LabelShort, pawn));
                label = "LetterLabelGroupVisitorsArrive".Translate();
                text  = "GroupVisitorsArrive".Translate(parms.faction.Name, value3, value4);
            }

            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(list, ref label, ref text, "LetterRelatedPawnsNeutralGroup".Translate(Faction.OfPlayer.def.pawnsPlural), true, true);

            if (Quote != null)
            {
                text += "\n\n";
                text += Quote;
            }

            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, list[0], parms.faction, null);
            return(true);
        }
        private bool ArrivalMode(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            List <Pawn> list = SpawnPawns(parms);

            if (list.Count == 0 || list.Count < 1)
            {
                return(false);
            }
            RCellFinder.TryFindRandomSpotJustOutsideColony(list[0], out IntVec3 result);
            LordJob_VisitColony lordJob = new LordJob_VisitColony(parms.faction, result);

            LordMaker.MakeNewLord(parms.faction, lordJob, map, list);
            Pawn pawn = list.RandomElement();

            CommunicationDialog_Pocahontas dialog = new CommunicationDialog_Pocahontas();

            dialog.id        = QuestsManager.Communications.UniqueIdManager.GetNextDialogID();
            dialog.CardLabel = "Pocahontas_CardLabel".Translate();
            dialog.Faction   = parms.faction;
            Pawn offerPawn = list.Where(p => p != pawn).RandomElement();
            CommOption_PawnOfferYes commOption_PawnOfferYes = new CommOption_PawnOfferYes();

            commOption_PawnOfferYes.OfferPawn = offerPawn;
            CommOption_DeclineDialog commOption_DeclineDialog = new CommOption_DeclineDialog();

            commOption_DeclineDialog.ExecuteOption = new CommOption_ChangeGoodWill(-35);
            dialog.Options = new List <CommOption>();
            dialog.Options.Add(commOption_PawnOfferYes);
            dialog.Options.Add(commOption_DeclineDialog);

            Settlement settlement = Find.WorldObjects.Settlements.Where(s => s.Faction == parms.faction).RandomElement();
            string     text       = "PawnInfo".Translate().Formatted(offerPawn.Named("PAWN")).AdjustedFor(offerPawn);
            string     dialogDesc = string.Format(def.letterText, settlement.Name, parms.faction.Name, offerPawn.Name.ToStringFull, text, "ActualOnlyThisMap".Translate());

            dialog.Description = dialogDesc;

            dialog.ShowInConsole = false;
            QuestsManager.Communications.AddCommunication(dialog);
            QuestsManager.Communications.AddQuestPawn(pawn, dialog);

            Find.LetterStack.ReceiveLetter(def.letterLabel, dialogDesc, def.letterDef);

            return(true);
        }
        public override bool TryExecute(IncidentParms parms)
        {
            if (!this.TryResolveParms(parms))
            {
                return(false);
            }
            List <Pawn> list = base.SpawnPawns(parms);

            if (list.Count == 0)
            {
                return(false);
            }
            IntVec3 chillSpot;

            RCellFinder.TryFindRandomSpotJustOutsideColony(list[0], out chillSpot);
            LordJob_VisitColony lordJob = new LordJob_VisitColony(parms.faction, chillSpot);

            LordMaker.MakeNewLord(parms.faction, lordJob, list);
            bool flag = false;

            if (Rand.Value < TraderChance)
            {
                flag = this.TryConvertOnePawnToSmallTrader(list, parms.faction);
            }
            Pawn   pawn = list.Find((Pawn x) => parms.faction.leader == x);
            string label;
            string text3;

            if (list.Count == 1)
            {
                string text  = (!flag) ? string.Empty : "SingleVisitorArrivesTraderInfo".Translate();
                string text2 = (pawn == null) ? string.Empty : "SingleVisitorArrivesLeaderInfo".Translate();
                label = "LetterLabelSingleVisitorArrives".Translate();
                text3 = "SingleVisitorArrives".Translate(new object[]
                {
                    list[0].story.adulthood.title.ToLower(),
                    parms.faction.Name,
                    list[0].Name,
                    text,
                    text2
                });
                text3 = text3.AdjustedFor(list[0]);
            }
            else
            {
                string text4 = (!flag) ? string.Empty : "GroupVisitorsArriveTraderInfo".Translate();
                string text5 = (pawn == null) ? string.Empty : "GroupVisitorsArriveLeaderInfo".Translate(new object[]
                {
                    pawn.LabelShort
                });
                label = "LetterLabelGroupVisitorsArrive".Translate();
                text3 = "GroupVisitorsArrive".Translate(new object[]
                {
                    parms.faction.Name,
                    text4,
                    text5
                });
            }
            Find.LetterStack.ReceiveLetter(label, text3, LetterType.Good, list[0]);
            return(true);
        }