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