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
            });
        }
コード例 #2
0
        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);
            }
        }
コード例 #4
0
        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);
        }