示例#1
0
        public override void Interacted(Pawn recruiter, Pawn guest, List <RulePackDef> extraSentencePacks)
        {
            if (recruiter == null || guest == null || guest.guest == null)
            {
                return;
            }

            // TODO: pawn.records.Increment(RecordDefOf.GuestsCharmAttempts);
            //recruiter.skills.Learn(SkillDefOf.Social, 35f);
            float pleaseChance = recruiter.GetStatValue(statPleaseGuestChance);

            pleaseChance = GuestUtility.AdjustPleaseChance(pleaseChance, recruiter, guest);
            pleaseChance = Mathf.Clamp01(pleaseChance);

            if (Rand.Value > pleaseChance)
            {
                var    isAbrasive     = recruiter.story.traits.HasTrait(TraitDefOf.Abrasive);
                int    multiplier     = isAbrasive ? 2 : 1;
                string multiplierText = multiplier > 1 ? " x" + multiplier : string.Empty;

                string textAnger = recruiter.gender == Gender.Female ? "RecruitAngerSelfF" : "RecruitAngerSelfM";
                Messages.Message(
                    textAnger.Translate(new object[]
                                        { recruiter.NameStringShort, guest.NameStringShort, (1 - pleaseChance).ToStringPercent(), multiplierText }),
                    guest, MessageSound.Negative);

                extraSentencePacks.Add(RulePackDef.Named("Sentence_CharmAttemptRejected"));
                for (int i = 0; i < multiplier; i++)
                {
                    GuestUtility.GainSocialThought(recruiter, guest, ThoughtDef.Named("GuestOffended"));
                }
            }
            else
            {
                var    statValue      = recruiter.GetStatValue(statRecruitEffectivity);
                var    floor          = Mathf.FloorToInt(statValue);
                int    multiplier     = floor + (Rand.Value < statValue - floor ? 1 : 0);
                string multiplierText = multiplier > 1 ? " x" + multiplier : string.Empty;

                string textPlease = recruiter.gender == Gender.Female ? "RecruitPleaseSelfF" : "RecruitPleaseSelfM";
                Messages.Message(
                    textPlease.Translate(new object[]
                                         { recruiter.NameStringShort, guest.NameStringShort, (pleaseChance).ToStringPercent(), multiplierText }),
                    guest, MessageSound.Benefit);
                for (int i = 0; i < multiplier; i++)
                {
                    GuestUtility.GainSocialThought(recruiter, guest, ThoughtDef.Named("GuestConvinced"));
                }
                extraSentencePacks.Add(RulePackDef.Named("Sentence_CharmAttemptAccepted"));
            }
            GuestUtility.GainSocialThought(recruiter, guest, ThoughtDef.Named("GuestDismissiveAttitude"));
        }
        private static void CheckAnger(Pawn recruiter, Pawn guest)
        {
            if (guest.Faction == null || recruiter == null || guest.Faction == Faction.OfPlayer)
            {
                return;
            }
            var map    = recruiter.MapHeld;
            var allies = map.mapPawns.PawnsInFaction(guest.Faction).ToArray();

            foreach (var ally in allies)
            {
                if (ally != guest && !ally.Dead && ally.Spawned && ally.CanSee(recruiter) && ally.CanSee(guest))
                {
                    if (ally.needs.mood.thoughts.memories.Memories.Any(t => t.def.defName == "GuestAngered"))
                    {
                        continue;
                    }

                    float pleaseChance = recruiter.GetStatValue(statPleaseGuestChance);
                    pleaseChance = GuestUtility.AdjustPleaseChance(pleaseChance, recruiter, ally);
                    pleaseChance = Mathf.Clamp01(pleaseChance);

                    if (Rand.Value > pleaseChance)
                    {
                        //Log.Message("txtRecruitAngerOther");
                        Messages.Message(string.Format(txtRecruitAngerOther, recruiter.NameStringShort, guest.NameStringShort, pleaseChance.ToStringPercent(), ally.NameStringShort), MessageSound.Negative);
                        //ally.Faction.AffectGoodwillWith(Faction.OfColony, -1f + 0.045f * recruiter.skills.GetSkill(SkillDefOf.Social).level); //Skill based influence -0.1 ... -1
                        GuestUtility.GainSocialThought(recruiter, ally, ThoughtDef.Named("GuestAngered"));

                        //if (Rand.Value < GuestUtility.GetDismissiveChance(ally))
                        {
                            GuestUtility.GainSocialThought(recruiter, ally, ThoughtDef.Named("GuestDismissiveAttitude"));
                        }
                    }
                }
            }
        }
        public override void Interacted(Pawn recruiter, Pawn guest, List <RulePackDef> extraSentencePacks)
        {
            if (recruiter == null || guest == null || guest.guest == null)
            {
                return;
            }

            // TODO: pawn.records.Increment(RecordDefOf.GuestsChatted);
            //recruiter.skills.Learn(SkillDefOf.Social, 25f);
            float pleaseChance = recruiter.GetStatValue(statPleaseGuestChance);

            pleaseChance = GuestUtility.AdjustPleaseChance(pleaseChance, recruiter, guest);
            pleaseChance = Mathf.Clamp01(pleaseChance);

            if (Rand.Value > pleaseChance)
            {
                Messages.Message(
                    "ImproveFactionAnger".Translate(new object[]
                                                    { recruiter.NameStringShort, guest.NameStringShort, guest.Faction.Name, (1 - pleaseChance).ToStringPercent() }), guest,
                    MessageSound.Negative);

                GuestUtility.GainSocialThought(recruiter, guest, ThoughtDef.Named("GuestOffendedRelationship"));
            }
            else
            {
                Messages.Message(
                    "ImproveFactionPlease".Translate(new object[]
                                                     { recruiter.NameStringShort, guest.NameStringShort, guest.Faction.Name, (pleaseChance).ToStringPercent() }), guest,
                    MessageSound.Benefit);

                GuestUtility.GainSocialThought(recruiter, guest, ThoughtDef.Named("GuestPleasedRelationship"));
            }

            //if (Rand.Value < GuestUtility.GetDismissiveChance(guest))

            GuestUtility.GainSocialThought(recruiter, guest, ThoughtDef.Named("GuestDismissiveAttitude"));
        }