public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn) { //// No base float menu options allowed! //foreach (FloatMenuOption fmo in base.GetFloatMenuOptionsFor(myPawn)) //{ // yield return fmo; //} // No self medication! if (myPawn == this) { yield break; } // Sedate AIPawn Action action_OrderSedateMai = delegate { myPawn.drafter.Drafted = false; Job jobNew = new Job(DefDatabase <JobDef> .GetNamed("AIPawn_Sedate"), this) { count = 1 }; myPawn.jobs.TryTakeOrderedJob(jobNew); }; yield return(new FloatMenuOption(txtFloatMenuSedateAIPawn.Translate(this.Label), action_OrderSedateMai)); // Sedate and Carry AIPawn to recharge station Building_AIPawnRechargeStation rechargeStation; rechargeStation = HelperAIPawn.FindMedicalRechargeStationFor(this); if (rechargeStation == null) { rechargeStation = HelperAIPawn.FindRechargeStationFor(this); } Action action_OrderSedateAndCarryMai = delegate { myPawn.drafter.Drafted = false; Job jobNew = new Job(DefDatabase <JobDef> .GetNamed("AIPawn_SedateAndRescue"), this, rechargeStation) { count = 1 }; myPawn.jobs.TryTakeOrderedJob(jobNew); }; if (rechargeStation != null) { yield return(new FloatMenuOption(txtFloatMenuSedateAndRescueAIPawn.Translate(this.Label), action_OrderSedateAndCarryMai)); } else { yield return(new FloatMenuOption(txtFloatMenuSedateAndRescueAIPawn.Translate(this.Label), null)); } yield break; }
protected override Job TryGiveJob(Pawn pawn) { if (Find.TickManager.TicksGame - pawn.mindState.lastDisturbanceTick < 400) { return(null); } AIPawn aiPawn = pawn as AIPawn; Building_AIPawnRechargeStation rechargeStation = HelperAIPawn.FindRechargeStationFor(aiPawn); if (rechargeStation == null) { return(null); } if (rechargeStation.owners != null && !rechargeStation.owners.Contains(aiPawn) && !rechargeStation.Medical) { aiPawn.ownership.ClaimBedIfNonMedical(rechargeStation); } if (aiPawn.ownership.OwnedBed == null || aiPawn.ownership.OwnedBed != rechargeStation) { return(null); } Job job = new Job(JobDefOf.LayDown, rechargeStation); return(job); }
private void TryGoRecharging() { // Drafting active, do nothing if (this.Drafted || !this.Spawned) { return; } // No recharge station, do nothing if (this.ownership.OwnedBed == null) { Building_AIPawnRechargeStation rs = HelperAIPawn.FindRechargeStationFor(this); if (rs == null) { return; } this.ownership.ClaimBedIfNonMedical(rs); //rs.TryAssignPawn(this); OLD if (this.ownership.OwnedBed == null) { return; } } Building_AIPawnRechargeStation rechargeStation = this.ownership.OwnedBed as Building_AIPawnRechargeStation; if (rechargeStation == null) { return; } if (rechargeStation.Position == this.Position) { return; } rechargeStation.Button_CallOwnerToRecharge(); }