Exemplo n.º 1
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);
            }
        }