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 }); }
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 bool HasJobOnThing(Pawn pawn, Thing thing, bool forced = false) { switch (thing) { case Pawn target: return(PartUtility.PartsNeedingAnyMaintenance(target).Any() && target.InBed()); default: return(false); } }
protected override Toil Repair() { _part = PartUtility.PartsNeedingDamageRepair(Patient).First(); var workSpeed = pawn.GetStatValue(StatDefOf.WorkSpeedGlobal); var repair = new Toil() .WithProgressBar(TargetIndex.A, () => 1f - _part.HealthPercent); repair.defaultCompleteMode = ToilCompleteMode.Never; repair.tickAction = delegate { try { PartUtility.GetHediffsForPart(_part.parent).OfType <Hediff_Injury>().First().Heal(workSpeed * baseRate); pawn.skills.Learn(SkillDefOf.Crafting, 0.125f * workSpeed); } catch (InvalidOperationException) { } }; return(repair); }
protected override Toil Repair() { _part = PartUtility.PartsNeedingRoutineMaintenance(Patient).First(); var workSpeed = pawn.GetStatValue(StatDefOf.WorkSpeedGlobal); var repair = new Toil() .WithProgressBar(TargetIndex.A, () => _part.Percent); repair.defaultCompleteMode = ToilCompleteMode.Never; repair.tickAction = delegate { try { _part.DoMaintenance((int)(workSpeed * baseRate)); pawn.skills.Learn(SkillDefOf.Crafting, 0.125f * workSpeed); } catch (InvalidOperationException) { } }; return(repair); }