Beispiel #1
0
        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));
                }
            }
        }
Beispiel #3
0
 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());
             }
         }
     }
 }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 public static void Postfix(AutoUndrafter __instance)
 {
     __instance.pawn.Notify_Dirty();
 }