Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }