protected override Toil Repair() { _part = PartUtility.PartsNeedingBreakdownRepair(Patient).First(); var workSpeed = pawn.GetStatValue(StatDefOf.WorkSpeedGlobal); var duration = (int)(1f / workSpeed * baseDuration); var waitToil = Toils_General .Wait(duration) .WithProgressBarToilDelay(TargetIndex.A) .WithEffect(Patient.def.repairEffect, TargetIndex.A); waitToil.tickAction = delegate { pawn.skills.Learn(SkillDefOf.Crafting, 0.125f * workSpeed); }; waitToil.AddFinishAction(delegate { try { _part.Repair(); } catch (InvalidOperationException) { } }); return(waitToil); }
public override Verse.AI.Job JobOnThing(Pawn pawn, Thing thing, bool forced = false) { var patient = thing as Pawn; if (patient == null) { return(null); } JobDef jobDef; if (PartUtility.PartsNeedingBreakdownRepair(patient).Any()) { jobDef = CyberizationDefOf.Cyberization_FixBreakdown; } else if (PartUtility.PartsNeedingDamageRepair(patient).Any()) { jobDef = CyberizationDefOf.Cyberization_RepairPartDamage; } else if (PartUtility.PartsNeedingRoutineMaintenance(patient).Any()) { jobDef = CyberizationDefOf.Cyberization_RoutinePartMaintenance; } else { return(null); } return(new Verse.AI.Job(jobDef) { targetA = patient }); }