public static void Married(Pawn firstPawn, Pawn secondPawn)
 {
     LovePartnerRelationUtility.ChangeSpouseRelationsToExSpouse(firstPawn);
     LovePartnerRelationUtility.ChangeSpouseRelationsToExSpouse(secondPawn);
     firstPawn.relations.RemoveDirectRelation(PawnRelationDefOf.Fiance, secondPawn);
     firstPawn.relations.TryRemoveDirectRelation(PawnRelationDefOf.ExSpouse, secondPawn);
     firstPawn.relations.AddDirectRelation(PawnRelationDefOf.Spouse, secondPawn);
     AddNewlyMarriedThoughts(firstPawn, secondPawn);
     AddNewlyMarriedThoughts(secondPawn, firstPawn);
     if (firstPawn.needs.mood != null)
     {
         firstPawn.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.DivorcedMe, secondPawn);
     }
     if (secondPawn.needs.mood != null)
     {
         secondPawn.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.DivorcedMe, firstPawn);
     }
     if (firstPawn.relations.nextMarriageNameChange != secondPawn.relations.nextMarriageNameChange)
     {
         Log.Warning("Marriage name change is different on marrying pawns. This is weird, but not harmful.");
     }
     SpouseRelationUtility.ChangeNameAfterMarriage(firstPawn, secondPawn, firstPawn.relations.nextMarriageNameChange);
     LovePartnerRelationUtility.TryToShareBed(firstPawn, secondPawn);
     TaleRecorder.RecordTale(TaleDefOf.Marriage, firstPawn, secondPawn);
 }
예제 #2
0
 public override void CreateRelation(Pawn generated, Pawn other, ref PawnGenerationRequest request)
 {
     generated.relations.AddDirectRelation(PawnRelationDefOf.Spouse, other);
     LovePartnerRelationUtility.TryToShareChildrenForGeneratedLovePartner(generated, other, request, 1f);
     SpouseRelationUtility.ResolveNameForSpouseOnGeneration(ref request, generated);
     ResolveMySkinColor(ref request, generated, other);
 }
예제 #3
0
 public override void CreateRelation(Pawn generated, Pawn other, ref PawnGenerationRequest request)
 {
     if (generated.gender == Gender.Male)
     {
         other.SetFather(generated);
         ResolveMyName(ref request, other, other.GetMother());
         ResolveMySkinColor(ref request, other, other.GetMother());
         if (other.GetMother() != null)
         {
             if (other.GetMother().story.traits.HasTrait(TraitDefOf.Gay))
             {
                 generated.relations.AddDirectRelation(PawnRelationDefOf.ExLover, other.GetMother());
             }
             else if (Rand.Value < 0.85f && !LovePartnerRelationUtility.HasAnyLovePartner(other.GetMother()))
             {
                 generated.relations.AddDirectRelation(PawnRelationDefOf.Spouse, other.GetMother());
                 SpouseRelationUtility.ResolveNameForSpouseOnGeneration(ref request, generated);
             }
             else
             {
                 LovePartnerRelationUtility.GiveRandomExLoverOrExSpouseRelation(generated, other.GetMother());
             }
         }
     }
     else
     {
         if (generated.gender != Gender.Female)
         {
             return;
         }
         other.SetMother(generated);
         ResolveMyName(ref request, other, other.GetFather());
         ResolveMySkinColor(ref request, other, other.GetFather());
         if (other.GetFather() != null)
         {
             if (other.GetFather().story.traits.HasTrait(TraitDefOf.Gay))
             {
                 generated.relations.AddDirectRelation(PawnRelationDefOf.ExLover, other.GetFather());
             }
             else if (Rand.Value < 0.85f && !LovePartnerRelationUtility.HasAnyLovePartner(other.GetFather()))
             {
                 generated.relations.AddDirectRelation(PawnRelationDefOf.Spouse, other.GetFather());
                 SpouseRelationUtility.ResolveNameForSpouseOnGeneration(ref request, generated);
             }
             else
             {
                 LovePartnerRelationUtility.GiveRandomExLoverOrExSpouseRelation(generated, other.GetFather());
             }
         }
     }
 }
 private void RandomizeCurPawn()
 {
     if (TutorSystem.AllowAction("RandomizePawn"))
     {
         int num = 0;
         do
         {
             SpouseRelationUtility.Notify_PawnRegenerated(curPawn);
             curPawn = StartingPawnUtility.RandomizeInPlace(curPawn);
             num++;
         }while (num <= 20 && !StartingPawnUtility.WorkTypeRequirementsSatisfied());
         TutorSystem.Notify_Event("RandomizePawn");
     }
 }
        public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets)
        {
            float num   = AcceptanceChance(initiator, recipient);
            bool  flag  = Rand.Value < num;
            bool  flag2 = false;

            if (flag)
            {
                initiator.relations.RemoveDirectRelation(PawnRelationDefOf.Lover, recipient);
                initiator.relations.AddDirectRelation(PawnRelationDefOf.Fiance, recipient);
                if (recipient.needs.mood != null)
                {
                    recipient.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.RejectedMyProposal, initiator);
                    recipient.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.RejectedMyProposalMood, initiator);
                    recipient.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.IRejectedTheirProposal, initiator);
                }
                if (initiator.needs.mood != null)
                {
                    initiator.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.RejectedMyProposalMood, recipient);
                    initiator.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.IRejectedTheirProposal, recipient);
                    initiator.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.RejectedMyProposal, recipient);
                }
                extraSentencePacks.Add(RulePackDefOf.Sentence_MarriageProposalAccepted);
            }
            else
            {
                if (initiator.needs.mood != null)
                {
                    initiator.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.RejectedMyProposal, recipient);
                }
                if (recipient.needs.mood != null)
                {
                    recipient.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.IRejectedTheirProposal, initiator);
                }
                extraSentencePacks.Add(RulePackDefOf.Sentence_MarriageProposalRejected);
                if (Rand.Value < 0.4f)
                {
                    initiator.relations.RemoveDirectRelation(PawnRelationDefOf.Lover, recipient);
                    initiator.relations.AddDirectRelation(PawnRelationDefOf.ExLover, recipient);
                    flag2 = true;
                    extraSentencePacks.Add(RulePackDefOf.Sentence_MarriageProposalRejectedBrokeUp);
                }
            }
            if (PawnUtility.ShouldSendNotificationAbout(initiator) || PawnUtility.ShouldSendNotificationAbout(recipient))
            {
                StringBuilder stringBuilder = new StringBuilder();
                if (flag)
                {
                    letterLabel = "LetterLabelAcceptedProposal".Translate();
                    letterDef   = LetterDefOf.PositiveEvent;
                    stringBuilder.AppendLine("LetterAcceptedProposal".Translate(initiator.Named("INITIATOR"), recipient.Named("RECIPIENT")));
                    if (initiator.relations.nextMarriageNameChange != 0)
                    {
                        SpouseRelationUtility.DetermineManAndWomanSpouses(initiator, recipient, out var man, out var woman);
                        stringBuilder.AppendLine();
                        if (initiator.relations.nextMarriageNameChange == MarriageNameChange.MansName)
                        {
                            stringBuilder.AppendLine("LetterAcceptedProposal_NameChange".Translate(woman.Named("PAWN"), (man.Name as NameTriple).Last));
                        }
                        else
                        {
                            stringBuilder.AppendLine("LetterAcceptedProposal_NameChange".Translate(man.Named("PAWN"), (woman.Name as NameTriple).Last));
                        }
                    }
                }
                else
                {
                    letterLabel = "LetterLabelRejectedProposal".Translate();
                    letterDef   = LetterDefOf.NegativeEvent;
                    stringBuilder.AppendLine("LetterRejectedProposal".Translate(initiator.Named("INITIATOR"), recipient.Named("RECIPIENT")));
                    if (flag2)
                    {
                        stringBuilder.AppendLine();
                        stringBuilder.AppendLine("LetterNoLongerLovers".Translate(initiator.Named("PAWN1"), recipient.Named("PAWN2")));
                    }
                }
                letterText  = stringBuilder.ToString().TrimEndNewlines();
                lookTargets = new LookTargets(initiator, recipient);
            }
            else
            {
                letterLabel = null;
                letterText  = null;
                letterDef   = null;
                lookTargets = null;
            }
        }
        public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets)
        {
            Thought thought = RandomBreakupReason(initiator, recipient);
            bool    flag    = false;
            bool    flag2   = false;

            if (initiator.relations.DirectRelationExists(PawnRelationDefOf.Spouse, recipient))
            {
                initiator.relations.RemoveDirectRelation(PawnRelationDefOf.Spouse, recipient);
                initiator.relations.AddDirectRelation(PawnRelationDefOf.ExSpouse, recipient);
                if (recipient.needs.mood != null)
                {
                    recipient.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.DivorcedMe, initiator);
                    recipient.needs.mood.thoughts.memories.RemoveMemoriesOfDef(ThoughtDefOf.GotMarried);
                    recipient.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.HoneymoonPhase, initiator);
                }
                if (recipient.needs.mood != null)
                {
                    initiator.needs.mood.thoughts.memories.RemoveMemoriesOfDef(ThoughtDefOf.GotMarried);
                    initiator.needs.mood.thoughts.memories.RemoveMemoriesOfDefWhereOtherPawnIs(ThoughtDefOf.HoneymoonPhase, recipient);
                }
                flag  = SpouseRelationUtility.ChangeNameAfterDivorce(initiator);
                flag2 = SpouseRelationUtility.ChangeNameAfterDivorce(recipient);
            }
            else
            {
                initiator.relations.TryRemoveDirectRelation(PawnRelationDefOf.Lover, recipient);
                initiator.relations.TryRemoveDirectRelation(PawnRelationDefOf.Fiance, recipient);
                initiator.relations.AddDirectRelation(PawnRelationDefOf.ExLover, recipient);
                if (recipient.needs.mood != null)
                {
                    recipient.needs.mood.thoughts.memories.TryGainMemory(ThoughtDefOf.BrokeUpWithMe, initiator);
                }
            }
            if (initiator.ownership.OwnedBed != null && initiator.ownership.OwnedBed == recipient.ownership.OwnedBed)
            {
                ((Rand.Value < 0.5f) ? initiator : recipient).ownership.UnclaimBed();
            }
            TaleRecorder.RecordTale(TaleDefOf.Breakup, initiator, recipient);
            if (PawnUtility.ShouldSendNotificationAbout(initiator) || PawnUtility.ShouldSendNotificationAbout(recipient))
            {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.AppendLine("LetterNoLongerLovers".Translate(initiator.LabelShort, recipient.LabelShort, initiator.Named("PAWN1"), recipient.Named("PAWN2")));
                stringBuilder.AppendLine();
                if (flag)
                {
                    stringBuilder.Append("LetterNoLongerLovers_BackToBirthName".Translate(initiator.Named("PAWN")));
                }
                if (flag2)
                {
                    if (flag)
                    {
                        stringBuilder.Append(" ");
                    }
                    stringBuilder.Append("LetterNoLongerLovers_BackToBirthName".Translate(recipient.Named("PAWN")));
                }
                if (flag | flag2)
                {
                    stringBuilder.AppendLine();
                }
                if (thought != null)
                {
                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine("FinalStraw".Translate(thought.LabelCap));
                }
                letterLabel = "LetterLabelBreakup".Translate();
                letterText  = stringBuilder.ToString().TrimEndNewlines();
                letterDef   = LetterDefOf.NegativeEvent;
                lookTargets = new LookTargets(initiator, recipient);
            }
            else
            {
                letterLabel = null;
                letterText  = null;
                letterDef   = null;
                lookTargets = null;
            }
        }
        public override void CreateRelation(Pawn generated, Pawn other, ref PawnGenerationRequest request)
        {
            bool num   = other.GetMother() != null;
            bool flag  = other.GetFather() != null;
            bool flag2 = Rand.Value < 0.85f;

            if (num && LovePartnerRelationUtility.HasAnyLovePartner(other.GetMother()))
            {
                flag2 = false;
            }
            if (flag && LovePartnerRelationUtility.HasAnyLovePartner(other.GetFather()))
            {
                flag2 = false;
            }
            if (!num)
            {
                Pawn newMother = GenerateParent(generated, other, Gender.Female, request, flag2);
                other.SetMother(newMother);
            }
            generated.SetMother(other.GetMother());
            if (!flag)
            {
                Pawn newFather = GenerateParent(generated, other, Gender.Male, request, flag2);
                other.SetFather(newFather);
            }
            generated.SetFather(other.GetFather());
            if (!num || !flag)
            {
                if (other.GetMother().story.traits.HasTrait(TraitDefOf.Gay) || other.GetFather().story.traits.HasTrait(TraitDefOf.Gay))
                {
                    other.GetFather().relations.AddDirectRelation(PawnRelationDefOf.ExLover, other.GetMother());
                }
                else if (flag2)
                {
                    Pawn       mother     = other.GetMother();
                    Pawn       father     = other.GetFather();
                    NameTriple nameTriple = mother.Name as NameTriple;
                    father.relations.AddDirectRelation(PawnRelationDefOf.Spouse, mother);
                    if (nameTriple != null)
                    {
                        PawnGenerationRequest request2 = default(PawnGenerationRequest);
                        SpouseRelationUtility.ResolveNameForSpouseOnGeneration(ref request2, mother);
                        string b    = nameTriple.Last;
                        string text = null;
                        if (request2.FixedLastName != null)
                        {
                            b = request2.FixedLastName;
                        }
                        if (request2.FixedBirthName != null)
                        {
                            text = request2.FixedBirthName;
                        }
                        if (mother.story != null && (nameTriple.Last != b || mother.story.birthLastName != text))
                        {
                            mother.story.birthLastName = text;
                        }
                    }
                }
                else
                {
                    LovePartnerRelationUtility.GiveRandomExLoverOrExSpouseRelation(other.GetFather(), other.GetMother());
                }
            }
            ResolveMyName(ref request, generated);
            ResolveMySkinColor(ref request, generated);
        }
 public override void OnRelationCreated(Pawn firstPawn, Pawn secondPawn)
 {
     firstPawn.relations.nextMarriageNameChange = (secondPawn.relations.nextMarriageNameChange = SpouseRelationUtility.Roll_NameChangeOnMarriage());
 }