Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        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());
                }
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
 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);
        }
Exemple #10
0
        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);
        }
Exemple #11
0
        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);
        }
Exemple #15
0
 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);
         }
     }
 }
Exemple #16
0
 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);
            }
Exemple #21
0
 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);
        }
Exemple #23
0
        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);
        }
Exemple #24
0
 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);
             }
         }
     }
 }
Exemple #26
0
 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();
     }
 }
Exemple #30
0
        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);
        }