public static void AutoUndraftTick(AutoUndrafter __instance, Pawn ___pawn) { //Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue<Pawn>(); Pawn pawn = ___pawn; int tick = Find.TickManager.TicksGame; if (tick % 100 == 0) { if (pawn.jobs.curJob != null && pawn.jobs.curJob.def == JobDefOf.Wait_Combat && pawn.stances != null && pawn.stances.curStance is Stance_Mobile) { //pawn.jobs.EndCurrentJob(JobCondition.Succeeded); WeaponAssingment.equipBestWeaponFromInventoryByPreference(pawn, DroppingModeEnum.Combat); BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static; FieldInfo field = (__instance.GetType()).GetField("lastNonWaitingTick", bindFlags); int lastNonWaitingTick = (int)field.GetValue(__instance); if (tick - lastNonWaitingTick > autoRetrieveDelay) { Job retrieval = JobGiver_RetrieveWeapon.TryGiveJobStatic(pawn, true); if (retrieval != null) { pawn.jobs.TryTakeOrderedJob(retrieval, JobTag.Misc); } } } } }
private static void AutoUndraftTick(AutoUndrafter __instance) { Pawn pawn = Traverse.Create(__instance).Field("pawn").GetValue <Pawn>(); if (Find.TickManager.TicksGame % 100 == 0) { if (pawn.jobs.curJob != null && pawn.jobs.curJob.def == JobDefOf.WaitCombat && pawn.stances != null && pawn.stances.curStance is Stance_Mobile) { //pawn.jobs.EndCurrentJob(JobCondition.Succeeded); WeaponAssingment.reequipPrimaryIfNeededAndAvailable(pawn, GoldfishModule.GetGoldfishForPawn(pawn)); } } }
private void ResetDrafter() { if (parent.playerController.Drafted) { if (Find.TickManager.TicksGame % 4800 == 0) { AutoUndrafter undrafter = (AutoUndrafter)typeof(Drafter).GetField("autoUndrafter", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(parent.playerController.drafter); if (undrafter != null) { typeof(AutoUndrafter).GetField("lastNonWaitingTick", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).SetValue(undrafter, Find.TickManager.TicksGame); //Log.Message("Reset ticks " + ((int)typeof(AutoUndrafter).GetField("lastNonWaitingTick", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(undrafter)).ToString()); } } } }
public static bool AnyHostilePreventingAutoUndraft(AutoUndrafter __instance, ref bool __result) { IAttackTarget[] potentialTargetsArrayFor; List <IAttackTarget> potentialTargetsFor = pawn(__instance).Map.attackTargetsCache.GetPotentialTargetsFor(pawn(__instance)); lock (potentialTargetsFor) { potentialTargetsArrayFor = potentialTargetsFor.ToArray(); } for (int i = 0; i < potentialTargetsArrayFor.Length; i++) { if (GenHostility.IsActiveThreatToPlayer(potentialTargetsArrayFor[i])) { __result = true; return(false); } } __result = false; return(false); }
public static void Postfix(AutoUndrafter __instance) { __instance.pawn.Notify_Dirty(); }