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); }
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); }
// 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); }
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); }
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)); } } } } }
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)); }
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); }
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); }
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); }
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); }
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)); }
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); }
// 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); }
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); }
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); }
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); }
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); } }
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); }
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); }