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); }
// 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); }
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; }
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); }
//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); }