static void Prefix(Pawn_JobTracker __instance) { Pawn_JobTracker tracker = __instance; Pawn p = (Pawn)typeof(Pawn_JobTracker).InvokeMember("pawn", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic, null, tracker, null); if (p == null) { throw new Exception("Pawn_JobTracker.pawn is null"); } if (tracker.IsCurrentJobPlayerInterruptible() && tracker.jobQueue.Count == 0 && (tracker.curJob == null || JobTypeWhitelist.hashset.Contains(tracker.curJob.def) || TacticsMode.LastActionExpired(p))) { TacticsMode.TryDoTacticalAction(p); } }
public static bool TryAttachFire(Thing t, float fireSize) { if (!t.CanEverAttachFire() || t.HasAttachment(ThingDefOf.Fire)) { return(false); } Fire fire = (Fire)ThingMaker.MakeThing(ThingDefOf.Fire); fire.fireSize = fireSize; fire.AttachTo(t); GenSpawn.Spawn(fire, t.Position, t.Map, Rot4.North); if (!(t is Pawn pawn)) { return(false); } Verse.AI.Pawn_JobTracker jobs = pawn.jobs; if (jobs != null) { jobs.StopAll(); } pawn.records.Increment(RecordDefOf.TimesOnFire); return(false); }