Exemple #1
0
        //
        static bool EatBodyPart(this JobDriver_Stumble driver, Zombie zombie, Pawn eatTargetPawn)
        {
            var bodyPartRecord = FirstEatablePart(eatTargetPawn);

            if (bodyPartRecord == null)
            {
                driver.eatTarget.Destroy(DestroyMode.Vanish);
                return(false);
            }

            var eatTargetAlive     = driver.eatTarget is Pawn && ((Pawn)driver.eatTarget).Dead == false;
            var hediff_MissingPart = (Hediff_MissingPart)HediffMaker.MakeHediff(HediffDefOf.MissingBodyPart, eatTargetPawn, bodyPartRecord);

            hediff_MissingPart.lastInjury = HediffDefOf.Bite;
            hediff_MissingPart.IsFresh    = true;
            eatTargetPawn.health.AddHediff(hediff_MissingPart, null, null);

            var eatTargetStillAlive = driver.eatTarget is Pawn && ((Pawn)driver.eatTarget).Dead == false;

            if (eatTargetAlive && eatTargetStillAlive == false)
            {
                if (PawnUtility.ShouldSendNotificationAbout(eatTargetPawn) && eatTargetPawn.RaceProps.Humanlike)
                {
                    MethodInfo translate;
                    object[]   parameters;
                    var        type = AccessTools.TypeByName("Verse.TranslatorFormattedStringExtensions");
                    if (type != null)
                    {
                        // 1.0
                        translate  = AccessTools.Method(type, "Translate", new Type[] { typeof(string), typeof(NamedArgument), typeof(NamedArgument), typeof(NamedArgument) });
                        parameters = new object[] { "MessageEatenByPredator", new NamedArgument(driver.eatTarget.LabelShort, null), zombie.LabelIndefinite().Named("PREDATOR"), driver.eatTarget.Named("EATEN") };
                    }
                    else
                    {
                        // B19
                        translate  = AccessTools.Method(type, "Translate", new Type[] { typeof(string), typeof(object[]) });
                        parameters = new object[] { "MessageEatenByPredator", new object[] { driver.eatTarget.LabelShort, zombie.LabelIndefinite() } };
                    }
                    var msg = (string)translate.Invoke(null, parameters);
                    Messages.Message(msg.CapitalizeFirst(), zombie, MessageTypeDefOf.NegativeEvent);
                }

                eatTargetPawn.Strip();
            }

            return(true);
        }