protected override Job TryGiveJob(Pawn pawn) { Predicate <Thing> validator = delegate(Thing t) { if (!t.def.hasInteractionCell) { return(false); } if (!t.def.HasComp(typeof(CompMannable))) { return(false); } if (!pawn.CanReserve(t, 1, -1, null, false)) { return(false); } if (JobDriver_ManTurret.FindAmmoForTurret(pawn, (Building_TurretGun)t) == null) { return(false); } return(true); }; Thing thing = GenClosest.ClosestThingReachable(this.GetRoot(pawn), pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.BuildingArtificial), PathEndMode.InteractionCell, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), this.maxDistFromPoint, validator, null, 0, -1, false, RegionType.Set_Passable, false); if (thing != null) { Job job = new Job(JobDefOf.ManTurret, thing); job.expiryInterval = 2000; job.checkOverrideOnExpire = true; return(job); } return(null); }
protected override Job TryGiveJob(Pawn pawn) { Predicate <Thing> validator = delegate(Thing t) { if (!t.def.hasInteractionCell) { return(false); } if (!t.def.HasComp(typeof(CompMannable))) { return(false); } if (!pawn.CanReserve(t)) { return(false); } return((JobDriver_ManTurret.FindAmmoForTurret(pawn, (Building_TurretGun)t) != null) ? true : false); }; Thing thing = GenClosest.ClosestThingReachable(GetRoot(pawn), pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.BuildingArtificial), PathEndMode.InteractionCell, TraverseParms.For(pawn), maxDistFromPoint, validator); if (thing != null) { Job job = JobMaker.MakeJob(JobDefOf.ManTurret, thing); job.expiryInterval = 2000; job.checkOverrideOnExpire = true; return(job); } return(null); }
protected override IEnumerable <Toil> MakeNewToils() { _003CMakeNewToils_003Ec__Iterator0 _003CMakeNewToils_003Ec__Iterator = (_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_004e: stateMachine*/; this.FailOnDespawnedNullOrForbidden(TargetIndex.A); Toil gotoTurret = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell); Toil loadIfNeeded = new Toil(); loadIfNeeded.initAction = delegate { Pawn actor = loadIfNeeded.actor; Building building = (Building)actor.CurJob.targetA.Thing; Building_TurretGun building_TurretGun = building as Building_TurretGun; if (!JobDriver_ManTurret.GunNeedsLoading(building)) { _003CMakeNewToils_003Ec__Iterator._0024this.JumpToToil(gotoTurret); } else { Thing thing = JobDriver_ManTurret.FindAmmoForTurret(_003CMakeNewToils_003Ec__Iterator._0024this.pawn, building_TurretGun); if (thing == null) { if (actor.Faction == Faction.OfPlayer) { Messages.Message("MessageOutOfNearbyShellsFor".Translate(actor.LabelShort, building_TurretGun.Label).CapitalizeFirst(), building_TurretGun, MessageTypeDefOf.NegativeEvent); } actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); } actor.CurJob.targetB = thing; actor.CurJob.count = 1; } }; yield return(loadIfNeeded); /*Error: Unable to find new state assignment for yield return*/; }
internal bool <> m__0(Thing t) { return(t.def.hasInteractionCell && t.def.HasComp(typeof(CompMannable)) && this.pawn.CanReserve(t, 1, -1, null, false) && JobDriver_ManTurret.FindAmmoForTurret(this.pawn, (Building_TurretGun)t) != null); }
protected override Job TryGiveJob(Pawn pawn) { Predicate <Thing> validator = (Thing t) => t.def.hasInteractionCell && t.def.HasComp(typeof(CompMannable)) && pawn.CanReserve(t, 1, -1, null, false) && JobDriver_ManTurret.FindAmmoForTurret(pawn, (Building_TurretGun)t) != null; Thing thing = GenClosest.ClosestThingReachable(this.GetRoot(pawn), pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.BuildingArtificial), PathEndMode.InteractionCell, TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false), this.maxDistFromPoint, validator, null, 0, -1, false, RegionType.Set_Passable, false); Job result; if (thing != null) { result = new Job(JobDefOf.ManTurret, thing) { expiryInterval = 2000, checkOverrideOnExpire = true }; } else { result = null; } return(result); }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDespawnedNullOrForbidden(TargetIndex.A); Toil gotoTurret = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.InteractionCell); Toil loadIfNeeded = new Toil(); loadIfNeeded.initAction = delegate { Pawn actor = loadIfNeeded.actor; Building building = (Building)actor.CurJob.targetA.Thing; Building_TurretGun building_TurretGun = building as Building_TurretGun; if (!JobDriver_ManTurret.GunNeedsLoading(building)) { this.$this.JumpToToil(gotoTurret); return; } Thing thing = JobDriver_ManTurret.FindAmmoForTurret(this.$this.pawn, building_TurretGun); if (thing == null) { if (actor.Faction == Faction.OfPlayer) { Messages.Message("MessageOutOfNearbyShellsFor".Translate(new object[] { actor.LabelShort, building_TurretGun.Label }).CapitalizeFirst(), building_TurretGun, MessageTypeDefOf.NegativeEvent, true); } actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); } actor.CurJob.targetB = thing; actor.CurJob.count = 1; }; yield return(loadIfNeeded); yield return(Toils_Reserve.Reserve(TargetIndex.B, 10, 1, null)); yield return(Toils_Goto.GotoThing(TargetIndex.B, PathEndMode.OnCell).FailOnSomeonePhysicallyInteracting(TargetIndex.B)); yield return(Toils_Haul.StartCarryThing(TargetIndex.B, false, false, false)); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch)); yield return(new Toil { initAction = delegate { Pawn actor = loadIfNeeded.actor; Building building = (Building)actor.CurJob.targetA.Thing; Building_TurretGun building_TurretGun = building as Building_TurretGun; SoundDefOf.Artillery_ShellLoaded.PlayOneShot(new TargetInfo(building_TurretGun.Position, building_TurretGun.Map, false)); building_TurretGun.gun.TryGetComp <CompChangeableProjectile>().LoadShell(actor.CurJob.targetB.Thing.def, 1); actor.carryTracker.innerContainer.ClearAndDestroyContents(DestroyMode.Vanish); } }); yield return(gotoTurret); Toil man = new Toil(); man.tickAction = delegate { Pawn actor = man.actor; Building building = (Building)actor.CurJob.targetA.Thing; if (JobDriver_ManTurret.GunNeedsLoading(building)) { this.$this.JumpToToil(loadIfNeeded); return; } building.GetComp <CompMannable>().ManForATick(actor); }; man.defaultCompleteMode = ToilCompleteMode.Never; man.FailOnCannotTouch(TargetIndex.A, PathEndMode.InteractionCell); yield return(man); }