/// <summary> /// called when the initiator interacts with the specified recipient. /// </summary> /// <param name="initiator">The initiator.</param> /// <param name="recipient">The recipient.</param> /// <param name="extraSentencePacks">The extra sentence packs.</param> /// <param name="letterText">The letter text.</param> /// <param name="letterLabel">The letter label.</param> /// <param name="letterDef">The letter definition.</param> /// <param name="lookTargets">The look targets.</param> public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets) { base.Interacted(initiator, recipient, extraSentencePacks, out letterText, out letterLabel, out letterDef, out lookTargets); letterText = null; letterLabel = null; letterDef = null; SapienceLevel?saLevel = recipient?.GetQuantizedSapienceLevel(); if (saLevel == null) { return; } var saVariants = interaction.GetModExtension <SapientRulePackVariant>(); RulePackDef rulePackVariant = saVariants ?.GetRulePackVariant(saLevel.Value); //check if any variants are attached, if so add them to extra rule packs if (rulePackVariant != null) { extraSentencePacks.Add(rulePackVariant); } }
private bool BanMessage(Pawn pawnToBan, Thing instigator, bool haywire, LookTargets lookTargets, out Message message) { message = null; string ptbLabel = pawnToBan.LabelShort; string iLabel = instigator.LabelShort; if (pawnToBan.Faction == Faction.OfPlayer) { message = new Message("PawnBannedMessage".Translate(ptbLabel, iLabel), MessageTypeDefOf.NegativeEvent, lookTargets); } else { string text = ""; if (pawnToBan.Faction != null && pawnToBan.RaceProps.Humanlike) { text = (haywire) ? "RandomNonPlayerHumanlikeBannedMessage".Translate(pawnToBan.KindLabel, ptbLabel, iLabel) : "PawnBannedMessage".Translate(ptbLabel, iLabel); } else { text = (haywire) ? "RandomPawnBannedMessage".Translate(pawnToBan.KindLabel, iLabel) : "PawnBannedMessage".Translate(ptbLabel.CapitalizeFirst(), iLabel); } message = new Message(text, MessageTypeDefOf.CautionInput, lookTargets); } if (pawnToBan.IsWildMan()) { string text = (haywire) ? "RandomWildManBannedMessage".Translate(ptbLabel, iLabel) : "PawnBannedMessage".Translate(ptbLabel, iLabel); message = new Message("RandomWildManBannedMessage".Translate(ptbLabel, iLabel), MessageTypeDefOf.CautionInput, lookTargets); } return(message != null); }
public override void Notify_CaravanFormed(QuestSite site, Caravan caravan) { foreach (var pawn in savedPawns) { if (pawn != null && !pawn.Dead) { caravan.AddPawn(pawn, false); pawn.DestroyOrPassToWorld(); } } saved = true; ResetIcon(); Settlement settlement = Find.WorldObjects.Settlements.Where(delegate(Settlement settl) { return(settl.Faction == Faction && Find.WorldReachability.CanReach(site.Tile, settl.Tile)); }).OrderBy(x => Find.WorldGrid.ApproxDistanceInTiles(site.Tile, x.Tile)).FirstOrDefault(); if (settlement != null) { int arrivalTime = CaravanArrivalTimeEstimator.EstimatedTicksToArrive(site.Tile, settlement.Tile, caravan); TicksToPass = arrivalTime + (3 * 60000); UnlimitedTime = false; Find.LetterStack.ReceiveLetter("Quest_MissingPeople_Stage2Title".Translate(), "Quest_MissingPeople_Stage2".Translate(TicksToPass.ToStringTicksToDays("0.#")), LetterDefOf.PositiveEvent); site.Tile = settlement.Tile; Target = new LookTargets(site.Tile); } Current.Game.DeinitAndRemoveMap(site.Map); }
protected override bool TryExecuteWorker(IncidentParms parms) { bool result = false; List <IntVec3> targets = new List <IntVec3>(); int numOffset = Mathf.Min((int)(((Map)parms.target).wealthWatcher.WealthTotal / 100000), 7); int num = Rand.Range(1, 1 + numOffset); for (int i = 0; i < num; i++) { if (this.TryFindRandomPowerConduitInMap((Map)parms.target, out Building tempConduit)) { IntVec3 intVec = new IntVec3(tempConduit.Position.x, tempConduit.Position.y, tempConduit.Position.z); Rot4 rot = new Rot4(tempConduit.Rotation.AsByte); targets.Add(intVec); tempConduit.Destroy(DestroyMode.Deconstruct); if (Find.PlaySettings.autoRebuild && tempConduit.def.blueprintDef != null && tempConduit.def.IsResearchFinished && ((Map)parms.target).areaManager.Home[tempConduit.Position]) { if (GenConstruct.CanPlaceBlueprintAt(tempConduit.def, intVec, rot, (Map)parms.target, false, null).Accepted) { GenConstruct.PlaceBlueprintForBuild(tempConduit.def, intVec, (Map)parms.target, rot, Faction.OfPlayer, tempConduit.Stuff); } } } } if (!targets.NullOrEmpty()) { result = true; LookTargets letterTargets = new LookTargets(this.GetLetterTargets(targets, (Map)parms.target)); Find.LetterStack.ReceiveLetter(this.def.letterLabel, this.def.letterText, this.def.letterDef, letterTargets); } return(result); }
public override void Notify_QuestSignalReceived(Signal signal) { base.Notify_QuestSignalReceived(signal); if (!(signal.tag == inSignal)) { return; } LookTargets lookTargets = this.lookTargets; if (getLookTargetsFromSignal && !lookTargets.IsValid()) { SignalArgsUtility.TryGetLookTargets(signal.args, "SUBJECT", out lookTargets); } if (lookTargets.IsValid()) { if (select) { CameraJumper.TryJumpAndSelect(lookTargets.TryGetPrimaryTarget()); } else { CameraJumper.TryJump(lookTargets.TryGetPrimaryTarget()); } } }
private List <Thing> SpawnThings(out List <List <Thing> > groups, ref LookTargets targets) { groups = new List <List <Thing> >(); List <Thing> things = new List <Thing>(); foreach (ThingValue tv in spawnSettings.spawnList) { if (Rand.Chance(tv.chance)) { List <Thing> thingList = new List <Thing>(); int totalStack = tv.value; while (totalStack > 0) { ThingDef stuff = tv.ResolvedStuff; Thing thing = ThingMaker.MakeThing(tv.ThingDef, stuff); totalStack--; if (thing.TryGetQuality(out QualityCategory qc)) { thing.TryGetComp <CompQuality>().SetQuality(tv.QualityCategory, ArtGenerationContext.Outsider); } for (int i = 1; i < thing.def.stackLimit && totalStack > 0; i++) { totalStack--; thing.stackCount++; } targets.targets.Add(thing); things.Add(thing); thingList.Add(thing); } groups.Add(thingList); } } return(things); }
public static bool TryGetLookTargets(SignalArgs args, string name, out LookTargets lookTargets) { if (args.TryGetArg(name, out lookTargets)) { return(true); } if (args.TryGetArg(name, out Thing arg)) { lookTargets = arg; return(true); } if (args.TryGetArg(name, out WorldObject arg2)) { lookTargets = arg2; return(true); } if (args.TryGetArg(name, out GlobalTargetInfo arg3)) { lookTargets = arg3; return(true); } if (args.TryGetArg(name, out TargetInfo arg4)) { lookTargets = arg4; return(true); } lookTargets = LookTargets.Invalid; return(false); }
public static LookTargets ToLookTargets(IEnumerable <object> objects) { if (objects == null || !objects.Any()) { return(LookTargets.Invalid); } LookTargets lookTargets = new LookTargets(); foreach (object @object in objects) { if (@object is Thing) { lookTargets.targets.Add((Thing)@object); } else if (@object is WorldObject) { lookTargets.targets.Add((WorldObject)@object); } else if (@object is Map) { lookTargets.targets.Add(((Map)@object).Parent); } } return(lookTargets); }
public static LookTargets ToLookTargets(SlateRef <IEnumerable <object> > objects, Slate slate) { if (objects.GetValue(slate) == null || !objects.GetValue(slate).Any()) { return(LookTargets.Invalid); } LookTargets lookTargets = new LookTargets(); foreach (object item in objects.GetValue(slate)) { if (item is Thing) { lookTargets.targets.Add((Thing)item); } else if (item is WorldObject) { lookTargets.targets.Add((WorldObject)item); } else if (item is Map) { lookTargets.targets.Add(((Map)item).Parent); } } return(lookTargets); }
public void SpawnDropPod(IntVec3 root, Map map, ref LookTargets targets) { List <List <Thing> > groups = new List <List <Thing> >(); SpawnThings(out groups, ref targets); DropPodUtility.DropThingGroupsNear(root, map, groups, 140, false, true, true); }
private void GetNewLoversLetter(Pawn initiator, Pawn recipient, List <Pawn> initiatorOldLoversAndFiances, List <Pawn> recipientOldLoversAndFiances, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets) { bool flag = false; if ((initiator.GetSpouse() != null && !initiator.GetSpouse().Dead) || (recipient.GetSpouse() != null && !recipient.GetSpouse().Dead)) { letterLabel = "LetterLabelAffair".Translate(); letterDef = LetterDefOf.NegativeEvent; flag = true; } else { letterLabel = "LetterLabelNewLovers".Translate(); letterDef = LetterDefOf.PositiveEvent; } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("LetterNewLovers".Translate(initiator.Named("PAWN1"), recipient.Named("PAWN2"))); stringBuilder.AppendLine(); if (flag) { if (initiator.GetSpouse() != null) { stringBuilder.AppendLine("LetterAffair".Translate(initiator.LabelShort, initiator.GetSpouse().LabelShort, recipient.LabelShort, initiator.Named("PAWN1"), recipient.Named("PAWN2"), initiator.GetSpouse().Named("SPOUSE"))); } if (recipient.GetSpouse() != null) { if (stringBuilder.Length != 0) { stringBuilder.AppendLine(); } stringBuilder.AppendLine("LetterAffair".Translate(recipient.LabelShort, recipient.GetSpouse().LabelShort, initiator.LabelShort, recipient.Named("PAWN1"), recipient.GetSpouse().Named("SPOUSE"), initiator.Named("PAWN2"))); } } for (int i = 0; i < initiatorOldLoversAndFiances.Count; i++) { if (!initiatorOldLoversAndFiances[i].Dead) { if (stringBuilder.Length > 0) { stringBuilder.AppendLine(); } stringBuilder.AppendLine("LetterNoLongerLovers".Translate(initiator.LabelShort, initiatorOldLoversAndFiances[i].LabelShort, initiator.Named("PAWN1"), initiatorOldLoversAndFiances[i].Named("PAWN2"))); } } for (int j = 0; j < recipientOldLoversAndFiances.Count; j++) { if (!recipientOldLoversAndFiances[j].Dead) { if (stringBuilder.Length > 0) { stringBuilder.AppendLine(); } stringBuilder.AppendLine("LetterNoLongerLovers".Translate(recipient.LabelShort, recipientOldLoversAndFiances[j].LabelShort, recipient.Named("PAWN1"), recipientOldLoversAndFiances[j].Named("PAWN2"))); } } letterText = stringBuilder.ToString().TrimEndNewlines(); lookTargets = new LookTargets(initiator, recipient); }
private static bool Prefix(string text, LookTargets lookTargets, MessageTypeDef def) { if (def == MessageTypeDefOf.PawnDeath && lookTargets.TryGetPrimaryTarget().Thing is Pawn pawn && (pawn.IsEmptySleeve() || pawn.HasStack())) { return(false); } return(true); }
protected void SendStandardLetter(LookTargets lookTargets, Faction relatedFaction = null, params string[] textArgs) { if (this.def.letterLabel.NullOrEmpty() || this.def.letterText.NullOrEmpty()) { Log.Error("Sending standard incident letter with no label or text.", false); } string text = string.Format(this.def.letterText, textArgs).CapitalizeFirst(); Find.LetterStack.ReceiveLetter(this.def.letterLabel, text, this.def.letterDef, lookTargets, relatedFaction, null); }
protected override bool TryExecuteWorker(IncidentParms parms) { Map map = (Map)parms.target; IntVec3 IntVec = DropCellFinder.RandomDropSpot(map); LookTargets lookie = new LookTargets(IntVec, map); Thing thing = GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named("AM_AncientBuriedChunk"), null), IntVec, map, WipeMode.FullRefund); Find.LetterStack.ReceiveLetter("LetterLabelStrangeChunk".Translate(), "LetterStrangeChunk".Translate(), LetterDefOf.NeutralEvent, lookie, null, null); return(true); }
public void Notify_MapRemoved(Map map) { for (int i = 0; i < this.archivables.Count; i++) { LookTargets lookTargets = this.archivables[i].LookTargets; if (lookTargets != null) { lookTargets.Notify_MapRemoved(map); } } }
protected override void Enable(SignalArgs receivedArgs) { base.Enable(receivedArgs); resolvedLabel = receivedArgs.GetFormattedText(label); resolvedExplanation = receivedArgs.GetFormattedText(explanation); resolvedLookTargets = lookTargets; if (getLookTargetsFromSignal && !resolvedLookTargets.IsValid()) { SignalArgsUtility.TryGetLookTargets(receivedArgs, "SUBJECT", out resolvedLookTargets); } }
private void DoEnter(Caravan caravan, Site site) { LookTargets lookTargets = new LookTargets(caravan.PawnsListForReading); bool draftColonists = site.Faction == null || site.Faction.HostileTo(Faction.OfPlayer); bool num = !site.HasMap; Map orGenerateMap = GetOrGenerateMapUtility.GetOrGenerateMap(site.Tile, MapSize, null); if (num) { Find.TickManager.Notify_GeneratedPotentiallyHostileMap(); PawnRelationUtility.Notify_PawnsSeenByPlayer_Letter_Send(orGenerateMap.mapPawns.AllPawns, "LetterRelatedPawnsSite".Translate(Faction.OfPlayer.def.pawnsPlural), LetterDefOf.NeutralEvent, informEvenIfSeenBefore: true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst()); AppendThreatInfo(stringBuilder, site, orGenerateMap, out var letterDef, out var allLookTargets); TaggedString letterText = null; SettlementUtility.AffectRelationsOnAttacked_NewTmp(site, ref letterText); if (!letterText.NullOrEmpty()) { if (stringBuilder.Length > 0) { stringBuilder.AppendLine(); } stringBuilder.AppendLineTagged(letterText); } List <HediffDef> list = null; foreach (SitePart part in site.parts) { if (part.def.arrivedLetterHediffHyperlinks.NullOrEmpty()) { continue; } if (list == null) { list = new List <HediffDef>(); } foreach (HediffDef arrivedLetterHediffHyperlink in part.def.arrivedLetterHediffHyperlinks) { if (!list.Contains(arrivedLetterHediffHyperlink)) { list.Add(arrivedLetterHediffHyperlink); } } } ChoiceLetter choiceLetter = LetterMaker.MakeLetter("LetterLabelCaravanEnteredMap".Translate(site), stringBuilder.ToString(), letterDef ?? LetterDefOf.NeutralEvent, allLookTargets.IsValid() ? allLookTargets : lookTargets); choiceLetter.hyperlinkHediffDefs = list; Find.LetterStack.ReceiveLetter(choiceLetter); } else { Find.LetterStack.ReceiveLetter("LetterLabelCaravanEnteredMap".Translate(site), "LetterCaravanEnteredMap".Translate(caravan.Label, site).CapitalizeFirst(), LetterDefOf.NeutralEvent, lookTargets); } CaravanEnterMapUtility.Enter(caravan, orGenerateMap, CaravanEnterMode.Edge, CaravanDropInventoryMode.DoNotDrop, draftColonists); }
public static void ReceiveLetter_Prefix(ref LookTargets lookTargets) { // TODO: Handle multiple targets... if (lookTargets != null && lookTargets.PrimaryTarget.HasThing) { Thing thing = lookTargets.PrimaryTarget.Thing; if (thing != null && thing.Faction == null || !thing.Faction.IsPlayer) { lookTargets = new GlobalTargetInfo(thing.Position, thing.Map); } } }
public override void Notify_QuestSignalReceived(Signal signal) { base.Notify_QuestSignalReceived(signal); if (!(signal.tag == inSignal)) { return; } DiaNode diaNode = new DiaNode(signal.args.GetFormattedText(text)); LookTargets resolvedLookTargets = lookTargets; if (getLookTargetsFromSignal && !resolvedLookTargets.IsValid()) { SignalArgsUtility.TryGetLookTargets(signal.args, "SUBJECT", out resolvedLookTargets); } if (resolvedLookTargets.IsValid()) { DiaOption diaOption = new DiaOption("JumpToLocation".Translate()); diaOption.action = delegate { CameraJumper.TryJumpAndSelect(resolvedLookTargets.TryGetPrimaryTarget()); }; diaOption.resolveTree = true; diaNode.options.Add(diaOption); } if (options.Any()) { for (int i = 0; i < options.Count; i++) { int localIndex = i; DiaOption diaOption2 = new DiaOption(signal.args.GetFormattedText(options[i].text)); diaOption2.action = delegate { Find.SignalManager.SendSignal(new Signal(options[localIndex].outSignal)); }; diaOption2.resolveTree = true; diaNode.options.Add(diaOption2); } } else { DiaOption diaOption3 = new DiaOption("OK".Translate()); diaOption3.resolveTree = true; diaNode.options.Add(diaOption3); } TaggedString formattedText = signal.args.GetFormattedText(title); Find.WindowStack.Add(new Dialog_NodeTreeWithFactionInfo(diaNode, relatedFaction, delayInteractivity: true, radioMode, formattedText)); if (addToArchive) { Find.Archive.Add(new ArchivedDialog(diaNode.text, formattedText, relatedFaction)); } }
public static bool Prefix(LetterDef textLetterDef, LookTargets lookTargets) { if (textLetterDef == LetterDefOf.Death && lookTargets.PrimaryTarget.HasThing) { Pawn deadPawn = lookTargets.PrimaryTarget.Thing as Pawn; if (deadPawn != null && deadPawn.kindDef == MeeseeksDefOf.MeeseeksKind) { return(false); } } return(true); }
private static void ConditionalMessage(string text, LookTargets lookTargets, MessageTypeDef type, bool historical = true) { if (ModSettings.notifyOnFailure) { if (ModSettings.volatile_ForceAltMessage || ModSettings.FailureMaterialReturn == 1f) { Messages.Message(text.Split(new[] { '.' })[0] + ".", lookTargets, type, historical); } else { Messages.Message(text, lookTargets, type, historical); } } }
protected override bool TryExecuteWorker(IncidentParms parms) { if (!settings.Active) { return(false); } Faction faction = GetFaction(); List <Settlement> factionBases = Find.WorldObjects.Settlements.Where(x => x.Faction == faction && CaravanArrivalTimeEstimator.EstimatedTicksToArrive(Find.AnyPlayerHomeMap.Tile, x.Tile, null).TicksToDays() < 7).ToList(); if (factionBases.Count == 0) { return(false); } Settlement factionBase = factionBases.RandomElement(); if (Find.WorldObjects.WorldObjectAt(factionBase.Tile, QuestRim.WorldObjectDefOfLocal.QuestPlace) != null) { return(false); } Quest_ThingsHelp quest = new Quest_ThingsHelp { id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(), Faction = faction }; float marketValue = GenerateRequestItems(quest, Find.AnyPlayerHomeMap); quest.GenerateRewards(quest.GetQuestThingFilter(), new FloatRange(marketValue * 1.3f, marketValue * 1.7f), new IntRange(3, 6), null, null); LookTargets target = new LookTargets(factionBase.Tile); quest.Target = target; quest.TicksToPass = Rand.Range(12, 25) * 60000; QuestSite questPlace = (QuestSite)WorldObjectMaker.MakeWorldObject(QuestRim.WorldObjectDefOfLocal.QuestPlace); questPlace.Tile = factionBase.Tile; questPlace.SetFaction(faction); questPlace.Init(quest); quest.Site = questPlace; Find.WorldObjects.Add(questPlace); QuestsManager.Communications.AddQuest(quest, QuestsManager.Communications.MakeQuestLetter(quest, description: def.description, lookTarget: target)); return(true); }
public override string GetArrivedLetterPart(Map map, out LetterDef preferredLetterDef, out LookTargets lookTargets) { string arrivedLetterPart = base.GetArrivedLetterPart(map, out preferredLetterDef, out lookTargets); List <Thing> list = new List <Thing>(); foreach (Thing allThing in map.listerThings.AllThings) { if ((allThing.def.building != null && allThing.def.building.buildingTags != null && allThing.def.building.buildingTags.Contains("MechClusterMember")) || (allThing is Pawn && allThing.def.race.IsMechanoid)) { list.Add(allThing); } } lookTargets = new LookTargets(list); return(arrivedLetterPart); }
public override void Init() { base.Init(); this.disabled = false; this.FindGoodEdgeLocation(); lookTarget = new LookTargets(centerLocation.ToIntVec3, this.SingleMap); this.CalculateDifficultyModifiers(); this.SetEventParameters(); this.summoningCircle = GenRadial.RadialCellsAround(this.centerLocation.ToIntVec3, 5, false).ToList(); InitializeVolcanicWinter(); if (eventDifficulty >= 2) { InitializeDeathSkies(); } }
public static void Message_Prefix(string text, ref LookTargets lookTargets) { if (Utils.ReflectionUtils.execStaticPrivate <bool>(typeof(Messages), "AcceptsMessage", text, lookTargets)) { // TODO: Handle multiple targets... if (lookTargets.PrimaryTarget.HasThing) { Thing thing = lookTargets.PrimaryTarget.Thing; if (thing.Faction == null || !thing.Faction.IsPlayer) { lookTargets = new GlobalTargetInfo(thing.Position, thing.Map); } } } }
public static void Message_Prefix(string text, ref LookTargets lookTargets) { if (Traverse.Create(typeof(Messages)).Method("AcceptsMessage", text, lookTargets).GetValue <bool>()) { // TODO: Handle multiple targets... if (lookTargets.PrimaryTarget.HasThing) { Thing thing = lookTargets.PrimaryTarget.Thing; if (thing.Faction == null || !thing.Faction.IsPlayer) { lookTargets = new GlobalTargetInfo(thing.Position, thing.Map); } } } }
public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets) { base.Interacted(initiator, recipient, extraSentencePacks, out letterText, out letterLabel, out letterDef, out lookTargets); int diff = initiator.VampComp().Level - recipient.VampComp().Level; int xpToGive = (int)(10 + (VAMPIRE_XPPERLEVELDIFF * diff)); if (recipient.IsGhoul()) { xpToGive = (int)(xpToGive * 0.5f); } recipient.VampComp().XP += xpToGive; MoteMaker.ThrowText(recipient.DrawPos, recipient.MapHeld, "XP +" + xpToGive); }
/// <summary> /// called when the initiator interacts with the specified recipient. /// </summary> /// <param name="initiator">The initiator.</param> /// <param name="recipient">The recipient.</param> /// <param name="extraSentencePacks">The extra sentence packs.</param> /// <param name="letterText">The letter text.</param> /// <param name="letterLabel">The letter label.</param> /// <param name="letterDef">The letter definition.</param> /// <param name="lookTargets">The look targets.</param> public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets) { base.Interacted(initiator, recipient, extraSentencePacks, out letterText, out letterLabel, out letterDef, out lookTargets); if (extraSentencePacks == null) { return; } SapienceLevel?sapientLevel = recipient?.GetQuantizedSapienceLevel(); if (sapientLevel == null) { return; } RulePackDef variant; if (extraSentencePacks.Count != 0) { _scratchList.Clear(); _scratchList.AddRange(extraSentencePacks); extraSentencePacks.Clear(); //we need to substitute any variants if any exist foreach (RulePackDef rulePackDef in _scratchList) { if (rulePackDef.TryGetSapientDefVariant(recipient, out variant)) { extraSentencePacks.Add(variant); //add the variant if a variant is found } else { extraSentencePacks.Add(rulePackDef); //add the original if no variant is found } } } //now get additions from the interaction def if (interaction.TryGetSapientDefVariant(recipient, out variant)) { extraSentencePacks.Add(variant); } if (recipient.Faction == Faction.OfPlayer) { recipient.TryGainMemory(PMThoughtDefOf.FormerHumanTameThought); } }
public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets) { if (!recipient.IsPrisoner || !recipient.guest.PrisonerIsSecure || !PrisonBreakUtility.CanParticipateInPrisonBreak(recipient)) { letterText = null; letterLabel = null; letterDef = null; lookTargets = null; } else { PrisonBreakUtility.StartPrisonBreak(recipient, out letterText, out letterLabel, out letterDef); lookTargets = new LookTargets(initiator, recipient); (initiator.MentalState as MentalState_Jailbreaker)?.Notify_InducedPrisonerToEscape(); } }
protected override bool TryExecuteWorker(IncidentParms parms) { if (!settings.Active) { return(false); } Faction faction = GetFaction(); Map map = Find.AnyPlayerHomeMap; if (!TryGetNewTile(map.Tile, out int newTile)) { return(false); } int days = Rand.Range(11, 20); int passedDays = Rand.Range(days + 3, days + 7); Quest_MissingPeople quest = new Quest_MissingPeople(Rand.Range(3, 9), days, passedDays); quest.id = QuestsManager.Communications.UniqueIdManager.GetNextQuestID(); quest.Faction = faction; int additionalValue = passedDays * 25; quest.GenerateRewards(quest.GetQuestThingFilter(), new FloatRange(1200 + additionalValue, 1800 + additionalValue), new IntRange(2, 8), null, null); LookTargets target = new LookTargets(newTile); quest.Target = target; QuestSite questPlace = (QuestSite)WorldObjectMaker.MakeWorldObject(QuestRim.WorldObjectDefOfLocal.QuestPlace); questPlace.Tile = newTile; questPlace.SetFaction(faction); questPlace.Init(quest); questPlace.RemoveAfterLeave = false; quest.Site = questPlace; Find.WorldObjects.Add(questPlace); string text = string.Format(def.letterText, faction.Name, days, passedDays, quest.TicksToPass.TicksToDays().ToString("f2")).CapitalizeFirst(); QuestsManager.Communications.AddQuest(quest, QuestsManager.Communications.MakeQuestLetter(quest, description: text, lookTarget: target)); return(true); }