static void Postfix(Caravan __instance, ref bool __result) { if (!__instance.IsHashIntervalTick(60)) { __result = Base.Instance.cachedResult; return; } if (Base.Instance.GetExtendedDataStorage() is ExtendedDataStorage store) { if (store.GetExtendedDataFor(__instance) is ExtendedCaravanData data) { if (data.forceRest) { __result = true; } if (data.fullyIgnoreRest) { __result = false; } if (data.almostThere) { var estimatedTicks = (float)CaravanArrivalTimeEstimator.EstimatedTicksToArrive(__instance, allowCaching: true); var restTicksLeft = CaravanNightRestUtility.LeftRestTicksAt(__instance.Tile, Find.TickManager.TicksAbs); estimatedTicks -= restTicksLeft; if (estimatedTicks / GenDate.TicksPerHour < Base.almostThereHours.Value) { __result = false; } } } } Base.Instance.cachedResult = __result; }
public virtual void JobTrackerTick() { jobsGivenThisTick = 0; jobsGivenThisTickTextual = string.Empty; if (caravan.IsHashIntervalTick(30)) { //ThinkResult thinkResult = this.DetermineNextConstantThinkTreeJob(); //if (thinkResult.IsValid && this.ShouldStartJobFromThinkTree(thinkResult)) //{ // this.CheckLeaveJoinableLordBecauseJobIssued(thinkResult); // this.StartJob(thinkResult.Job, JobCondition.InterruptForced, thinkResult.SourceNode, false, false, null, null); //this.caravan.thinker.ConstantThinkTree, thinkResult.Tag); //} } if (curDriver != null) { curDriver.DriverTick(); } if (curJob == null && //!this.caravan.Dead && this.caravan.mindState.Active && CanDoAnyJob()) { if (debugLog) { DebugLogEvent("Starting job from Tick because curJob == null."); } TryFindAndStartJob(); } FinalizeTick(); }
static void Postfix(Caravan __instance) { //Consume only fuel every interval of tickperday/fuelConsumptionRate. float interval = GenDate.TicksPerDay / WTH_DefOf.WTH_PortableChargingPlatform.GetCompProperties <CompProperties_Refuelable>().fuelConsumptionRate; if (__instance.IsHashIntervalTick(Mathf.RoundToInt(interval))) { ConsumeFuelIfNeeded(__instance); } if (__instance.IsHashIntervalTick(480)) { List <Thing> allParts = __instance.AllThings.Where((Thing t) => t.def == WTH_DefOf.WTH_MechanoidParts).ToList(); if (!allParts.NullOrEmpty()) { List <Pawn> allHackedMechs = __instance.AllThings.Where((Thing t) => t is Pawn pawn && !pawn.Dead && pawn.IsHacked()).Cast <Pawn>().ToList(); if (!allHackedMechs.NullOrEmpty()) { RepairMechsIfNeeded(__instance, allParts, allHackedMechs); MaintainMechsIfNeeded(__instance, allParts, allHackedMechs); } } } }