Esempio n. 1
0
        public override void Interacted(Pawn initiator, Pawn recipient, List <RulePackDef> extraSentencePacks, out string letterText, out string letterLabel, out LetterDef letterDef, out LookTargets lookTargets)
        {
            letterText  = null;
            letterLabel = null;
            letterDef   = null;
            lookTargets = null;

            BeatingInProgress beating = Current.Game.World.GetComponent <BeatingTracker>()?.GetBeatingInProgress(recipient);

            if (beating == null)
            {
                return;
            }

            float currentPainLevel = recipient.health.hediffSet.PainTotal;
            float painInflicted    = beating.GetAndResetPainInflicted(currentPainLevel);
            float painFactor       = ResistanceImpactFactorCurve_Pain.Evaluate(painInflicted);


            float resistanceReduction = 1f;

            Logger.StartMessage(this, "{0} beat {1}, base resistance reduction  = {2}", initiator, recipient, resistanceReduction);
            Logger.AddToMessage("    pain inflicted: {0}, pain factor: {1}", painInflicted, painFactor);

            resistanceReduction *= painFactor;

            resistanceReduction = FactorInInitiatorTraits(initiator, resistanceReduction);
            resistanceReduction = FactorInRecipientTraits(recipient, resistanceReduction);

            Logger.AddToMessage("Final resistance reduction: {0}", resistanceReduction);
            Logger.DisplayMessage();

            resistanceReduction = Mathf.Min(resistanceReduction, recipient.guest.resistance);

            float resistance = recipient.guest.resistance;

            recipient.guest.resistance = Mathf.Max(0f, recipient.guest.resistance - resistanceReduction);
            float resistanceReduced = resistance - recipient.guest.resistance;

            string text = "TextMote_ResistanceReduced".Translate(resistance.ToString("F1"), recipient.guest.resistance.ToString("F1"));

            MoteMaker.ThrowText((initiator.DrawPos + recipient.DrawPos) / 2f, initiator.Map, text, 8f);

            if (recipient.guest.resistance == 0f)
            {
                TaggedString taggedString = "MessagePrisonerResistanceBroken".Translate(recipient.LabelShort, initiator.LabelShort, initiator.Named("WARDEN"), recipient.Named("PRISONER"));
                if (recipient.guest.interactionMode == PrisonerInteractionModeDefOf.AttemptRecruit)
                {
                    taggedString += " " + "MessagePrisonerResistanceBroken_RecruitAttempsWillBegin".Translate();
                }
                Messages.Message(taggedString, recipient, MessageTypeDefOf.PositiveEvent);
            }
        }