public override void Notify_GeneratedByQuestGen(SitePart part, Slate slate, List <Rule> outExtraDescriptionRules, Dictionary <string, string> outExtraDescriptionConstants)
        {
            base.Notify_GeneratedByQuestGen(part, slate, outExtraDescriptionRules, outExtraDescriptionConstants);
            Pawn pawn = PrisonerWillingToJoinQuestUtility.GeneratePrisoner(part.site.Tile, part.site.Faction);

            part.things = new ThingOwner <Pawn>(part, oneStackOnly: true);
            part.things.TryAdd(pawn);
            PawnRelationUtility.Notify_PawnsSeenByPlayer(Gen.YieldSingle(pawn), out var pawnRelationsInfo, informEvenIfSeenBefore: true, writeSeenPawnsNames: false);
            string output = (pawnRelationsInfo.NullOrEmpty() ? "" : ((string)("\n\n" + "PawnHasTheseRelationshipsWithColonists".Translate(pawn.LabelShort, pawn) + "\n\n" + pawnRelationsInfo)));

            slate.Set("prisoner", pawn);
            outExtraDescriptionRules.Add(new Rule_String("prisonerFullRelationInfo", output));
        }
            internal void <> m__0()
            {
                SettlementBase settlementBase = CaravanVisitUtility.SettlementVisitedNow(this.caravan);

                if (settlementBase != null && settlementBase.CanTradeNow)
                {
                    Find.WindowStack.Add(new Dialog_Trade(this.bestNegotiator, settlementBase, false));
                    PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(settlementBase.Goods.OfType <Pawn>(), "LetterRelatedPawnsTradingWithSettlement".Translate(new object[]
                    {
                        Faction.OfPlayer.def.pawnsPlural
                    }), LetterDefOf.NeutralEvent, false, true);
                }
            }
        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);
        }
Esempio n. 4
0
    public static TaggedString AppendContractDetails(TaggedString text, Pawn pawn)
    {
        var tenantComp    = pawn.GetTenantComponent();
        var stringBuilder = new StringBuilder(text);

        stringBuilder.AppendLine();
        stringBuilder.Append("RequestForTenancyContract".Translate(tenantComp.ContractLength / 60000,
                                                                   tenantComp.Payment, pawn.Named("PAWN")));
        text = stringBuilder.ToString();
        text = text.AdjustedFor(pawn);
        text = AppendPawnDescription(text, pawn);
        PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, pawn);
        return(text);
    }
        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);
        }
Esempio n. 6
0
        // Token: 0x06000EB5 RID: 3765 RVA: 0x0006D808 File Offset: 0x0006BC08
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            if (!this.TryFindEntryCell(map, out IntVec3 loc))
            {
                return(false);
            }
            Gender?gender = null;

            if (this.def.pawnFixedGender != Gender.None)
            {
                gender = new Gender?(this.def.pawnFixedGender);
            }
            PawnKindDef pawnKind = this.def.pawnKind;
            Faction     ofPlayer = Faction.OfPlayer;

            //Log.Message(string.Format("{0}", ofPlayer.def.defName));
            var list = (from def in DefDatabase <PawnKindDef> .AllDefs
                        where ((def.race == ofPlayer.def.basicMemberKind.race) && (def.defName.Contains("StrangerInBlack")))
                        select def).ToList();

            if (list.Count > 0)
            {
                pawnKind = list.RandomElement <PawnKindDef>();
            }
            else
            {
                list = (from def in DefDatabase <PawnKindDef> .AllDefs
                        where ((def.defName.Contains("StrangerInBlack")))
                        select def).ToList();
                pawnKind = list.RandomElement <PawnKindDef>();
                //pawnKind = DefDatabase<PawnKindDef>.GetNamedSilentFail("StrangerInBlack");
            }

            pawnKind.defaultFactionType = ofPlayer.def;
            //Log.Message(string.Format("{0}", pawnKind.defName));
            bool   pawnMustBeCapableOfViolence = this.def.pawnMustBeCapableOfViolence;
            Gender?fixedGender            = gender;
            PawnGenerationRequest request = new PawnGenerationRequest(pawnKind, ofPlayer, PawnGenerationContext.NonPlayer, -1, true, false, false, false, true, pawnMustBeCapableOfViolence, 20f, false, true, true, false, false, false, false);
            Pawn pawn = PawnGenerator.GeneratePawn(request);

            GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            TaggedString text  = this.def.letterText.Formatted(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN");
            TaggedString label = this.def.letterLabel.Formatted(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN");

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.PositiveEvent, pawn, null, null);
            return(true);
        }
        public override void SendLetter(Quest quest, Pawn pawn)
        {
            TaggedString label = "LetterLabelWandererJoins".Translate(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN", true);
            TaggedString text  = "LetterWandererJoins".Translate(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN", true);

            QuestNode_Root_WandererJoin_WalkIn.AppendCharityInfoToLetter("JoinerCharityInfo".Translate(pawn), ref text);
            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            ChoiceLetter_AcceptJoiner choiceLetter_AcceptJoiner = (ChoiceLetter_AcceptJoiner)LetterMaker.MakeLetter(label, text, LetterDefOf.AcceptJoiner, null, null);

            choiceLetter_AcceptJoiner.signalAccept = this.signalAccept;
            choiceLetter_AcceptJoiner.signalReject = this.signalReject;
            choiceLetter_AcceptJoiner.quest        = quest;
            choiceLetter_AcceptJoiner.StartTimeout(60000);
            Find.LetterStack.ReceiveLetter(choiceLetter_AcceptJoiner, null);
        }
Esempio n. 8
0
        public static IEnumerable <Rule> RulesForPawn(string pawnSymbol, Pawn pawn, Dictionary <string, string> constants = null, bool addRelationInfoSymbol = true, bool addTags = true)
        {
            if (pawn == null)
            {
                Log.ErrorOnce($"Tried to insert rule {pawnSymbol} for null pawn", 16015097);
                return(Enumerable.Empty <Rule>());
            }
            TaggedString text = "";

            if (addRelationInfoSymbol)
            {
                PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, pawn);
            }
            return(RulesForPawn(pawnSymbol, pawn.Name, (pawn.story != null) ? pawn.story.Title : null, pawn.kindDef, pawn.gender, pawn.Faction, pawn.ageTracker.AgeBiologicalYears, pawn.ageTracker.AgeChronologicalYears, text, PawnUtility.EverBeenColonistOrTameAnimal(pawn), PawnUtility.EverBeenQuestLodger(pawn), pawn.Faction != null && pawn.Faction.leader == pawn, (pawn.royalty != null) ? pawn.royalty.AllTitlesForReading : null, constants, addTags));
        }
        /// <summary>Candidates the score pairs.</summary> ???
        /// <param name="pawn">The pawn.</param>
        /// <param name="candidateList">The candidate list.</param>
        /// <returns></returns>
        public static Dictionary <int, Pawn> CandidateScorePairs(Pawn pawn, List <Pawn> candidateList)
        {
            Dictionary <int, Pawn> dictionary = new Dictionary <int, Pawn>();

            for (int i = 0; i < candidateList.Count; i++)
            {
                Pawn            val = candidateList[i];
                PawnRelationDef mostImportantRelation = PawnRelationUtility.GetMostImportantRelation(pawn, val);
                int             num  = pawn.relations.OpinionOf(val);
                int             num2 = val.relations.OpinionOf(pawn);
                int             key  = Mathf.RoundToInt(mostImportantRelation.importance + (float)num + (float)num2);
                dictionary.Add(key, val);
            }
            return(dictionary);
        }
Esempio n. 10
0
        public void InitializeRelationshipsForStartingPawns(List <Pawn> pawns, List <CustomPawn> correspondingCustomPawns)
        {
            CreateParentChildPawnsForStartingPawns(pawns, correspondingCustomPawns);
            InitializeParentChildGroupsForStartingPawns(pawns, correspondingCustomPawns);
            // Create a map so that we can lookup custom pawns based on their matching original pawn.
            Dictionary <Pawn, CustomPawn> pawnToCustomPawnDictionary = new Dictionary <Pawn, CustomPawn>();
            int pawnCount = pawns.Count;

            for (int i = 0; i < pawns.Count; i++)
            {
                pawnToCustomPawnDictionary.Add(pawns[i], correspondingCustomPawns[i]);
            }

            // Go through each pawn and check for relationships between it and all other pawns.
            foreach (Pawn pawn in pawns)
            {
                foreach (Pawn other in pawns)
                {
                    if (pawn == other)
                    {
                        continue;
                    }

                    // Find the corresponding pawn facades.
                    CustomPawn thisCustomPawn  = pawnToCustomPawnDictionary[pawn];
                    CustomPawn otherCustomPawn = pawnToCustomPawnDictionary[other];

                    // Go through each relationship between the two pawns.
                    foreach (PawnRelationDef def in PawnRelationUtility.GetRelations(pawn, other))
                    {
                        // Don't add blood relations.
                        if (def.familyByBloodRelation)
                        {
                            continue;
                        }
                        if (def.implied)
                        {
                            continue;
                        }
                        // Otherwise, if no relationship records exists for this relationship, add it.
                        if (!relationships.Contains(def, thisCustomPawn, otherCustomPawn))
                        {
                            relationships.Add(new CustomRelationship(def, FindInverseRelationship(def), thisCustomPawn, otherCustomPawn));
                        }
                    }
                }
            }
        }
Esempio n. 11
0
            public static void ShowWandererJoinDialog(Pawn pawn, IntVec3 spawnSpot, Map map)
            {
                // Added option to reject wanderer

                string textAsk = "WandererInitial".Translate(pawn.Faction.Name, pawn.GetTitle().ToLower(), GenText.ToCommaList(pawn.story.traits.allTraits.Select(t => t.Label)));

                textAsk = textAsk.AdjustedFor(pawn);
                PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref textAsk, pawn);
                DiaNode nodeAsk    = new DiaNode(textAsk);
                var     textAccept = "RescuedInitial_Accept".Translate();

                textAccept = textAccept.AdjustedFor(pawn);

                DiaOption optionAccept = new DiaOption(textAccept);

                optionAccept.action = () =>
                {
                    if (Find.WorldPawns.Contains(pawn))
                    {
                        Find.WorldPawns.RemovePawn(pawn);
                    }
                    GenSpawn.Spawn(pawn, spawnSpot, map);
                    if (pawn.Faction != Faction.OfPlayer)
                    {
                        if (pawn.Faction != null && pawn == pawn.Faction.leader)
                        {
                            pawn.Faction.GenerateNewLeader();
                        }
                        pawn.SetFaction(Faction.OfPlayer);
                    }

                    CameraJumper.TryJump(pawn);
                };
                optionAccept.resolveTree = true;
                nodeAsk.options.Add(optionAccept);

                var textReject = "RescuedInitial_Reject".Translate();

                textReject = textReject.AdjustedFor(pawn);

                DiaOption optionReject = new DiaOption(textReject);

                optionReject.action      = () => { GuestUtility.BreakupRelations(pawn); };
                optionReject.resolveTree = true;

                nodeAsk.options.Add(optionReject);
                Find.WindowStack.Add(new Dialog_NodeTree(nodeAsk, true));
            }
Esempio n. 12
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);
        }
Esempio n. 13
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            if (!base.TryResolveParms(parms))
            {
                return(false);
            }
            IntVec3 travelDest;

            if (!RCellFinder.TryFindTravelDestFrom(parms.spawnCenter, map, out travelDest))
            {
                Log.Warning("Failed to do traveler incident from " + parms.spawnCenter + ": Couldn't find anywhere for the traveler to go.", false);
                return(false);
            }
            List <Pawn> list = base.SpawnPawns(parms);

            if (list.Count == 0)
            {
                return(false);
            }
            string text;

            if (list.Count == 1)
            {
                text = "SingleTravelerPassing".Translate(list[0].story.Title, parms.faction.Name, list[0].Name.ToStringFull, list[0].Named("PAWN"));
                text = text.AdjustedFor(list[0], "PAWN");
            }
            else
            {
                text = "GroupTravelersPassing".Translate(parms.faction.Name);
            }

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

            Messages.Message(text, list[0], MessageTypeDefOf.NeutralEvent, true);
            LordJob_TravelAndExit lordJob = new LordJob_TravelAndExit(travelDest);

            LordMaker.MakeNewLord(parms.faction, lordJob, map, list);
            PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(list, "LetterRelatedPawnsNeutralGroup".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, true, true);
            Find.LetterStack.ReceiveLetter("Traveler", text, LetterDefOf.NeutralEvent, list[0], parms.faction, null);
            return(true);
        }
Esempio n. 14
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);
        }
Esempio n. 15
0
        private static void AttackNow(Caravan caravan, SettlementBase settlement)
        {
            Pawn   t             = caravan.PawnsListForReading[0];
            bool   flag          = !settlement.HasMap;
            Map    orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(settlement.Tile, null);
            string label         = "LetterLabelCaravanEnteredEnemyBase".Translate();
            string text          = "LetterCaravanEnteredEnemyBase".Translate(caravan.Label, settlement.Label).CapitalizeFirst();

            SettlementUtility.AffectRelationsOnAttacked(settlement, ref text);
            if (flag)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(orGenerateMap.mapPawns.AllPawns, ref label, ref text, "LetterRelatedPawnsSettlement".Translate(Faction.OfPlayer.def.pawnsPlural), true, true);
            }
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, t, settlement.Faction, null);
            CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, true, null);
        }
Esempio n. 16
0
        private static void ShowDialog(Pawn wanderer, Action accept)
        {
            string text = "PoliteWandererJoin".Translate(wanderer.story.Title.ToLower(), wanderer.ageTracker.AgeBiologicalYears);

            text = text.AdjustedFor(wanderer);
            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, wanderer);
            var dlg          = new DiaNode(text);
            var acceptOption = new DiaOption("PoliteWandererJoinAccept".Translate());
            var rejectOption = new DiaOption("PoliteWandererJoinReject".Translate());

            acceptOption.action      = accept;
            acceptOption.resolveTree = true;
            rejectOption.resolveTree = true;
            dlg.options.Add(acceptOption);
            dlg.options.Add(rejectOption);
            Find.WindowStack.Add(new Dialog_NodeTree(dlg, true));
        }
Esempio n. 17
0
        public override float Calculate(Pawn observer, Pawn assessed)
        {
            float incestFactor = 1f;
            List <PawnRelationDef> relations = PawnRelationUtility.GetRelations(observer, assessed).ToList();
            PawnRelationDef        relation  = relations[0];

            for (int i = 0; i < relations.Count(); i++)
            {
                if (relations[i].incestOpinionOffset > relation.incestOpinionOffset)
                {
                    relation = relations[i];
                }
            }
            incestFactor = 1f / (Mathf.Abs(relation.incestOpinionOffset) + 1);

            return(incestFactor);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map     map = (Map)parms.target;
            IntVec3 loc;

            if (!this.TryFindEntryCell(map, out loc))
            {
                return(false);
            }
            Faction faction;

            if (!this.TryFindFormerFaction(out faction))
            {
                return(false);
            }
            Pawn pawn = PawnGenerator.GeneratePawn(PawnKindDefOf.WildMan, faction);

            pawn.SetFaction(null, null);
            GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            string label = this.def.letterLabel.Formatted(pawn.LabelShort, pawn.Named("PAWN"));
            string text  = this.def.letterText.Formatted(pawn.LabelShort, pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN").CapitalizeFirst();

            if (Quote != null)
            {
                text += "\n\n";
                var q  = Quote;
                var l1 = "female";
                var l2 = "male";
                if (pawn.gender == Gender.Female)
                {
                    l1 = "male";
                    l2 = "female";
                }
                var a = Quote.IndexOf("{#" + l1 + "}", StringComparison.InvariantCultureIgnoreCase);
                var b = Quote.IndexOf("{/" + l1 + "}", StringComparison.InvariantCultureIgnoreCase);
                q     = Quote.Remove(a, b - a + l1.Length + 3);
                q     = q.Replace("{#" + l2 + "}", "");
                q     = q.Replace("{/" + l2 + "}", "");
                text += q;
            }

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, this.def.letterDef, pawn, null, null);
            return(true);
        }
Esempio n. 19
0
        // Token: 0x060000B1 RID: 177 RVA: 0x000061A4 File Offset: 0x000043A4
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map     map = (Map)parms.target;
            IntVec3 loc;

            if (!this.TryFindEntryCell(map, out loc))
            {
                return(false);
            }
            Gender?gender = null;

            if (this.def.pawnFixedGender != Gender.None)
            {
                gender = new Gender?(this.def.pawnFixedGender);
            }
            PawnKindDef        pawnKindDef = this.def.pawnKind;
            Faction            ofPlayer    = Faction.OfPlayer;
            List <PawnKindDef> list        = (from def in DefDatabase <PawnKindDef> .AllDefs
                                              where def.race == ofPlayer.def.basicMemberKind.race && def.defName.Contains("BKRescuer")
                                              select def).ToList <PawnKindDef>();

            if (list.Count > 0)
            {
                pawnKindDef = list.RandomElement <PawnKindDef>();
            }
            else
            {
                list = (from def in DefDatabase <PawnKindDef> .AllDefs
                        where def.defName.Contains("BKRescuer")
                        select def).ToList <PawnKindDef>();
                pawnKindDef = list.RandomElement <PawnKindDef>();
            }
            pawnKindDef.defaultFactionType = ofPlayer.def;
            bool   pawnMustBeCapableOfViolence = this.def.pawnMustBeCapableOfViolence;
            Gender?gender2 = gender;
            Pawn   pawn    = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKindDef, ofPlayer, PawnGenerationContext.NonPlayer, -1, true, false, false, false, true, pawnMustBeCapableOfViolence, 20f, false, true, true, false, false, false, false, false, 0, null, 1, null, null, null, null, null, null, null, gender2, null, null));

            GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            TaggedString text  = GenText.AdjustedFor(GrammarResolverSimpleStringExtensions.Formatted(this.def.letterText, pawn.Named("PAWN")), pawn, "PAWN");
            TaggedString text2 = GenText.AdjustedFor(GrammarResolverSimpleStringExtensions.Formatted(this.def.letterLabel, pawn.Named("PAWN")), pawn, "PAWN");

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref text2, pawn);
            Find.LetterStack.ReceiveLetter(text2, text, LetterDefOf.PositiveEvent, pawn, null, null);
            return(true);
        }
        public static Map SetupCaravanAttackMap(Caravan caravan, List <Pawn> enemies, bool sendLetterIfRelatedPawns)
        {
            int num = CalculateIncidentMapSize(caravan.PawnsListForReading, enemies);
            Map map = GetOrGenerateMapForIncident(caravan, new IntVec3(num, 1, num), WorldObjectDefOf.Ambush);

            MultipleCaravansCellFinder.FindStartingCellsFor2Groups(map, out var playerStartingSpot, out var second);
            CaravanEnterMapUtility.Enter(caravan, map, (Pawn x) => CellFinder.RandomSpawnCellForPawnNear(playerStartingSpot, map), CaravanDropInventoryMode.DoNotDrop, draftColonists: true);
            for (int i = 0; i < enemies.Count; i++)
            {
                IntVec3 loc = CellFinder.RandomSpawnCellForPawnNear(second, map);
                GenSpawn.Spawn(enemies[i], loc, map, Rot4.Random);
            }
            if (sendLetterIfRelatedPawns)
            {
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(enemies, "LetterRelatedPawnsGroupGeneric".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true);
            }
            return(map);
        }
Esempio n. 21
0
        public override void Arrived(List <ActiveDropPodInfo> pods, int tile)
        {
            Thing lookTarget    = TransportPodsArrivalActionUtility.GetLookTarget(pods);
            bool  num           = !site.HasMap;
            Map   orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, CaravanArrivalAction_VisitSite.MapSize, null);

            if (num)
            {
                Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
                PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true);
            }
            if (site.Faction != null && site.Faction != Faction.OfPlayer)
            {
                site.Faction.TrySetRelationKind(Faction.OfPlayer, FactionRelationKind.Hostile);
            }
            Messages.Message("MessageTransportPodsArrived".Translate(), lookTarget, MessageTypeDefOf.TaskCompletion);
            arrivalMode.Worker.TravelingTransportPodsArrived(pods, orGenerateMap);
        }
Esempio n. 22
0
        private static float MinPossibleAgeGapAtMinAgeToGenerateAsPackMates(Pawn p1, Pawn p2)
        {
            float atChronologicalAge = p1.ageTracker.AgeChronologicalYearsFloat - 14f;

            if ((double)atChronologicalAge < 0.0)
            {
                Log.Warning("at < 0", false);
                return(0.0f);
            }
            float num1 = PawnRelationUtility.MaxPossibleBioAgeAt(p2.ageTracker.AgeBiologicalYearsFloat, p2.ageTracker.AgeChronologicalYearsFloat, atChronologicalAge);
            float num2 = PawnRelationUtility.MinPossibleBioAgeAt(p2.ageTracker.AgeBiologicalYearsFloat, atChronologicalAge);

            if ((double)num1 < 0.0 || (double)num1 < 14.0)
            {
                return(-1f);
            }
            return((double)num2 <= 14.0 ? 0.0f : num2 - 14f);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map map = (Map)parms.target;

            if (!this.CanSpawnJoiner(map))
            {
                return(false);
            }
            Pawn pawn = this.GeneratePawn();

            this.SpawnJoiner(map, pawn);
            pawn.health.AddHediff(HediffDef.Named("AA_MimeHediff"), null, null, null);
            TaggedString baseLetterText  = this.def.letterText.Formatted(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN", true);
            TaggedString baseLetterLabel = this.def.letterLabel.Formatted(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN", true);

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref baseLetterText, ref baseLetterLabel, pawn);
            base.SendStandardLetter(baseLetterLabel, baseLetterText, LetterDefOf.PositiveEvent, parms, pawn, Array.Empty <NamedArgument>());
            return(true);
        }
Esempio n. 24
0
        public static bool TryExecuteWorkerPrefix(IncidentWorker_WildManWandersIn __instance, IncidentParms parms, ref bool __result)
        {
            Map     map = (Map)parms.target;
            IntVec3 loc;

            if (!(CellFinder.TryFindRandomEdgeCellWith((IntVec3 c) => map.reachability.CanReachColony(c), map, CellFinder.EdgeRoadChance_Ignore, out loc)))
            {
                __result = false;
                return(false);
            }
            Faction faction;

            if (!(Find.FactionManager.TryGetRandomNonColonyHumanlikeFaction(out faction, false, true, TechLevel.Undefined)))
            {
                __result = false;
                return(false);
            }
            PawnKindDef kindDef;

            if (Rand.Value > 0.5)
            {
                kindDef = DragonianPawnKindDefOf.Dragonian_Male;
            }
            else
            {
                kindDef = DragonianPawnKindDefOf.Dragonian_Female;
            }

            Faction factionDragonian = Find.FactionManager.AllFactionsListForReading.FirstOrDefault(x => x.def.defName == "Dragonians_Hidden");

            Pawn pawn = PawnGenerator.GeneratePawn(kindDef, factionDragonian != null ? factionDragonian : faction);

            pawn.SetFaction(null, null);
            GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            pawn.kindDef = PawnKindDefOf.WildMan;
            TaggedString label = __instance.def.letterLabel.Formatted(pawn.LabelShort, pawn.Named("PAWN"));
            TaggedString text  = __instance.def.letterText.Formatted(pawn.LabelShort, pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN").CapitalizeFirst();

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, __instance.def.letterDef, pawn, null, null);
            __result = true;
            return(false);
        }
Esempio n. 25
0
        public override void Execute()
        {
            try
            {
                var request = new PawnGenerationRequest(
                    _kindDef,
                    Faction.OfPlayer,
                    allowFood: false,
                    mustBeCapableOfViolence: true,
                    fixedIdeo: Find.FactionManager.OfPlayer.ideos.GetRandomIdeoForNewPawn()
                    );

                Pawn pawn = PawnGenerator.GeneratePawn(request);

                if (!(pawn.Name is NameTriple name))
                {
                    TkUtils.Logger.Warn("Pawn name is not a name triple!");

                    return;
                }

                PurchaseHelper.SpawnPawn(pawn, _loc, _map);
                pawn.Name = new NameTriple(name.First ?? string.Empty, Viewer.username, name.Last ?? string.Empty);
                TaggedString title = "TKUtils.PawnLetter.Title".Localize();
                TaggedString text  = "TKUtils.PawnLetter.Description".LocalizeKeyed(Viewer.username);
                PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref title, pawn);

                Find.LetterStack.ReceiveLetter(title, text, LetterDefOf.PositiveEvent, pawn);
                Current.Game.GetComponent <GameComponentPawns>().AssignUserToPawn(Viewer.username, pawn);

                if (TkSettings.EasterEggs && Basket.TryGetEggFor(Viewer.username, out IEasterEgg egg) && Rand.Chance(egg.Chance) && egg.IsPossible(storeIncident, Viewer))
                {
                    egg.Execute(Viewer, pawn);
                }

                Viewer.Charge(_pawnKindItem.Cost, _pawnKindItem.Data?.KarmaType ?? storeIncident.karmaType);
                MessageHelper.SendConfirmation(Viewer.username, "TKUtils.BuyPawn.Confirmation".Localize());
            }
            catch (Exception e)
            {
                TkUtils.Logger.Error("Could not execute buy pawn", e);
            }
        }
Esempio n. 26
0
 public override void Arrived(int tile)
 {
     LongEventHandler.QueueLongEvent(delegate()
     {
         Map map            = GetOrGenerateMapUtility.GetOrGenerateMap(tile, null);
         TaggedString label = "LetterLabelCaravanEnteredEnemyBase".Translate();
         TaggedString text  = "LetterTransportPodsLandedInEnemyBase".Translate(settlement.Label).CapitalizeFirst();
         SettlementUtility.AffectRelationsOnAttacked(settlement, ref text);
         if (!settlement.HasMap)
         {
             Find.TickManager.Notify_GeneratedPotentiallyHostileMap();
             PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter(map.mapPawns.AllPawns, ref label, ref text, "LetterRelatedPawnsInMapWherePlayerLanded".Translate(Faction.OfPlayer.def.pawnsPlural), true, true);
         }
         Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, vehicle, settlement.Faction, null, null, null);
         AerialVehicleInFlight aerialVehicle = vehicle.GetAerialVehicle();
         arrivalModeDef.Worker.VehicleArrived(aerialVehicle, launchProtocol, settlement.Map);
         aerialVehicle.Destroy();
     }, "GeneratingMap", false, null, true);
 }
        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 LetterDef letterDef, out LookTargets allLookTargets);
                List <HediffDef> list = null;
                foreach (SitePart part in site.parts)
                {
                    if (!part.def.arrivedLetterHediffHyperlinks.NullOrEmpty())
                    {
                        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);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map     map = (Map)parms.target;
            IntVec3 loc;

            if (!this.TryFindEntryCell(map, out loc))
            {
                return(false);
            }
            Gender?gender = null;

            if (this.def.pawnFixedGender != Gender.None)
            {
                gender = new Gender?(this.def.pawnFixedGender);
            }
            PawnKindDef           pawnKind   = PawnKindDefOf.Slave;
            Faction               ofAncients = Faction.OfAncients;
            bool                  pawnMustBeCapableOfViolence = this.def.pawnMustBeCapableOfViolence;
            Gender?               fixedGender = gender;
            PawnGenerationRequest request     = new PawnGenerationRequest(pawnKind, ofAncients, PawnGenerationContext.NonPlayer, -1, true, false, false, false, true, pawnMustBeCapableOfViolence, 20f, false, true, true, false, false, false, false, null, null, null, null, null, fixedGender, null, null);
            List <Pawn>           prisoners   = new List <Pawn>();
            Pawn                  pawn        = PawnGenerator.GeneratePawn(request);
            NameTriple            oldName     = pawn.Name as NameTriple;
            NameTriple            newName     = new NameTriple(oldName.First, viewer.username.CapitalizeFirst(), oldName.Last);

            pawn.Name = newName;
            pawn.guest.SetGuestStatus(Faction.OfPlayer, true);
            prisoners.Add(pawn);
            parms.raidArrivalMode = PawnsArrivalModeDefOf.CenterDrop;
            if (!parms.raidArrivalMode.Worker.TryResolveRaidSpawnCenter(parms))
            {
                return(false);
            }
            parms.raidArrivalMode.Worker.Arrive(prisoners, parms);
            //GenSpawn.Spawn(pawn, loc, map, WipeMode.Vanish);
            string text  = $"A prisoner named {viewer.username.CapitalizeFirst()} has escaped from maximum security space prison. Will you capture or let them go?";
            string label = "Prisoner: " + viewer.username.CapitalizeFirst();

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, pawn, null, null);
            return(true);
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            Map          map    = (Map)parms.target;
            List <Thing> things = ThingSetMakerDefOf.RefugeePod.root.Generate();
            IntVec3      intVec = DropCellFinder.RandomDropSpot(map);
            Pawn         pawn   = this.FindPawn(things);

            pawn.guest.getRescuedThoughtOnUndownedBecauseOfPlayer = true;
            string label = "LetterLabelRefugeePodCrash".Translate();
            string text  = "RefugeePodCrash".Translate(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN");

            text += "\n\n";
            if (pawn.Faction == null)
            {
                text += "RefugeePodCrash_Factionless".Translate(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN");
            }
            else if (pawn.Faction.HostileTo(Faction.OfPlayer))
            {
                text += "RefugeePodCrash_Hostile".Translate(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN");
            }
            else
            {
                text += "RefugeePodCrash_NonHostile".Translate(pawn.Named("PAWN")).AdjustedFor(pawn, "PAWN");
            }

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);

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

            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, new TargetInfo(intVec, map, false), null, null);
            ActiveDropPodInfo activeDropPodInfo = new ActiveDropPodInfo();

            activeDropPodInfo.innerContainer.TryAddRangeOrTransfer(things, true, false);
            activeDropPodInfo.openDelay = 180;
            activeDropPodInfo.leaveSlag = true;
            DropPodUtility.MakeDropPodAt(intVec, map, activeDropPodInfo);
            return(true);
        }
Esempio n. 30
0
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            var map    = (Map)parms.target;
            var things = ThingSetMakerDefOf.RefugeePod.root.Generate();
            var intVec = DropCellFinder.RandomDropSpot(map);
            var pawn   = FindPawn(things);

            pawn.guest.getRescuedThoughtOnUndownedBecauseOfPlayer = true;
            var label = "LetterLabelRefugeePodCrash".Translate();
            var text  = "RefugeePodCrash".Translate(pawn.Named("PAWN")).AdjustedFor(pawn);

            text += "\n\n";
            if (pawn.Faction == null)
            {
                text += "RefugeePodCrash_Factionless".Translate(pawn.Named("PAWN")).AdjustedFor(pawn);
            }
            else if (pawn.Faction.HostileTo(Faction.OfPlayer))
            {
                text += "RefugeePodCrash_Hostile".Translate(pawn.Named("PAWN")).AdjustedFor(pawn);
            }
            else
            {
                text += "RefugeePodCrash_NonHostile".Translate(pawn.Named("PAWN")).AdjustedFor(pawn);
            }

            PawnRelationUtility.TryAppendRelationsWithColonistsInfo(ref text, ref label, pawn);
            Find.LetterStack.ReceiveLetter(label, text, LetterDefOf.NeutralEvent, new TargetInfo(intVec, map));
            var activeDropPodInfo = new ActiveDropPodInfo();

            activeDropPodInfo.innerContainer.TryAddRangeOrTransfer(things);
            activeDropPodInfo.openDelay = 180;
            activeDropPodInfo.leaveSlag = true;
            DropPodUtility.MakeDropPodAt(intVec, map, activeDropPodInfo);

            //Give the pawn the Scuttlebug Infection
            var torso  = pawn.health.hediffSet.GetNotMissingParts().First(bpr => bpr.def == BodyPartDefOf.Torso);
            var unused = pawn.health.hediffSet.GetNotMissingParts().First(bpr => bpr.def == BodyPartDefOf.Head);

            pawn.health.AddHediff(HediffDef.Named("ScuttlebugInfection"), torso);

            return(true);
        }