public float SocialFightChance(InteractionDef interaction, Pawn initiator) { if (!pawn.RaceProps.Humanlike || !initiator.RaceProps.Humanlike) { return(0f); } if (!InteractionUtility.HasAnyVerbForSocialFight(pawn) || !InteractionUtility.HasAnyVerbForSocialFight(initiator)) { return(0f); } if (pawn.WorkTagIsDisabled(WorkTags.Violent)) { return(0f); } if (initiator.Downed || pawn.Downed) { return(0f); } float socialFightBaseChance = interaction.socialFightBaseChance; socialFightBaseChance *= Mathf.InverseLerp(0.3f, 1f, pawn.health.capacities.GetLevel(PawnCapacityDefOf.Manipulation)); socialFightBaseChance *= Mathf.InverseLerp(0.3f, 1f, pawn.health.capacities.GetLevel(PawnCapacityDefOf.Moving)); List <Hediff> hediffs = pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { if (hediffs[i].CurStage != null) { socialFightBaseChance *= hediffs[i].CurStage.socialFightChanceFactor; } } float num = pawn.relations.OpinionOf(initiator); socialFightBaseChance = ((!(num < 0f)) ? (socialFightBaseChance * GenMath.LerpDouble(0f, 100f, 1f, 0.6f, num)) : (socialFightBaseChance * GenMath.LerpDouble(-100f, 0f, 4f, 1f, num))); if (pawn.RaceProps.Humanlike) { List <Trait> allTraits = pawn.story.traits.allTraits; for (int j = 0; j < allTraits.Count; j++) { socialFightBaseChance *= allTraits[j].CurrentData.socialFightChanceFactor; } } int num2 = Mathf.Abs(pawn.ageTracker.AgeBiologicalYears - initiator.ageTracker.AgeBiologicalYears); if (num2 > 10) { if (num2 > 50) { num2 = 50; } socialFightBaseChance *= GenMath.LerpDouble(10f, 50f, 1f, 0.25f, num2); } return(Mathf.Clamp01(socialFightBaseChance)); }
public float SocialFightChance(InteractionDef interaction, Pawn initiator) { float result; if (!this.pawn.RaceProps.Humanlike || !initiator.RaceProps.Humanlike) { result = 0f; } else if (!InteractionUtility.HasAnyVerbForSocialFight(this.pawn) || !InteractionUtility.HasAnyVerbForSocialFight(initiator)) { result = 0f; } else if (this.pawn.story.WorkTagIsDisabled(WorkTags.Violent)) { result = 0f; } else if (initiator.Downed || this.pawn.Downed) { result = 0f; } else { float num = interaction.socialFightBaseChance; num *= Mathf.InverseLerp(0.3f, 1f, this.pawn.health.capacities.GetLevel(PawnCapacityDefOf.Manipulation)); num *= Mathf.InverseLerp(0.3f, 1f, this.pawn.health.capacities.GetLevel(PawnCapacityDefOf.Moving)); List <Hediff> hediffs = this.pawn.health.hediffSet.hediffs; for (int i = 0; i < hediffs.Count; i++) { if (hediffs[i].CurStage != null) { num *= hediffs[i].CurStage.socialFightChanceFactor; } } float num2 = (float)this.pawn.relations.OpinionOf(initiator); if (num2 < 0f) { num *= GenMath.LerpDouble(-100f, 0f, 4f, 1f, num2); } else { num *= GenMath.LerpDouble(0f, 100f, 1f, 0.6f, num2); } if (this.pawn.RaceProps.Humanlike) { List <Trait> allTraits = this.pawn.story.traits.allTraits; for (int j = 0; j < allTraits.Count; j++) { num *= allTraits[j].CurrentData.socialFightChanceFactor; } } int num3 = Mathf.Abs(this.pawn.ageTracker.AgeBiologicalYears - initiator.ageTracker.AgeBiologicalYears); if (num3 > 10) { if (num3 > 50) { num3 = 50; } num *= GenMath.LerpDouble(10f, 50f, 1f, 0.25f, (float)num3); } result = Mathf.Clamp01(num); } return(result); }