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