コード例 #1
0
        public static bool Prefix(ref JobDriver_Vomit __instance, ref IEnumerable <Toil> __result)
        {
            Pawn pawn = __instance.pawn;
            bool result;

            if (pawn.IsAndroid())
            {
                JobDriver_Vomit instance = __instance;
                __result = new List <Toil>
                {
                    new Toil
                    {
                        initAction = delegate()
                        {
                            instance.pawn.jobs.StopAll(false);
                        }
                    }
                };
                result = false;
            }
            else
            {
                result = true;
            }
            return(result);
        }
コード例 #2
0
        // Token: 0x0600003F RID: 63 RVA: 0x000040B0 File Offset: 0x000022B0
        public static bool CompatPatch_VomitJob(ref JobDriver_Vomit __instance, ref IEnumerable <Toil> __result)
        {
            Pawn pawn = __instance.pawn;
            bool flag = pawn.def.HasModExtension <MechanicalPawnProperties>();
            bool result;

            if (flag)
            {
                JobDriver_Vomit instance = __instance;
                __result = new List <Toil>
                {
                    new Toil
                    {
                        initAction = delegate()
                        {
                            instance.pawn.jobs.StopAll(false);
                        }
                    }
                };
                result = false;
            }
            else
            {
                result = true;
            }
            return(result);
        }
コード例 #3
0
        static IEnumerable <Toil> Postfix(IEnumerable <Toil> list, JobDriver_Vomit __instance)
        {
            IEnumerable <MutationVomitItems> mutations = __instance.pawn.health.hediffSet.GetHediffs <MutationVomitItems>();

            foreach (Toil toil in list)
            {
                if (mutations.Any())
                {
                    Action act = toil.tickAction;
                    toil.tickAction = delegate()
                    {
                        if (((int)ticksLeft.GetValue(__instance)) % 150 == 149)
                        {
                            foreach (MutationVomitItems mutation in mutations)
                            {
                                mutation.Vomiting(__instance.job.targetA.Cell);
                            }
                        }

                        act();
                    };
                }


                yield return(toil);
            }

            yield break;
        }
コード例 #4
0
        static IEnumerable <Toil> Postfix(IEnumerable <Toil> list, JobDriver_Vomit __instance)
        {
            IEnumerable <MutationVomitItems> mutations = __instance.pawn.health.hediffSet.GetHediffs <MutationVomitItems>();

            if (!mutations.Any())
            {
                return(list);
            }

            foreach (Toil toil in list)
            {
                toil.AddFinishAction(delegate()
                {
                    foreach (MutationVomitItems mutation in mutations)
                    {
                        mutation.Vomiting(__instance.job.targetA.Cell);
                    }
                });
            }

            return(list);
        }
コード例 #5
0
        //public class JobDriver_Vomit : JobDriver
        public static bool MakeNewToils_VampVomit(JobDriver_Vomit __instance, ref IEnumerable <Toil> __result)
        {
            if (__instance.pawn.IsVampire())
            {
                Toil to = new Toil()
                {
                    initAction = delegate
                    {
                        AccessTools.Field(typeof(JobDriver_Vomit), "ticksLeft")
                        .SetValue(__instance, Rand.Range(300, 900));
                        int     num = 0;
                        IntVec3 c;
                        while (true)
                        {
                            c = __instance.pawn.Position + GenAdj.AdjacentCellsAndInside[Rand.Range(0, 9)];
                            num++;
                            if (num > 12)
                            {
                                break;
                            }

                            if (c.InBounds(__instance.pawn.Map) && c.Standable(__instance.pawn.Map))
                            {
                                goto IL_A1;
                            }
                        }

                        c = __instance.pawn.Position;
IL_A1:
                        __instance.pawn.CurJob.targetA = c;
                        __instance.pawn.rotationTracker.FaceCell(c);
                        __instance.pawn.pather.StopDead();
                    },
                    tickAction = delegate
                    {
                        int curTicks = Traverse.Create(__instance).Field("ticksLeft").GetValue <int>();
                        if (curTicks % 150 == 149)
                        {
                            FilthMaker.TryMakeFilth(__instance.pawn.CurJob.targetA.Cell, __instance.pawn.Map,
                                                    ThingDefOf.Filth_Blood, __instance.pawn.LabelIndefinite());
                            if (__instance.pawn.BloodNeed() is Need_Blood n && n.CurBloodPoints > 0)
                            {
                                n.AdjustBlood(-1);
                            }

                            //if (__instance.pawn.needs.food.CurLevelPercentage > 0.1f)
                            //{
                            //    __instance.pawn.needs.food.CurLevel -= __instance.pawn.needs.food.MaxLevel * 0.04f;
                            //}
                        }

                        AccessTools.Field(typeof(JobDriver_Vomit), "ticksLeft").SetValue(__instance, curTicks - 1);

                        if (curTicks - 1 <= 0)
                        {
                            __instance.ReadyForNextToil();
                            TaleRecorder.RecordTale(TaleDefOf.Vomited, new object[]
                            {
                                __instance.pawn
                            });
                        }
                    }
                };
                to.defaultCompleteMode = ToilCompleteMode.Never;
                to.WithEffect(DefDatabase <EffecterDef> .GetNamed("ROMV_BloodVomit"), TargetIndex.A);
                to.PlaySustainerOrSound(() => SoundDef.Named("Vomit"));
                __result = __result.AddItem(to);

                return(false);
            }

            return(true);
        }